From 0261c3263623b1e4c7e896bf4251f111ac4b930d Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 6 Jan 1999 15:22:33 +0000 Subject: [PATCH] Code update for Window Maker version 0.50.0 Read changes in ChangeLog and NEWS --- AUTHORS | 20 +- BUGS | 2 - ChangeLog | 42 + FAQ | 1367 ++++++---- INSTALL | 69 +- Install | 24 + MIRRORS | 5 + Makefile.in | 6 +- NEWS | 149 ++ README | 48 +- TODO | 16 +- WINGs/ChangeLog | 17 + WINGs/Makefile.am | 18 +- WINGs/Makefile.in | 91 +- WINGs/Resources/Makefile.in | 4 + WINGs/WINGs.h | 30 +- WINGs/WINGsP.h | 9 +- WINGs/WUtil.h | 31 + WINGs/findfile.c | 14 +- WINGs/wapplication.c | 5 - WINGs/wbrowser.c | 27 +- WINGs/wcolorwell.c | 180 +- WINGs/wevent.c | 101 +- WINGs/wfilepanel.c | 26 + WINGs/wfont.c | 19 +- WINGs/wframe.c | 2 +- WINGs/widgets.c | 35 + WINGs/wlabel.c | 7 + WINGs/wlist.c | 43 +- WINGs/wmisc.c | 8 +- WINGs/wpanel.c | 11 +- WINGs/wpixmap.c | 31 +- WINGs/wpopupbutton.c | 127 +- WINGs/wslider.c | 110 +- WINGs/wtest.c | 31 +- WINGs/wtextfield.c | 12 +- WINGs/wview.c | 3 +- WPrefs.app/Appearance.c | 236 ++ WPrefs.app/Focus.c | 2 +- WPrefs.app/KeyboardShortcuts.c | 62 +- WPrefs.app/Makefile.am | 6 +- WPrefs.app/Makefile.in | 75 +- WPrefs.app/Menu.c | 21 +- WPrefs.app/MouseSettings.c | 4 +- WPrefs.app/Paths.c | 3 +- WPrefs.app/README | 11 + WPrefs.app/TexturePanel.c | 4 +- WPrefs.app/Themes.c | 262 ++ WPrefs.app/WPrefs.c | 21 +- WPrefs.app/WPrefs.h | 13 +- WPrefs.app/main.c | 64 +- WPrefs.app/po/Makefile.am | 2 + WPrefs.app/po/Makefile.in | 6 + WPrefs.app/po/{hr.po => cs.po} | 572 +++-- WPrefs.app/po/hr.po | 2542 +++++++++---------- WPrefs.app/po/{hr.po => ko.po} | 2638 ++++++++++---------- WPrefs.app/tiff/Makefile.in | 4 + WPrefs.app/xpm/Makefile.in | 4 + WindowMaker/Backgrounds/BlueWaves.jpeg | Bin 17988 -> 0 bytes WindowMaker/Backgrounds/Makefile.am | 2 +- WindowMaker/Backgrounds/Makefile.in | 6 +- WindowMaker/Defaults/Makefile.in | 4 + WindowMaker/Defaults/WMState | 2 +- WindowMaker/Defaults/WMState.in | 2 +- WindowMaker/Defaults/WMWindowAttributes | 7 + WindowMaker/Defaults/WMWindowAttributes.in | 7 + WindowMaker/IconSets/Makefile.am | 12 +- WindowMaker/IconSets/Makefile.in | 16 +- WindowMaker/Icons/Makefile.in | 4 + WindowMaker/Makefile.am | 40 +- WindowMaker/Makefile.in | 42 +- WindowMaker/Pixmaps/Makefile.in | 4 + WindowMaker/README.themes | 85 + WindowMaker/Styles/{Autumn => Autumn.style} | 0 WindowMaker/Styles/{Black => Black.style} | 0 WindowMaker/Styles/BlackTexture.style | 19 + WindowMaker/Styles/{Blue => Blue.style} | 2 + WindowMaker/Styles/BlueAluminum | 16 - WindowMaker/Styles/{BlueDawn => BlueDawn.style} | 2 +- .../Styles/{BlueishGreen => BlueishGreen.style} | 0 WindowMaker/Styles/{Brown => Brown.style} | 0 WindowMaker/Styles/{Chumbo => Chumbo.style} | 0 WindowMaker/Styles/{Copper => Copper.style} | 0 WindowMaker/Styles/{DarkBlue => DarkBlue.style} | 0 WindowMaker/Styles/{DarkRed => DarkRed.style} | 0 WindowMaker/Styles/{Fire => Fire.style} | 0 WindowMaker/Styles/{Food => Food.style} | 0 WindowMaker/Styles/{Golden => Golden.style} | 0 WindowMaker/Styles/{Green => Green.style} | 0 WindowMaker/Styles/{GreyBlue => GreyBlue.style} | 0 WindowMaker/Styles/{Gtk => Gtk.style} | 0 WindowMaker/Styles/{LightBlue => LightBlue.style} | 0 WindowMaker/Styles/Makefile.am | 66 +- WindowMaker/Styles/Makefile.in | 97 +- WindowMaker/Styles/{Pastel => Pastel.style} | 0 WindowMaker/Styles/Pink | 16 - WindowMaker/Styles/Pumpkin | 19 - WindowMaker/Styles/{Purple => Purple.style} | 0 WindowMaker/Styles/{Red => Red.style} | 0 WindowMaker/Styles/{RednBlue => RednBlue.style} | 0 WindowMaker/Styles/ShinyBrown | 49 - WindowMaker/Styles/{Summer => Summer.style} | 0 .../Styles/{Traditional => Traditional.style} | 2 + .../Styles/{VioletBlue => VioletBlue.style} | 0 WindowMaker/Themes/BlueWaves | 59 - WindowMaker/Themes/Checker.themed/Makefile.am | 7 + .../Checker.themed}/Makefile.in | 18 +- WindowMaker/Themes/Checker.themed/checker.xpm | 49 + WindowMaker/Themes/Checker.themed/style | 19 + WindowMaker/Themes/{Default => Default.style} | 0 WindowMaker/Themes/Makefile.am | 4 +- WindowMaker/{ => Themes}/Makefile.in | 71 +- WindowMaker/Themes/Night.themed/Makefile.am | 7 + .../Night.themed}/Makefile.in | 18 +- .../Night.themed}/SeaNight.jpeg | Bin WindowMaker/Themes/{Night => Night.themed/style} | 2 +- WindowMaker/Themes/{OpenStep => OpenStep.style} | 0 WindowMaker/Themes/{Pastel => Pastel.style} | 0 WindowMaker/menu | 28 +- WindowMaker/menu.dk | 8 +- WindowMaker/menu.el | 8 +- WindowMaker/menu.es | 8 +- WindowMaker/menu.fi | 8 +- WindowMaker/menu.fr | 8 +- WindowMaker/menu.he | 8 +- WindowMaker/menu.hr | 8 +- WindowMaker/menu.hu | 155 ++ WindowMaker/menu.ja | 8 +- WindowMaker/menu.ko | 8 +- WindowMaker/menu.no | 8 +- WindowMaker/menu.pt | 12 +- WindowMaker/menu.se | 8 +- WindowMaker/menu.sl | 8 +- WindowMaker/menu.tr | 8 +- WindowMaker/mkMakefile | 80 + WindowMaker/plmenu | 103 - WindowMaker/plmenu.fr.in | 8 +- WindowMaker/plmenu.hr.in | 8 +- WindowMaker/plmenu.in | 8 +- WindowMaker/wmmacros | 73 - acconfig.h | 5 + aclocal.m4 | 110 + configure | 812 +++--- configure.in | 111 +- doc/Makefile.in | 4 + doc/getstyle.1x | 43 +- doc/setstyle.1x | 10 +- ltconfig | 1064 ++++++++ ltmain.sh | 1813 ++++++++++++++ po/Makefile.in | 4 + po/README | 2 +- po/cs.po | 539 ++-- po/ko.po | 1010 +++++--- src/Makefile.am | 17 +- src/Makefile.in | 89 +- src/WindowMaker.h | 26 +- src/actions.c | 184 +- src/actions.h | 4 + src/appicon.c | 30 +- src/application.c | 13 +- src/client.c | 54 +- src/config.h | 11 +- src/config.h.in | 9 + src/defaults.c | 886 +++---- src/defaults.h | 8 +- src/dialog.c | 355 ++- src/dock.c | 254 +- src/dock.h | 4 + src/event.c | 233 +- src/framewin.c | 76 +- src/framewin.h | 14 +- src/funcs.h | 24 +- src/gnome.c | 558 +++++ src/{workspace.h => gnome.h} | 37 +- src/icon.c | 22 +- src/keybind.h | 43 +- src/kwm.c | 1519 +++++++++++ src/kwm.h | 93 + src/main.c | 14 +- src/menu.c | 84 +- src/misc.c | 181 +- src/motif.c | 258 ++ src/{workspace.h => motif.h} | 31 +- src/moveres.c | 324 ++- src/openlook.c | 384 +++ src/{workspace.h => openlook.h} | 31 +- src/placement.c | 182 +- src/properties.c | 117 +- src/properties.h | 10 +- src/rootmenu.c | 186 +- src/screen.c | 168 +- src/screen.h | 66 +- src/session.c | 163 +- src/shutdown.c | 131 +- src/stacking.c | 29 +- src/startup.c | 49 +- src/switchmenu.c | 98 +- src/texture.c | 116 +- src/texture.h | 29 +- src/wconfig.h | 69 +- src/wconfig.h.in | 69 +- src/wdefaults.c | 102 +- src/window.c | 708 +++--- src/window.h | 55 +- src/winmenu.c | 334 ++- src/winspector.c | 248 +- src/winspector.h | 2 +- src/workspace.c | 152 +- src/workspace.h | 4 +- src/xde.c | 113 + src/xde.h | 8 + test/Makefile.am | 2 +- test/Makefile.in | 57 +- util/Makefile.am | 8 +- util/Makefile.in | 81 +- util/README | 3 +- util/getstyle.c | 404 ++- util/setstyle.c | 252 +- util/wmaker.inst.in | 31 +- util/wmsetbg.c | 1672 +++++++++---- util/wsetfont | 34 +- wmlib/Makefile.in | 57 +- wrlib/Makefile.am | 10 +- wrlib/Makefile.in | 132 +- wrlib/context.c | 7 +- wrlib/convolve.c | 12 +- wrlib/jpeg.c | 11 +- wrlib/nxpm.c | 33 +- wrlib/png.c | 7 +- wrlib/raster.c | 2 +- wrlib/view.c | 1 - wrlib/wraster.h | 13 +- 232 files changed, 19944 insertions(+), 8136 deletions(-) create mode 100644 WPrefs.app/Appearance.c create mode 100644 WPrefs.app/Themes.c copy WPrefs.app/po/{hr.po => cs.po} (83%) rewrite WPrefs.app/po/hr.po (73%) copy WPrefs.app/po/{hr.po => ko.po} (59%) delete mode 100755 WindowMaker/Backgrounds/BlueWaves.jpeg create mode 100644 WindowMaker/README.themes rename WindowMaker/Styles/{Autumn => Autumn.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Black => Black.style} (100%) mode change 100755 => 100644 create mode 100644 WindowMaker/Styles/BlackTexture.style rename WindowMaker/Styles/{Blue => Blue.style} (89%) mode change 100755 => 100644 delete mode 100755 WindowMaker/Styles/BlueAluminum rename WindowMaker/Styles/{BlueDawn => BlueDawn.style} (99%) mode change 100755 => 100644 rename WindowMaker/Styles/{BlueishGreen => BlueishGreen.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Brown => Brown.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Chumbo => Chumbo.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Copper => Copper.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{DarkBlue => DarkBlue.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{DarkRed => DarkRed.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Fire => Fire.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Food => Food.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Golden => Golden.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Green => Green.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{GreyBlue => GreyBlue.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Gtk => Gtk.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{LightBlue => LightBlue.style} (100%) mode change 100755 => 100644 rewrite WindowMaker/Styles/Makefile.am (99%) rename WindowMaker/Styles/{Pastel => Pastel.style} (100%) mode change 100755 => 100644 delete mode 100755 WindowMaker/Styles/Pink delete mode 100755 WindowMaker/Styles/Pumpkin rename WindowMaker/Styles/{Purple => Purple.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Red => Red.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{RednBlue => RednBlue.style} (100%) mode change 100755 => 100644 delete mode 100755 WindowMaker/Styles/ShinyBrown rename WindowMaker/Styles/{Summer => Summer.style} (100%) mode change 100755 => 100644 rename WindowMaker/Styles/{Traditional => Traditional.style} (92%) mode change 100755 => 100644 rename WindowMaker/Styles/{VioletBlue => VioletBlue.style} (100%) mode change 100755 => 100644 delete mode 100755 WindowMaker/Themes/BlueWaves create mode 100755 WindowMaker/Themes/Checker.themed/Makefile.am copy WindowMaker/{Backgrounds => Themes/Checker.themed}/Makefile.in (94%) create mode 100755 WindowMaker/Themes/Checker.themed/checker.xpm create mode 100755 WindowMaker/Themes/Checker.themed/style rename WindowMaker/Themes/{Default => Default.style} (100%) mode change 100755 => 100644 copy WindowMaker/{ => Themes}/Makefile.in (82%) create mode 100755 WindowMaker/Themes/Night.themed/Makefile.am copy WindowMaker/{Backgrounds => Themes/Night.themed}/Makefile.in (94%) rename WindowMaker/{Backgrounds => Themes/Night.themed}/SeaNight.jpeg (100%) rename WindowMaker/Themes/{Night => Night.themed/style} (99%) rename WindowMaker/Themes/{OpenStep => OpenStep.style} (100%) mode change 100755 => 100644 rename WindowMaker/Themes/{Pastel => Pastel.style} (100%) mode change 100755 => 100644 create mode 100644 WindowMaker/menu.hu create mode 100755 WindowMaker/mkMakefile delete mode 100644 WindowMaker/plmenu delete mode 100644 WindowMaker/wmmacros create mode 100755 ltconfig create mode 100644 ltmain.sh create mode 100644 src/gnome.c copy src/{workspace.h => gnome.h} (51%) create mode 100644 src/kwm.c create mode 100644 src/kwm.h create mode 100644 src/motif.c copy src/{workspace.h => motif.h} (50%) create mode 100644 src/openlook.c copy src/{workspace.h => openlook.h} (50%) create mode 100644 src/xde.c create mode 100644 src/xde.h rewrite util/wmsetbg.c (80%) diff --git a/AUTHORS b/AUTHORS index 2da169c3..3168743a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,7 +13,7 @@ restart, dock bug fixes Andrea Arcangeli Fix for cascade window placement -Peter Bentley +Peter Bentley fixed WM_STATE handling bug, fixed some memory leaks, made application menus be mapped near the windows for non-click-to-focus modes, timer bug @@ -27,6 +27,9 @@ shaded window indication in window list Rob Clark Text input field, 15bpp support +George Clernon +bug fix in browser widget + Sylvain CORRE bug fix for MkLinux/PPC @@ -53,8 +56,8 @@ Documentation help, autoconf cleanup Mark 'segfault' Guzman Various bugfixes -Ullrich Hafner -Better detection of gfx libraries +Ullrich Hafner +Better detection of gfx libraries, added IconTitleColor/IconTitleBack Greg Hayes Twisted miniaturization animation @@ -111,7 +114,7 @@ Tim Malone bug fix, jpeg bug fix MANOME Tomonori -I18N bug fixes and japanese locale +I18N bug fixes and japanese locale, wsetfont script Brian Alexander Martin PIPE_MENU @@ -141,7 +144,7 @@ Initial code for clip's collapse feature. Ture Pelsson various portability fixes, replaced busy wait with select() in event handling code, fixed problem with some misbehaved kids after a fork(), -some other bug fixes +some other bug fixes, support for poll() in event handling code Toby Sargeant menu format converter @@ -155,6 +158,9 @@ REDUCE_APPICON/single-icon Chong Shang Shan flipping iconification animation +Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz> +SGI "black dialogs" bug fix + Paul D. Smith SunOS portability, configure fixes @@ -182,7 +188,9 @@ dgradient fix "]d" Window list menu miniaturized/hidden hints, XDE support, XKB lock -language status +language status, WINGs enhancements, bug fixes, window commands menu +enhancement, window move/resize by keyboard + Trae Mc Combs BlueWaves.jpeg background image in BlueWaves theme. diff --git a/BUGS b/BUGS index 9da4313f..4766748e 100644 --- a/BUGS +++ b/BUGS @@ -2,8 +2,6 @@ - during startup, transient windows should be miniaturized with their owners not in their own icons - stacking code is buggy (or XFree is buggy) -- WINGs has problems in some platforms (SGI, Sun etc.) Anyone on these -systems want to fix it? - 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 diff --git a/ChangeLog b/ChangeLog index f4314942..c7bd1072 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +Changes since version 0.20.3: +............................. + +- window list is ordered by workspace +- preliminary grid move mode +- fixed prob with docked apps with the same name switching places (like wmmon + and wmmon -s) +- wrapping of workspace switching for 5button mice +- added restart in fallback menu +- fixed buglet in modifier error reporting +- extra options in window command menu +- changed select() used in wevent.c to poll() +- fixed bug in SGI boxes (black dialogs) +- added IconTitleBack, IconTitleColor +- made error checking stricter +- fixed crash when saving application supplied icons that have many colors +- added move threshold to menus +- added textured gradient textures +- added -nofont flag for setstyle +- added -p flag and theme pack support for getstyle +- fixed crash bug when clicking on menu title opened with kbd +- fixed bug that caused incorrect saving of icon configuration (the -name bug) +- scale pixmap texture for workspaceback type will maintain aspect ratio +- fixed memory leak in jpeg loader +- started XStandardColormap support +- added StartMaximized window flag +- fixed bug of mixed up Unfocusable and StartMiniaturized flags +- yet another try to switch to shared libraries +- workspace specific background images +- stack new windows to under focused window if autofocus is off (disabled) +- added kde support +- implemented the "GNOME Window Manager Compliance" stuff +- window move/resize by keyboard +- rewrote window attribute code to make it cleaner +- added --enable-lite configure option +- added support to change prompt in %a() for root menu +- rewrote exit code +- added KeepInsideScreen=YES; for scilab in default WMWindowAttributes +- added an option to the Clip, to allow automatic Raise/Lower when the mouse + cursor enter/leave the Clip. + + Changes since version 0.20.2: ............................. diff --git a/FAQ b/FAQ index 59e0d91e..99b7b4a2 100644 --- a/FAQ +++ b/FAQ @@ -1,143 +1,224 @@ + WindowMaker FAQ ==================================================================== +Last modified: Thursday November 26 12:50PM EST 1998 + the latest info can be found at http://www.dpo.uab.edu/~grapeape/wmfaq.html or -http://wm.gnu.net/wmfaq/ +http://wm.current.nu/wmfaq/ -------------------------- -This version was slightly modified by me (Alfredo). Chris, I enclosed -my changes with "###". Please add the changes to your official version. - - Summary of Contents: -Introduction - - What is WindowMaker? - - Where can I get WindowMaker? - - Where are the mailing list archives? - - Where is there more documentation on configuring WindowMaker? - -Installation - - Where can I get proplist.h? - - Why do no icons show up after installing WindowMaker 0.15.0 when I've - followed all the directions? - - How do I get libtiff to work? - - How do I get libjpeg to work? - - How do I get libpng to work? - - Does wmsound work with 0.1x.x? - - Can I use WindowMaker with KDE or GNOME or CDE? - - How do I switch CDE's windowmanager to use WindowMaker? - - Do I need to rerun wmaker.inst with every new version of WindowMaker? - - When I run wmaker it quits complaing about something __register_frame_info. - - The libxyz image format library is not detected. - -Usage - - What is an appicon? - - How do I get new apps on the dock (The line of pixmaps on the right side - of the screen by default) - - What is the difference between the Exit and Exit Session Option? - - How do I "dock" Icons on the Clip? - - Why do none of my Key Bindings work in WindowMaker 0.1x.x - - How do I rename workspaces? - - How can I resize a window if the window is larger than my currect - desktop? - - When I run xyz (xyz usually = rxvt) from the dock and later quit, the - 3 dots don't come back and I can't run it again. - -Configuration - - What are those files inside my ~/GNUstep directory? - - How do I enable the normal X sloppy focus mode? - - How do I get my auto-arrange icons to work? - - How do I get my Meta-Tab to cycle through windows correctly? - - How can I define my own Icon for a program? (instead of the Icon the - Application Supplies?) - - How do I get a pixmap background for my appicons (those things in the - dock)? - - How do you dock that doesn't have an appicon in - the new version of WindowMaker? - - How do I get x11amp to not have a title bar? (or any other program for that - matter?) - - How do I set a pixmap background? - - Can I put pixmaps in my root menu and title bars? - - How do I get my Minimize Icon to look like the triangle I see in - screenshots? - - How do I get superfluous bells and whistles working? - - How do I get my oldstyle back? - - How can I set dock/clip to use single click to launch applications, - instead of double click? - -Other Applications - - How do I assign gimp an appicon? - - How do I get an appicon for XEmacs 20.3+? - - Where do you get that clock program I always see on people's desktops? - - How do you dock asclock? - - How do you dock wmload? - - What other apps exist for the dock? - - How do I get an appicon for rxvt so I can dock it? - - How do I get different icons for rxvt's (or xterms) running different - programs? - - How do I allow Alt+# to work in an rxvt session? (with irc for example) - - When I use Netscape with Window Maker it crashes. - -Programming - - How do I get a normal X application to produce an appicon? - - How do I get my tcl/tk application to produce an appicon? - -Miscellaneous Questions - - Is there a pager for WindowMaker? - - Can I have folders like in AfterStep? - - What exactly are Themes? - - How do I install a Theme? - - How do I make a Theme? - - Why don't you distribute {normal diff,xdelta} patches? + +1 - Introduction + 1.1 What is Window Maker? + 1.2 Where can I get Window Maker? + 1.3 Where are the mailing list archives? + 1.4 Where is more documentation on configuring Window Maker? + 1.5 What is an App Icon? + 1.6 How can I get a question added to the FAQ? + 1.7 How do I report bugs? + 1.8 Is there an anomymous cvs server? + +2 - Installation + 2.1 Where can I get proplist.h? + 2.2 Why do no icons show up after installing Window Maker 0.15.0 + when I've followed all the directions? + 2.3 How do I get libtiff to work? + 2.4 How do I get libjpeg to work? + 2.5 How do I get libpng to work? + 2.6 How do I get libgif (or libungif) to work? + 2.7 Does wmsound work with 0.1x.x? + 2.8 Can I use WindowMaker with KDE or GNOME or CDE? + 2.9 How do I get Window Maker working with xdm in Redhat 5.[01]? + 2.10 Do I need to rerun wmaker.inst with every new version of + Window Maker? + 2.11 When I install Window Maker, I've used wmaker.inst correctly + and I only get aroot menu with xterm and exit. How do I fix this? + 2.12 How do I get Window Maker to use more than 16 colors on my + SGI Indy Workstation? + 2.13 Using WindowMaker with Solaris 2.6 CDE + 2.14 How do I switch CDE's windowmanager to use Window Maker? + 2.15 When I run wmaker it quits complaing about something + "__register_frame_info". + 2.16 When I run wmaker it complains about something like library is + 62, caller expects 61 + +3 - Usage + 3.1 How do I get new apps on the dock (The line of pixmaps on the + right side of the screen by default) + 3.2 What is the difference between the Exit and Exit Session Option? + 3.3 How do I "dock" AppIcons on the Clip? + 3.4 Why do none of my Key Bindings work in Window Maker 0.1x.x + 3.5 How do I rename workspaces? + 3.6 How can I resize a window if the window is larger than my currect + desktop? + 3.7 How do I "undock" AppIcons? + 3.8 I docked an application but when I run it the button is permanently + shaded and I can't run new instances. + 3.9 When I run wmaker it complains about not being able to load any + fonts. + +4 - Configuration + 4.1 What are those files inside my ~/GNUstep directory? + 4.2 How do I enable the normal X sloppy focus mode? + 4.3 How do I get my auto-arrange icons to work? + 4.4 How do I get my Meta-Tab to cycle through windows correctly? + 4.5 How can I define my own Icon for a program? (instead of the Icon + the Application Supplies?) + 4.6 How do I get a pixmap background for my appicons (those things + in the dock)? + 4.7 How do you dock that doesn't have an + appicon in the new version of Window Maker? + 4.8 How do I get x11amp to not have a title bar? (or any other + program for that matter?) + 4.9 How do I set a pixmap background? + 4.10 Can I put pixmaps in my root menu and title bars? + 4.11 How do I get my Minimize Icon to look like the triangle I see in + screenshots? + 4.12 How do I get superfluous bells and whistles working? + 4.13 How do I get my oldstyle back? + 4.14 How do I get the window menu with only a two button mouse? + 4.15 How do I edit my root menu? + 4.16 How can I set dock/clip to use single click to launch applications, + instead of double click? + +5 - Other Applications + 5.1 How do I assign gimp an appicon? + 5.2 How do I get an appicon for XEmacs 20.3+? + 5.3 Where do you get that clock program I always see on people's + desktops? + 5.4 How do you dock asclock? + 5.5 How do you dock wmload? + 5.6 What other apps exist for the dock? + 5.7 How do I get an appicon for rxvt so I can dock it? + 5.8 How do I get different icons for rxvt's (or xterms) running different + programs? + 5.9 How do I launch multiple instances of XTerm from one appicon? + 5.10 How do I allow Alt+# to work in an rxvt session? (with irc for + example) + 5.11 Window Maker breaks scilab + +6 - Programming + 6.1 How do I get a normal X application to produce an appicon? + 6.2 How do I get my tcl/tk application to produce an appicon? + 6.3 What is WINGs? + 6.4 Where can I get more information about WINGs? + +7 - Miscellaneous Questions + 7.1 Is there a pager for Window Maker? + 7.2 Can I have folders like in AfterStep? + 7.3 How do I use getstyle and setstyle? + 7.4 Why don't you distribute {normal diff, xdelta} patches? + 7.5 Will you add GNOME support? + +8 - Themes + 8.1 What exactly are Themes? + 8.2 How do I install a Theme? + 8.3 How do I make a Theme? ======================================================================== + + -=-=-=-=-=-=- Introduction: -=-=-=-=-=-=- -What is WindowMaker? +1.1 What is Window Maker? ---------------------------------- -WindowMaker is an elegant X11 window manger that emulates the OpenStep -desktop with some noticeable enhancements. Look at -http://wm.gnu.net/screenshots.html for example screenshots. +Window Maker is an elegant X11 window manger that emulates the +OpenStep desktop with some noticeable enhancements. Look at +http://wm.current.nu/themes/my-themes.html and +http://wm.current.nu/themes/screenshots.html +here for example screenshots. -Where can I get WindowMaker? +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/. -NOTE: WindowMaker-0.16.1.tar.gz is the newest stable release, for some -reason it has not been moved into the release directory. You should -DEFINATELY go with 0.16.1 rather than 0.6.3. - -WindowMaker-0.17.5 is the newest development release. This will be the last -release with new features until 1.0 is released. Work from now until 1.0 will -focus on bug fixes, so keep testing and report those bugs! +NOTE: Also see http://wm.current.nu/downloads.html for the latest +Stable and Development versions. -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 development -versions. Just remember to save any unsaved data before you go playing -around with the config files. Also, remember they are developmental versions, -so your mileage may vary, don't get angry if they crash. +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 +development versions. Just remember to save any unsaved data before +you go playing around with the config files. Also, remember they are +developmental versions, so your mileage may vary, don't get angry if they +crash. -Where are the mailing list archives? +1.3 Where are the mailing list archives? ---------------------------------- -UPDATE: Ed has moved to Utah to work for Caldera, so the list has moved. -The new address is http://www.caldera.com/linuxcenter/forums/wmaker.html +UPDATE: Ed has moved to Utah to work for Caldera, so the list has +moved. The new address is +http://www.caldera.com/linuxcenter/forums/wmaker.html -The archives should come online again when Ed gets all moved in and comfy in -about 2 weeks or so. (around mid-august or so) Please be patient until then. -Thanks! +We are currently archiveless after the move. Hopefully this will change in the +near future. -Where is there more documentation on configuring WindowMaker? +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/ +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. + + +1.5 What is an appicon? +---------------------------------- +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.) + + +1.6. How can I get a question added to the FAQ? +---------------------------------- +Right now, the only method is to mail Chris Green or +myself the question or post it on the Window Maker +Mailing list, and see if enough people have the same problem. + +If you are a developer and would like to be able to edit the official FAQ on +Chris's site, let him know at + +He is currently pondering writing a front end that allows everyone to add +entries and only require a moderator approval before being posted. + + +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. + + +1.8. Is there an anomymous cvs server? +---------------------------------- +Yes there is. To check out from cvs, first + + export CVSROOT=":pserver:anoncvs@cvs.net-community.com:/gnustep" + cvs login + +'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. + @@ -145,139 +226,264 @@ ftp://ftp.windowmaker.org/pub/docs/ Installation: -=-=-=-=-=-=- -Where can I get proplist.h? +2.1 Where can I get proplist.h? ---------------------------------- -My first hint would be to look through the documentation a little more closely. -libPropList.tar.gz is located in the root of the WindowMaker distribution source -tree. Untar libproplist, compile and install it so that the it will be available to -compile WindowMaker. +My first hint would be to look through the documentation a little more +closely. libPropList.tar.gz is located in the root of the Window Maker +distribution source tree. Untar libproplist, compile and install it so that the it +will be available to compile Window Maker. -Why do no icons show up after installing WindowMaker >= 0.15.x when -I've followed all the directions? +2.2 Why do no icons show up after installing Window Maker >= 0.15.x + when I've followed all the directions? ---------------------------------- -According to Dan Pascu should not happen because WindowMaker should -detect if libtiff is going to be compiled in and then it will make the default theme -based around .xpm instead of .tif. +According to Dan Pascu should not happen because Window Maker +should detect if libtiff is going to be compiled in and then it will make the +default theme based around .xpm instead of .tif. -As of WindowMaker version 0.15.0, the default setup includes .tiff icons which -require you to have compiled WindowMaker with libtiff support. For some help -on compiling with libtiff, at the libtiff section of this FAQ. +As of Window Maker version 0.15.0, the default setup includes .tiff icons +which require you to have compiled Window Maker with libtiff support. For +some help on compiling with libtiff, at the libtiff section of this FAQ. -How do I get libtiff to work? +2.3 How do I get libtiff to work? ---------------------------------- The whole key to getting libtiff working for me was to upgrade to >= tiff-v3.4beta037-tar.gz availible at ftp.sgi.com. Rerun ./configure and make and it should work. I had previously been using -tiff-v3.4-tar.gz instead so the library was there just not working. A note to keep in -mind, is that the tiff libs are versioned rather oddly, version tiff-v3.4beta037 is -actually newer than tiff-v3.4. +tiff-v3.4-tar.gz instead so the library was there just not working. A note to +keep in mind, is that the tiff libs are versioned rather oddly, version +tiff-v3.4beta037 is actually newer than tiff-v3.4. -Make sure to rm config.cache and rerun ./configure before attempting to compile -again. +Make sure to rm config.cache and rerun ./configure before attempting to +compile again. -Also, make sure to use gnu-make for the WindowMaker compile. +Also, make sure to use gnu-make for the Window Maker compile. -How do I get libjpeg to work? +2.4 How do I get libjpeg to work? ---------------------------------- The newest jpeg libs are availible at ftp://ftp.uu.net/graphics/jpeg/. How many of you have seen that darned "lib reports 62 caller expects 61" type of error? -Well, I have more than once, and here are some answers to possibly help you -out. +Well, I have more than once, and here are some answers to possibly help +you out. First things first. As always, make sure there are not older copies of libjpeg -floating around on your system. By default my Slackware distribution came with -an old libjpeg.so.1 in the /usr/X11R6/lib/ directory. This can simply be deleted. Or -if something complains after you delete it, recompile it if you can to look for the -new lib in the right place, or if that fails, as a last resort, you might add a symlink -to the new lib like so: +floating around on your system. By default my Slackware distribution came +with an old libjpeg.so.1 in the /usr/X11R6/lib/ directory. This can simply be +deleted. Or if something complains after you delete it, recompile it if you +can to look for the new lib in the right place, or if that fails, as a last resort, +you might add a symlink to the new lib like so: ln -s /usr/local/lib/libjpeg.so.6.0.2 libjpeg.so.1 Now on to the error. This is basically caused by your application having been compiled to -dynamically use the libjpeg.so shared library. When you install a new lib and then -try to run your program again, it expects the lib it was compiled against, in this -case the older libjpeg.so.6.0.1 and instead finds libjpeg.so.6.0.2 and reports the -error. +dynamically use the libjpeg.so shared library. When you install a new lib and +then try to run your program again, it expects the lib it was compiled +against, in this case the older libjpeg.so.6.0.1 and instead finds libjpeg.so.6.0.2 +and reports the error. -The fix is actually rather simple. Along with adding a libjpeg.so.6 symlink like so -(just in case): +The fix is actually rather simple. Along with adding a libjpeg.so.6 symlink +like so (just in case): ln -s libjpeg.so.6.0.2 libjpeg.so.6 -where you installed your new lib, you simply need to recompile your app to link it -against the new library. :) +where you installed your new lib, you simply need to recompile your app to +link it against the new library. :) -Make sure to rm config.cache and rerun ./configure before attempting to compile -again. +Make sure to rm config.cache and rerun ./configure before attempting to +compile again. -Also, make sure to use gnu-make for the WindowMaker compile. +Also, make sure to use gnu-make for the Window Maker compile. -How do I get libpng to work? +2.5 How do I get libpng to work? ---------------------------------- The newest png libs are availible at -http://www.cdrom.com/pub/png/pngcode.html. +http://www.cdrom.com/pub/png/pngcode.html. + You should also get the newest zlib libs from http://www.cdrom.com/pub/infozip/zlib/. I had a few problems with this lib as well, basically I had an old libz.so in my -/usr/X11R6/lib/ directory which configure was finding first, and which failed the test, -being an older lib. +/usr/X11R6/lib/ directory which configure was finding first, and which failed the +test, being an older lib. -Generally the same applies here as with libjpeg, make sure there are no older -versions of the necessary libs floating around on your system, then try and -configure and make again. +Generally the same applies here as with libjpeg, make sure there are no +older versions of the necessary libs floating around on your system, then try +and configure and make again. -Make sure to rm config.cache and rerun ./configure before attempting to compile -again. +Make sure to rm config.cache and rerun ./configure before attempting to +compile again. -Also, make sure to use gnu-make for the WindowMaker compile. +Also, make sure to use gnu-make for the Window Maker compile. -Does wmsound work with 0.1x.x? +2.6 How do I get libgif (or libungif) to work? ---------------------------------- -As of WindowMaker 0.15.x, sound is now included by default but requires the -authors sound server. For more information, read the NEWS file in the -WindowMaker distribution. +The newest libgif is availible at +ftp://sunsite.unc.edu/pub/Linux/libs/giflib/. + +The newest libungif is availible at +ftp://sunsite.unc.edu/pub/Linux/libs/graphics/. -The author Anthony Quinn has released a version that works with -WindowMaker >= 0.15.x. It is available from it's home page at -http://www.frontiernet.net/~southgat/wmsound/ -or at -http://wm.gnu.net/files.html#wmsound +I had a few problems with libgif... it seems that the install process didn't +install the header file libgif.h, so although the Window Maker configure found +the lib (libgif.so.x), when you actually try to compile, it fails when it looks for +the header to include the make. I simply copied it from the libgif source +directory to the system include directory. (/usr/local/include/ on my system). +Make sure to rm config.cache and rerun ./configure before attempting to +compile again. +Also, make sure to use gnu-make for the Window Maker compile. -### New, possibly with some errors -Can I use WindowMaker with KDE or GNOME or CDE? +2.7 Does wmsound work with 0.1x.x? ---------------------------------- +As of Window Maker 0.15.x, sound is now included by default but requires +the authors sound server. For more information, read the NEWS file in the +Window Maker distribution. + +The author Anthony Quinn has released a +version that works with Window Maker >= 0.15.x. It is available from +it's home page at http://www.frontiernet.net/~southgat/wmsound/ +or on my site at http://wm.current.nu/files.html#wmsound +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 a suite of various applications that includes a custom window manager. The same is true for CDE. Now, answering the question: Yes, you can use WindowMaker in these -environments. To use WindowMaker with GNOME, you don't need to do anything -special. To use it with CDE, read the answer for "How do I switch CDE's -windowmanager to use WindowMaker?" +environments. To use Window Maker with GNOME, you don't need to do +anything special. To use it with CDE, read the answer for "How do I switch +CDE's windowmanager to use Window Maker?" To use it with KDE, read it's documentation to get rid of kwm (and possibly kpanel) and replace it with wmaker. Then, start WPrefs.app, go to "Mouse -Preferences" and set the "Disable mouse actions" check box. You will need to -restart WindowMaker to make this change take effect. The "Disable mouse -actions" change is needed to allow you to use krootwm, wich enables you to -use kfm's desktop icons, but will prevent you from accessing WindowMaker's -Applications and Window List menus with the mouse. +Preferences" and set the "Disable mouse actions" check box. You will +need to restart Window Maker to make this change take effect. The +"Disable mouse actions" change is needed to allow you to use krootwm, +wich enables you to use kfm's desktop icons, but will prevent you from +accessing Window Maker's Applications and Window List menus with the +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 +make sure of this by including a statement like + + export PATH=$PATH:/usr/local/bin + + +in your .xsession file. + +Make sure to chmod +x .xsession so that the Xsession script of xdm can +execute it. + +This is how the Xsession script is designed: + + startup=$HOME/.xsession + + if [ -x "$startup" ]; then + exec "$startup" + elif [ -x "$HOME/.Xclients" ]; then + exec "$HOME/.Xclients" + elif [ -x /etc/X11/xinit/Xclients ]; then + exec /etc/X11/xinit/Xclients + else + if [ -f "$resources" ]; then + xrdb -load "$resources" + fi + exec xsm + fi + + +You could also have a .Xclients file as was mentioned in previous revisions +of this question. + -### +2.10 Do I need to rerun wmaker.inst with every new version of + Window Maker? +---------------------------------- +Dan Pascu reveals the answer: + +When the user will need to run wmaker.inst again in a new release of +wmaker, we will write that down in the NEWS file. +(as I've done in 0.15.0). + +The way domain files are read beginning from 0.15.0 makes this +redundant. The user config files are merged with the global ones in +/usr/local/share/WindowMaker/Defaults. +So even if new options are added, they will reflect in the user configuration. + +Only if user wishes to change the default behavior, he needs to add that +option to the config file. + + +2.11 When I install Window Maker, I've used wmaker.inst correctly + and I only get aroot menu with xterm and exit. How do I fix this? +---------------------------------- +Most likely, the problem is that Window Maker can not find a copy of the C +pre processor in a directory such as /lib. The file /lib/cpp should be a +symbolic link to whatever c compiler's cpp you are using. Mine reads as: + + cpp -> ../usr/lib/gcc-lib/i586-pc-linux-gnu/pgcc-2.90.29/cpp* + + +There seems to be another common problem that exhibits this same +behavior. If you find another solution that matches this question please +email or . + + +2.12 How do I get Window Maker to use more than 16 colors on my + SGI Indy Workstation? +---------------------------------- +Thanks to Peter H. Chou for this answer: + +By default, the SGI X Server uses 8-bit Pseudocolor mode. +To change it, edit (as root) the file /usr/lib/X11/xdm/Xservers. +Change it to read: + + :0 secure /usr/bin/X11/X -bs -c -class TrueColor -depth 24 + + + + + +2.13 Using WindowMaker with Solaris 2.6 CDE +---------------------------------- +(thanks to Rob Funk, Unix God of osu.edu) + +Assuming you installed Window Maker according to the README's that +come with the source, all you need to run Window Maker on a Solaris box +is an entry in the .xinitrc. Only 0.17 - 0.19 versions have been tested, but +when you run the configure script, let it make changes to the .xinitrc file. It +should look something like this: + + #!/bin/sh + # Window Maker Default .xinitrc + exec /usr/local/bin/wmaker + +Believe it or not, that's all that it takes. This, in fact, runs WindowMaker +instead of OpenWindows. In order to choose WindowMaker, you simply +choose "OpenWindows Desktop" in the "Options - Session" Menus. +Choose "CDE Desktop" if you want CDE. -How do I switch CDE's window-manager to use WindowMaker? +The Color schemes and settings for Window Maker are seperate from +CDE. Tested on a SPARC 10, Solaris x86 should work also. (better, +hopefully) + + +2.14 How do I switch CDE's window-manager to use Window Maker? ---------------------------------- Method 1: @@ -292,11 +498,11 @@ Add the following two lines to .dtprofile in your home directory: SESSIONTYPE=xdm; export SESSIONTYPE PATH=:/usr/contrib/bin/X11:$PATH:.; export PATH -This tells CDE to go looking for an .xinitrc/.xsession instead of using the default -environment. +This tells CDE to go looking for an .xinitrc/.xsession instead of using the +default environment. -Make your .xsession/.xinitrc executable (VERY IMPORTANT, wmaker.inst did NOT -do this automatically for me) using eg. +Make your .xsession/.xinitrc executable (VERY IMPORTANT, wmaker.inst did +NOT do this automatically for me) using eg. chmod ugo+x .xsession @@ -308,163 +514,128 @@ exec wmaker Things to try if it doesn't work: (somewhat fuzzy and random) -This should do it although I did have problems sometimes initially which I fixed -by randomly trying absolute pathes for wmaker in .xsession/.xinitrc and/or making -the dtprofile/.xinitrc/etc executable. It helps logging in on the console (select from -CDE login screen) and start X manually using 'X'. +This should do it although I did have problems sometimes initially which I +fixed by randomly trying absolute pathes for wmaker in .xsession/.xinitrc and/or +making the dtprofile/.xinitrc/etc executable. It helps logging in on the console +(select from CDE login screen) and start X manually using 'X'. If it works that way it should work when logging into the CDE environment. Remember to Check your paths! If it doesn't work, you can also substitute some other window manager for -wmaker in the .xinitrc and see if that works. If it does you know at least that .xinitrc -is getting called/executed, so your WM path is wrong or not set. +wmaker in the .xinitrc and see if that works. If it does you know at least that +.xinitrc is getting called/executed, so your WM path is wrong or not set. Method 2: Thomas Hanselman gave this alternative answer (via Peter Ilberg): -Build and install WM wherever you want, as described in Method 1. You can -install and run WM just fine from your home directory. That's what I'm doing, -since I don't have root access at work :(. Then, in your .Xdefaults file in your -home directory, add the following line: +Build and install WM wherever you want, as described in Method 1. You +can install and run WM just fine from your home directory. That's what I'm +doing, since I don't have root access at work :(. Then, in your .Xdefaults file in +your home directory, add the following line: -Dtsession*wmStartupCommand: +Dtsession*wmStartupCommand: Then, log out, and log back in, and, unless I've forgotten a step (or this is a -custom Nortel thing), you should be in WindowMaker heaven ;). +custom Nortel thing), you should be in Window Maker heaven ;). Difference between the methods: (according to Thomas) I've been told that the difference between setting the resource and Peter's -method is that if you override the window manager with the resouce, you still get -the CDE resources read into the resource database (so you still have your color -settings & such from CDE), whereas with Peter's, the CDE resource don't get -read into the database. I don't know if this is true or not, however. Also, another -thing to note with WindowMaker and HP-UX 10.20 -- if you select "Exit Session" -from the WM root menu, WindowMaker and all of your applications are killed, -but you may not be logged out. Again, this might be an artifact from my work -environment, or the way I start WindowMaker. +method is that if you override the window manager with the resouce, you +still get the CDE resources read into the resource database (so you still +have your color settings & such from CDE), whereas with Peter's, the CDE +resource don't get read into the database. I don't know if this is true or not, +however. Also, another thing to note with Window Maker and HP-UX 10.20 +-- if you select "Exit Session" from the WM root menu, Window Maker and +all of your applications are killed, but you may not be logged out. Again, this +might be an artifact from my work environment, or the way I start Window +Maker. Owen Stenseth adds: -When using this method it is possible to exit WindowMaker cleanly by using the -dtaction command. I use the following in my WindowMaker menu: +When using this method it is possible to exit Window Maker cleanly by +using the dtaction command. I use the following in my Window Maker menu: "Exit Session" EXEC dtaction ExitSession The only problem I have at the moment is I seem to get multiple copies of asclock running when I log in again. - -### New -You can also use the normal "Exit Session" command from the WM root menu -and place additional commands required to shutdown CDE in +You can also use the normal "Exit Session" command from the WM root +menu and place additional commands required to shutdown CDE in ~/GNUstep/Library/WindowMaker/exitscript -So, if you add "dtaction ExitSession" in that file, the command to -shutdown CDE will be automatically executed when you exit WindowMaker. -### +So, if you add "dtaction ExitSession" in that file, the command to shutdown +CDE will be automatically executed when you exit WindowMaker. -Do I need to rerun wmaker.inst with every new version of WindowMaker? +2.15 When I run wmaker it quits complaing about something + __register_frame_info. ---------------------------------- -Dan Pascu reveals the answer: - -When the user will need to run wmaker.inst again in a new release of wmaker, -we will write that down in the NEWS file. -(as I've done in 0.15.0). - -The way domain files are read beginning from 0.15.0 makes this redundant. The -user config files are merged with the global ones in -/usr/local/share/WindowMaker/Defaults. -So even if new options are added, they will reflect in the user configuration. - -Only if user wishes to change the default behavior, he needs to add that option -to the config file. - -### New -When I run wmaker it quits complaing about something __register_frame_info. ------------------------------------------------------------ - This seems to be related to pgcc, gcc-2.8.0 or something. Try using gcc -2.7.x to compile wmaker. - - -The libxyz image format library is not detected. ------------------------------------------------- +2.7.x to compile wmaker. -Always look at config.log and see why configure isn't detecting the library. -If that doens't help you much, check the following: - -- if there is only one set of libraries in your system (look in -/usr/openwin/lib, check if you have different versions of the library etc) -- if the header file(s) of that library are installed (make sure you -have installed the devel packages of that library) -- supply the path of that library to configure: - ./configure --with-gfx-libs=/the/path/to/the/lib +2.16 When I run wmaker it complains about something like expected + libjpeg 61 got 62. +---------------------------------- +Upgrade your libjpeg library and/or recompile Window Maker. -### -=-=-=- Usage: -=-=-=- -What is an appicon? +3.1 How do I get new apps on the dock (The icon or line of icons on + the right side of the screen by default) ---------------------------------- -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.) +Launch an application. If there is a little icon that pops up in the bottom +corner of the screen, drag it over to the dock icon(s). You should see a +whiteish square indicating when it is close enough to dock, and where it will +be placed. To make sure this application will be there next time you start up +windowmaker, exit windowmaker with the "exit session" option. -How do I get new apps on the dock (The icon or line of icons on the right -side of the screen by default) ----------------------------------- -Launch an application. If there is a little icon that pops up in the bottom corner of -the screen, drag it over to the dock icon(s). You should see a whiteish square -indicating when it is close enough to dock, and where it will be placed. To make -sure this application will be there next time you start up windowmaker, exit -windowmaker with the "exit session" option. - -What is the difference between the 'Exit' and 'Exit Session' Options? +3.2 What is the difference between the 'Exit' and 'Exit Session' Options? ---------------------------------- Another Answer from Dan Pascu: -"'Exit' exits wmaker, but leaves the other apps running, and if wmaker was not -the last app launched in the .xinitrc the X server is not closed, until the last app -started by .xinitrc is closed. -'Exit session' will exit wmaker, but also will close all running apps, thus the X -server will be closed." +"'Exit' exits wmaker, but leaves the other apps running, and if wmaker was +not the last app launched in the .xinitrc the X server is not closed, until the +last app started by .xinitrc is closed. +'Exit session' will exit wmaker, but also will close all running apps, thus the +X server will be closed." -How do I "dock" Icons on the Clip? +3.3 How do I "dock" AppIcons on the Clip? ---------------------------------- -Just drag icons near it like you would for the dock. If you are having a problem -docking icons, you should try moving the Clip away from the dock. +Just drag icons near it like you would for the dock. If you are having a +problem docking icons, you should try moving the Clip away from the dock. -Why do none of my Key Bindings (ie: Alt+#) work in WindowMaker 0.1x.x +3.4 Why do none of my Key Bindings (ie: Alt+#) work in Window Maker 0.1x.x ---------------------------------- If you are using XFree86, make sure scroll lock and numlock are off or no -bindings will work (XFree bug). You can try using the XFree86 Numlock Hack by -editing the line #undef NUMLOCK_HACK in $WindowMakerdir/src/wconfig.h and -changing it to #define NUMLOCK_HACK. +bindings will work (XFree bug). You can try using the XFree86 Numlock +Hack by editing the line #undef NUMLOCK_HACK in $WindowMakerdir/src/wconfig.h +and changing it to #define NUMLOCK_HACK. +Note that this is not yet fully functional (if at all). -How do I rename workspaces? +3.5 How do I rename workspaces? ---------------------------------- Right click on the "desktop" (root window) to show the menu (don't hold the -button down). Go to the workspaces menu and hold the Control key down and -click on the workspace you would like to rename and type the name. -### New -If you use the clip, use the "Rename Workspace" command in the clip menu. -### +button down). Go to the workspaces menu and hold the Control key down +and click on the workspace you would like to rename and type the name. + +If you use the clip, use the "Rename Workspace" command in the clip +menu. -How can I resize a window if the window is larger than my currect -desktop? + +3.6 How can I resize a window if the window is larger than my + currect desktop? ---------------------------------- David Reviejo best summed up this answer: @@ -476,43 +647,64 @@ David Reviejo best summed up this answer: Alt+Right click and drag to resize (by moving the nearest window corner) - Another move/resize tip: while you are moving or resizing a window, you + Another move/resize tip: while you are moving or resizing a window, + you can change the move/resize mode by pressing the SHIFT key." -When I run xyz (xyz usually = rxvt) from the dock and later quit, the -3 dots don't come back and I can't run it again. + + +3.7 How do I "undock" AppIcons? ---------------------------------- +If the program is not running, just drag the icon to the middle of your +desktop (away from the dock and clip) and watch it disappear. -You docked xyz using dockit. Dockit does not generate correct application -icons most of the time. The only way to get around it is to edit -~/GNUstep/Defaults/WMState and set ForcedDock = YES; in the entry for xyz. -If you use rxvt, upgrade to rxvt 2.4.6 or newer. -### New -There is another better way to dock applications that do not have an appicon, -wich is by using the "Emulate Application Icon" option in the -"Advanced Options" section of the attributes panel. If you turn this option -ON and restart that application, you should get a dockable application icon. -### +If the program is running, hold down Meta (usually CTRL) and drag the icon +off the dock. You can also right click on it and choose 'Kill', then undock as +usual. + + +3.8 I docked an application but when I run it the button is permanently + shaded and I can't run new instances. +---------------------------------- +You probably docked the application with dockit. To fix it +remove the icon and use the "Emulate Application Icon" checkbox in +the Advanced Options section of the Attributes panel for the window. +Then restart the application to get the application icon you +must use to dock the application. +It can also mean that you did something you shouldn't, which is +changing the program that is ran from the docked icon. For example, +if you docked rxvt you must NOT change it to xterm, for example. +You also can't do any changes that might alter the contents of +the WM_CLASS hint for the window, like the -name parameter for +xterm, rxvt and other programs. + + +3.9 When I run wmaker it complains about not being able to load any fonts. +---------------------------------- +Check if the locale settings are correct. If you're not sure what to +do, unset the LANG environment variable before running wmaker. + +TODO: give complete explanation -=-=-=-=-=-=-=- Configuration: -=-=-=-=-=-=-=- -What are those files inside my ~/GNUstep directory? +4.1 What are those files inside my ~/GNUstep directory? ---------------------------------- ~/GNUstep/WindowMaker/WindowMaker - The main config file. This file controls options such as keybindings, fonts, - pixmaps, and focus modes. + The main config file. This file controls options such as keybindings, + fonts, pixmaps, and focus modes. ~/GNUstep/WindowMaker/WMWindowAttributes - The Controls "attributes" for individual applications and appicons. Options - such as what icon to use are set here. For the most part, this is now best - accessed via a right click on a title bar of an application and selecting - "Attributes" + The Controls "attributes" for individual applications and appicons. + Options such as what icon to use are set here. For the most part, this + is now best accessed via a right click on a title bar of an application + and selecting "Attributes" ~/GNUstep/Defaults/WMState @@ -531,34 +723,44 @@ What are those files inside my ~/GNUstep directory? This is the file to edit to change your root menu. -How do I enable the normal X sloppy focus mode? + + +4.2 How do I enable the normal X sloppy focus mode? ---------------------------------- In the ~/GNUstep/Defaults/WindowMaker, change the following: FocusMode = sloppy; -How do I get my auto-arrange icons to work? +4.3 How do I get my auto-arrange icons to work? ---------------------------------- In ~/GNUstep/Defaults/WindowMaker set AutoArrangeIcons=Yes; and the icons should now auto-arrange. -How do I get my Meta-Tab to cycle through windows correctly? +4.4 How do I get my Meta-Tab to cycle through windows correctly? ---------------------------------- Make sure that these settings are true in your ~/GNUstep/Defaults/WindowMaker file: CirculateRaise = Yes; -RaiseDelay = 1; +RaiseDelay = 1; + +This will not give you MS Windows(tm) style application switching where +alt-tab is changes context. +Paul Warren <> has released a patch that will +give this style of Context Switching to Window Maker. -How can I define my own Icon for a program? (instead of the Icon the -Application Supplies?) +It is availible from http://www.warrenx.demon.co.uk/patches + + +4.5 How can I define my own Icon for a program? (instead of the + Icon the Application Supplies?) ---------------------------------- You can right click on the titlebar of the running app and choose the -"Attributes..." option, then click on the "Ignore client supplied icon" checkbox. -Click "Apply", "Save" and close the Attributes Editor. +"Attributes..." option, then click on the "Ignore client supplied icon" +checkbox. Click "Apply", "Save" and close the Attributes Editor. Another method is to edit ~/GNUstep/Defaults/WMWindowAttributes by hand and use the AlwaysUserIcon=YES; option for the app. For example: @@ -568,10 +770,10 @@ AlwaysUserIcon=Yes; }; -How do I get a pixmap background for my appicons (those things in the -dock)? +4.6 How do I get a Tile background for my AppIcons (those things in + the dock)? ---------------------------------- -You need to change 1 line to your ~/GNUstep/Defaults/WindowMakerfile. +You need to change 1 line to your ~/GNUstep/Defaults/WindowMaker file. IconBack = (spixmap, tile.black.xpm, white); or @@ -580,29 +782,32 @@ IconBack = (tpixmap, tile.black.xpm, white); spixmap will scale the pixmap to fit the tile, tpixmap will tile it as is. As Random@efnet says, The last parameter is the color that fills in any -transparent parts of your icon. +Transparent parts of your icon. -How do you dock that doesn't have an appicon in -the new version of WindowMaker? +4.7 How do you dock that doesn't have an + appicon in the new version of Window Maker? ---------------------------------- -### Updated -Open the window commands menu for the main window of the application -(the first window that is opened by the app and also causes the whole -application to exit, when it is closed), choose "Attributes..." and -go to the "Advanced Options" section. Then, check ON the -"Emulate Application Icon" check box. -### +There is now an option available to emulate appicons so that Window +Maker can dock just about anything now. + +To dock a misbehaving application, right click on the title bar and select the +attributes menu. Next, select the pull down menu's "Advanced Options" +item. Under the ``Advanced Options'' menu, select the ``Emulate +Application Icon'' Option then Save, Apply and close the dialog. -How do I get x11amp to not have a title bar? (or any other program for -that matter?) +This should allow you do dock the program normally. + + +4.8 How do I get x11amp to not have a title bar? (or any other + program for that matter?) ---------------------------------- -Right Click on the title bar and choose "Attributes". Click on Panel 2 and click -the the "Disable titlebar" and "Disable resizebar" options. Click "Save", "Apply" -and then close the Attributes panel. +Right Click on the title bar and choose "Attributes". Click on Panel 2 and +click the the "Disable titlebar" and "Disable resizebar" options. Click +"Save", "Apply" and then close the Attributes panel. -By Default, to get back to the attributes menu once you've removed the titlebar, -hit the key F10 while the window is focused. +By Default, to get back to the attributes menu once you've removed the +titlebar, hit the key F10 while the window is focused. Here is an example entry in ~/GNUstep/WMWindowAttributes for x11amp. @@ -614,43 +819,57 @@ NoAppIcon=Yes; }; -How do I set a pixmap background? +4.9 How do I set a pixmap background? ---------------------------------- Here is the in depth explanation straight from the NEWS file: wmsetbg now accepts the following options: usage: wmsetbg [-options] image options: --d dither image --m match colors --t tile image --s scale image (default) --u update WindowMaker domain database --D update database --c colors per channel to use +-d + dither image +-m + match colors +-t + tile image +-s + scale image (default) +-u + update Window Maker domain database +-D + update database +-c + colors per channel to use + + By default, it will try to guess if dithering is needed or not and proceed accordingly. Using -d or -m will force it to dither or match colors. -Dithering for more than 15bpp is generally not needed, and will only result in a -slower processing. +Dithering for more than 15bpp is generally not needed, and will only result +in a slower processing. Don't use dithering except when needed, because it is slower. Else rely on wmsetbg which will detect if dithering is needed and use it. --u will update the WorkspaceBack in the default database domain - file in ~/GNUstep/Defaults/WindowMaker, and let WindowMaker - refresh the screen. Please note that this option only works under - WindowMaker, and will have no effect under other window - managers, since it rely on WindowMaker to update the image - after it reads the updated defaults database. +-u + will update the WorkspaceBack in the default database + domain file in ~/GNUstep/Defaults/WindowMaker, and let Window + Maker refresh the screen. Please note that this option only + works under Window Maker, and will have no effect under + other window managers, since it rely on Window Maker to + update the image after it reads the updated defaults + database. + +-D + is same as above, but will update the domain + instead of the default Window Maker domain. --D is same as above, but will update the domain - instead of the default WindowMaker domain. +-c + will set the color per channel to use. Only needed for + PseudoColor visuals. Window Maker will automatically pass + the value read from the Window Maker domain database. --c will set the color per channel to use. Only needed for - PseudoColor visuals. WindowMaker will automatically pass the - value read from the WindowMaker domain database. The following line is straight from your WindowMaker-0.15.x @@ -664,68 +883,115 @@ directories. See the help info at the top of the ~/GNUstep/Library/WindowMaker/menu file for more information. If you for some reason would like to set your background image with XV, for -instance to use an image format not yet supported by wmsetbg or to use one of -XV's special modes, edit the file ~/GNUstep/Library/WindowMaker/autostart and -insert the line +instance to use an image format not yet supported by wmsetbg or to use one +of XV's special modes, edit the file ~/GNUstep/Library/WindowMaker/autostart +and insert the line xv -root -quit -maxpect ~/background.jpg or xv -root -quit -max ~/background.jpg -you can also try variations of this to get different tiling and other effects (where X -is a number 1-9 I believe): +you can also try variations of this to get different tiling and other effects +(where X is a number 1-9 I believe): 'xv -root -quit -rmodeX ~/background.jpg' -If you would like xv functionality in your menu, heres a nice little tip from Alfredo: +If you would like xv functionality in your menu, heres a nice little tip from +Alfredo: -Add the following line to your ~/GNUstep/Library/WindowMaker/menu file. (all on one -line) +Add the following line to your ~/GNUstep/Library/WindowMaker/menu file. (all on +one line) "More Backgrounds" OPEN_MENU /home/whoever/backgrounds xv -root -maxpect -quit -Can I put pixmaps in my root menu and title bars? +4.10 Can I put pixmaps in my root menu and title bars? ---------------------------------- -With the release of WindowMaker-0.14.1, you can now put pixmaps anywhere -you would have either a gradient or a color. This means now that +With the release of WindowMaker-0.14.1, you can now put pixmaps +anywhere you would have either a gradient or a color. This means now that MenuTextBack=(tpixmap, foo.xpm, acolor); -in ~/GNUstep/Defaults/WindowMaker will put the correct pixmap tiled in your menu. +in ~/GNUstep/Defaults/WindowMaker will put the correct pixmap tiled in your +menu. FTitleBack = (spixmap, foo.xpm, black); Would have the effect of streching a pixmap to fit the titlebar of the active window. -You can use png, tiff, jpeg and xpm images interchangeably in WindowMaker if -you have compiled in support for those formats. +You can use png, gif, ppm, tiff, jpeg and xpm images interchangeably in +Window Maker if you have compiled in support for those formats. -How do I get my Minimize Icon to look like the triangle I see in -screenshots? +4.11 How do I get my Minimize Icon to look like the triangle I see in + screenshots? ---------------------------------- -This involves a minor source tweak. Instructions are available at -http://wm.gnu.net/tips.html#titlebar_icons. -Example screenshot can be seen at -http://wm.gnu.net/images/screenshots/Midnight3.jpg. +This involves a minor source tweak. Instructions are available at +http://wm.current.nu/tips.html#titlebar_icons + +Example screenshot at +http://wm.current.nu/themes/images/screenshots/Midnight3.jpg -How do I get superfluous bells and whistles working? +4.12 How do I get superfluous bells and whistles working? ---------------------------------- Add Superfluous=YES; to your ~/GNUstep/Defaults/Windowmaker file. -This option was added as a runtime option in WindowMaker >= 0.16.1. +This option was added as a runtime option in Window Maker >= 0.16.1. -How do I get the classic NeXT(tm)-like style back? +4.13 How do I get the classic NeXT(tm)-like style back? ---------------------------------- Add NewStyle=NO; to your ~/GNUstep/Defaults/Windowmaker file. -This option was added as a runtime option in WindowMaker >= 0.16.1 +This option was added as a runtime option in Window Maker >= 0.16.1 + + +4.14 How do I get the window menu with only a two button mouse? +---------------------------------- +Jim Noble writes: + +If you've got a two-button mouse under some versions of Solaris x86, +there's no way (that i'm aware of) to emulate a 3-button mouse. The right +button can be either MB2 or MB3, but chording doesn't work. + + ApplicationMenuMouseButton = Left; + +and + + WindowListMouseButton = Right; + + +in ~/GNUstep/Defaults/WindowMaker ought to allow the left button to +activate the root menu, and the right button (as MB2) to activate the +windows menu. + + +4.15 How do I edit my root menu? +---------------------------------- +You can now use WPrefs.app +(see http://wm.current.nu/features/configuration.html for more info) +if you have the new PropList style menu, or you can manually edit the +oldstyle menu file + + ~/GNUstep/Library/WindowMaker/menu + +(or you can also manually edit the newstyle menu file) + ~/GNUstep/Defaults/WMRootMenu -How can I set dock/clip to use single click to launch applications, instead -of double click? +and save your changes. Window Maker should detect the change and +automatically update. If you are having a problem getting it to reload the +menu, try + + touch ~/GNUstep/Library/WindowMaker/menu + + (or 'touch ~/GNUstep/Defaults/WMRootMenu' for the newstyle menu) + +to force the modification time into the future. + + +4.16 How can I set dock/clip to use single click to launch + applications, instead of double click? ---------------------------------- You cannot do this. This is because single click is used to select app-icons, or to raise/lower the app-icon or the dock/clip. @@ -737,19 +1003,18 @@ click is used for a reason, is not just some weird idea we got in a morning when we wake up too early. - -=-=-=-=-=-=-=-=-=- Other Applications: -=-=-=-=-=-=-=-=-=- -How do I assign gimp an appicon? +5.1 How do I assign gimp an appicon? ---------------------------------- -WindowMaker now can assign Icons from within the windowmanager, to do so, -right click on the title bar of an app or hit F10 while the desired app is focused, -choose "Attributes...", click on the "4" Button, enter the icon file name (make -sure this is in your pixmap path, or you can type in the full path without using ~/ -type path names), click "Update", "Apply", "Save" and then close the Attributes -Editor. +Window Maker now can assign Icons from within the windowmanager, to +do so, right click on the title bar of an app or hit F10 while the desired app +is focused, choose "Attributes...", click on the "4" Button, enter the icon file +name (make sure this is in your pixmap path, or you can type in the full path +without using ~/ type path names), click "Update", "Apply", "Save" and then +close the Attributes Editor. You can also enter the following line in ~/GNUstep/Library/WindowMaker/WMWindowAttributes: @@ -757,7 +1022,7 @@ You can also enter the following line in gimp={Icon="gimp.xpm";}; -How do I get an appicon for XEmacs 20.3+? +5.2 How do I get an appicon for XEmacs 20.3+? ---------------------------------- Thanks to Michael Hafner for this answer. @@ -769,72 +1034,82 @@ in your XEmacs 20.3+ sourcedir and rebuild it. Then XEmacs shows an appicon when running and you can easily dock it. -Where do you get that clock program I always see on people's desktops? +5.3 Where do you get that clock program I always see on people's + desktops? ---------------------------------- -Its called asclock. It has been included with every version I've downloaded. -Currently it resides in ./WindowMaker-0.xx.x/misc/asclock.tgz and is prepatched to -be able to dock. Some other (older) versions you might find on the net don't -dock. +Its called asclock. It was included with each version of Window +Maker until version 0.17.5, and was no longer included in +0.18.0 and above. +You could find it in ./WindowMaker-0.xx.x/misc/asclock.tgz and it was +prepatched to be able to dock. Some other (older) versions you might find +on the net don't dock. +Since it was pulled from the distribution (probably to save space), I've +included it at http://wm.current.nu/files.html#asclock for your convenience. -How do you dock asclock? + +5.4 How do you dock asclock? ---------------------------------- asclock -shape -iconic -12 & -Drag it from the top right corner of the clock to the dock. Right click on the icon -and select autolaunch. -You have to drag the appicon by clicking on the edge of the icon, because the -actual pixmap belongs to the app itself, and any clicks on the pixmap are -interpreted by the app rather than X or the window manager. Therefor, you need -to click somewhere on the appicon where the background tile shows through -(usually the edges), and drag it that way. +Drag it from the top right corner of the clock to the dock. Right click on the +icon and select autolaunch. +You have to drag the appicon by clicking on the edge of the icon, because +the actual pixmap belongs to the app itself, and any clicks on the pixmap +are interpreted by the app rather than X or the window manager. Therefor, +you need to click somewhere on the appicon where the background tile +shows through (usually the edges), and drag it that way. -How do you dock wmload? +5.5 How do you dock wmload? ---------------------------------- wmload -withdrawn -shape & Then dock it similar to asclock. -What other apps exist for the dock? +5.6 What other apps exist for the dock? ---------------------------------- Several Nice applications are available: wmmixer and wmcd and wmmount - http://www.geocities.com/SiliconValley/Vista/2471/linux.htm#xapps + 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.org/pub/wmaker/contrib/srcs/apps/ wmavgload, wmmount, and wmload - ftp://ftp.windowmaker.org/pub/wmaker/contrib/srcs/utils/ + ftp://ftp.windowmaker.org/pub/wmaker/contrib/srcs/utils/ + + wmppp-wmifs, wmtime, wmmon and other nifty apps + http://windowmaker.mezaway.org/ + - wmppp-wmifs, wmtime, wmmon and other nifty apps - http://windowmaker.mezaway.org/ -How do I get an appicon for rxvt so I can dock it? +5.7 How do I get an appicon for rxvt so I can dock it? ---------------------------------- -The default rxvt that comes with most distribtions is an outdated version of rxvt. -The newest development version of rxvt is availible from +The default rxvt that comes with most distribtions is an outdated version of +rxvt. The newest development version of rxvt is availible from ftp://ftp.math.fu-berlin.de/pub/rxvt/devel/. As of the time of this writing, the -version is 2.4.6 and it natively produces an appicon without a patch. +version is 2.4.7 and it natively produces an appicon without a patch. John Eikenberry has also created an rpm which is available from ftp://ftp.coe.uga.edu/users/jae/windowmaker/ -As of version 2.4.6, rxvt includes WindowMaker support as well as -John Eikenberry's NeXT scrollbar hack. +For your convenience, I have rxvt-2.4.7.tar.gz at +http://wm.current.nu/files/rxvt-2.4.7.tar.gz for download. As of +version 2.4.7, rxvt includes Window Maker support as well as John +Eikenberry's NeXT scrollbar hack. -How do I get different icons for rxvt's (or xterms) running different -programs? +5.8 How do I get different icons for rxvt's (or xterms) running + different programs? ---------------------------------- The simplest way is to run each rxvt with a different -name parameter. -For example, I want to run an rxvt for irc and one for mail. This is an example of -what I'd do: +For example, I want to run an rxvt for irc and one for mail. This is an +example of what I'd do: for the irc rxvt: rxvt -name "irc" -e "irc" @@ -842,12 +1117,32 @@ rxvt -name "irc" -e "irc" for the mail rxvt: rxvt -name "mail" -e "pine" -This would result in each rxvt now having the instance and class of irc.Xterm and -mail.Xterm respectively, so that WindowMaker can now set Attributes for them -individually. +This would result in each rxvt now having the instance and class of irc.Xterm +and mail.Xterm respectively, so that Window Maker can now set Attributes +for them individually. -How do I allow Alt+# to work in an rxvt session? (with irc for example) +5.9 How do I launch multiple instances of XTerm from one appicon? +---------------------------------- +The easiest way to accomplish this is to dock XTerm as normal. Then Go +to the 'Attributes menu' -> 'Application Specific' and select 'no application +icon' for XTerm. + +You can also right-click on the docked appicon and select settings. Change +the 'Application Path with arguments' section to + + foo.sh + +where foo.sh is the following script + + #!/bin/sh + exec xterm + +This should allow unlimited XTerms without appicon clutter. + + +5.10 How do I allow Alt+# to work in an rxvt session? (with irc for + example) ---------------------------------- First, Launch a unique instance of rxvt or xterm. This can be done using the -name option of rxvt. @@ -855,53 +1150,66 @@ For example: rxvt -name foo -e irc -Then, go to the Attributes menu (right click on titlebar (or hit Control+Esc -and choose 'Attributes...') +Then, go to the Attributes menu (right click on titlebar (or hit F10) and +choose 'Attributes...') Then choose 'Advanced Options' from the listbox and enable 'Don't Bind Keyboard shortcuts'. -Click 'Save' and 'Apply' and you should be able to run your session without the -shortcuts. +Click 'Save' and 'Apply' and you should be able to run your session without +the shortcuts. -When I use Netscape with Window Maker it crashes ------------------------------------------------- +5.11 Window Maker breaks scilab +---------------------------------- + +If you refer to the problem of the "graphics" window of scilab not showing +up in Window Maker, this is caused by a bug in scilab. You can see the +cause of the problem by yourself, by running xprop on the graphic window: +WM_NORMAL_HINTS(WM_SIZE_HINTS): + user specified location: 136679205, 1074468360 + user specified size: 400 by 300 + program specified minimum size: 400 by 300 -(the problem where you get a message with something like _MOTIF_DRAG_WINDOW -was deleted or something) +Now, when scilab opens it's window, Window Maker nicely does exactly what it +is told, that is, map the window at position 136679205, 1074468360 which +obviously falls outside the screen no matter how big is your monitor ;) The +bug has been reported by different users many times for more than a year now, +but apparently it never got fixed. If you keep mailing it's developers, +maybe it will get fixed some day :) -You are probably are running a glibc system and using libc5 version of -Netscape. To solve this, upgrade Netscape to a glibc version. +Meanwhile, the workaround for this is to open the window list menu +(click on the root window with the middle mouse button) and click +on the ScilabGraphic entry. The window should be brought to your +reach. Then, open the window commands menu (right click on window's +titlebar) and open the Attributes panel. Go to the "Advanced Options" +section, check the "Keep inside screen" option and save. -BTW: blaming wmaker for something like this is nonsensical. It makes as -much sense as blaming the pizza you ate yesterday for a disentery -your dog is having. -=-=-=-=-=-=- Programming: -=-=-=-=-=-=- -How do I get a normal X application to produce an appicon? +6.1 How do I get a normal X application to produce an appicon? ---------------------------------- Another insightful answer from who else but Dan Pascu. -"You must define the WM_CLASS (XSetClassHint()) and the CLIENT_LEADER -or XWMHints.window_group properties, which are automatically set by most -applications that use Xt (Motif, Athena ...), but if you use plain Xlib you must set -them by hand. +"You must define the WM_CLASS (XSetClassHint()) and the +CLIENT_LEADER or XWMHints.window_group properties, which are +automatically set by most applications that use Xt (Motif, Athena ...), but if +you use plain Xlib you must set them by hand. Also you must make a call to XSetCommand(dpy, leader, argv, argc); -Take a look at WindowMaker-0.1x.x/test/test.c that is an example for writing -such an app (which also have an app menu)." +Take a look at Window Maker-0.1x.x/test/test.c that is an example for +writing such an app (which also have an app menu)." -How do I get my tcl/tk application to produce an appicon? +6.2 How do I get my tcl/tk application to produce an appicon? ---------------------------------- -Oliver Graf writes: +Oliver Graf writes: -The main window (normally this is called '.' [dot] in tk) should use the following -lines: +The main window (normally this is called '.' [dot] in tk) should use the +following lines: wm command . [concat $argv0 $argv] wm group . . @@ -913,8 +1221,32 @@ wm group .child . where .child should be replaced by the actual window path. -Replace '.' with the actual main-window path and 'wm group .child .' should be -added for each 'toplevel .child' call. +Replace '.' with the actual main-window path and 'wm group .child .' should +be added for each 'toplevel .child' call. + + +6.3 What is WINGs? +---------------------------------- +WINGs Is Not GNUstep. ;) + +It is the Widget Library written for the widgets in Window Maker. + +It is currently under heavy development but several people have started +writing applications in it. Its goal is to emulate the NeXT(tm)-style widgets. + +http://www.ozemail.com.au/~crn/wm/wings.html is the closest thing to an +information center about WINGs by . + + +6.4 Where can I get more information about WINGs? +---------------------------------- +Nic Berstein has created a WINGs Developement list. + +The purpose of this list is to provide a forum for support, ideas, +suggestions, bug reports etc. for the WINGs widget set library. + +To subscribe to this list, send a message with the word ``subscribe'' in the +_BODY_ of the message to: . @@ -922,42 +1254,94 @@ added for each 'toplevel .child' call. Miscellaneous Questions: -=-=-=-=-=-=-=-=-=-=-=-=- -Is there a pager for WindowMaker? +7.1 Is there a pager for Window Maker? ---------------------------------- Not at the moment because there is not a pressing need for a pager. The concept of multiple desktops does exist and there are currently 3 ways to switch between them. First, the Alt+Number combination will switch between desktops. The -Workspaces menu will also let you switch workspaces. Lastly, the Clip will also -scroll one through workspaces. +Workspaces menu will also let you switch workspaces. Lastly, the Clip will +also scroll one through workspaces. + +For those that would like to send an application to a specific workspace, +either drag it to an edge of the desktop onto the next workspace or you can +right click on the titlebar, choose "Move to..." and choose the appropriate +workspace. -For those that would like to send an application to a specific workspace, either -drag it to an edge of the desktop onto the next workspace or you can right click -on the titlebar, choose "Move to..." and choose the appropriate workspace. +BUT, Window Maker does support KDE and GNOME protocols, including the +workspace management stuff, so you can use Window Maker in these +environments and use their pagers. -Can I have folders like in AfterStep? + +7.2 Can I have folders like in AfterStep? ---------------------------------- -No. WindowMaker does however support the collapsable Clip per desktop for a -similar functionality. +No. Window Maker does however support the collapsable Clip per desktop +for a similar functionality. -What exactly are themes? +7.3 How do I use getstyle and setstyle? ---------------------------------- -Themes are a great aspect of WindowMaker allowing a user to simply save the -entire 'look' of their desktop in a Archive to distribute freely among friends, fellow -users and/or the whole net in general. :) +To capture the current Window Maker style, use the command + + getstyle > current.style + -See the topic "How do I make a Theme?" below for an in-depth walk-through on -making a Theme archive. +To replace the current style, use the command + setstyle filename.style -How do I install a Theme? + +7.4 Why don't you distribute {normal diff, xdelta} patches? +---------------------------------- +Whenever possible plain diff patches are distributed. If the new version has +new binary files, normal diff won't be able to handle them, so a patch +package is distributed, instead. We don't use xdelta because: - most +systems do not have xdelta installed; - xdelta is picky and require the file to +be patched to be exactly the same as the one used to make the patch. The +patch package scheme used is much more flexible. + +We do not distribute a simple diff with the binary files separately (and +variations, like uuencoding the binary files) because: - it is more +complicated and error prone to require the user to manually move the files +to the correct places; - the current patch package scheme *does* distribute +the binary files and diff files separately. If the user wants to install everything +by hand, nobody will object to that; - sooner or later someone will certainly +ask for a script to automate the file moving stuff. + +So we hacked a script (mkpatch) that automatically creates a patch +package with the normal text diff file, a list of removed files and the binary +files that have changed or been added, plus a script that does the patching +automatically. If you don't like the script, you can apply the patch and move +the files manually. Or download the whole distribution. + + +7.5 Will you add GNOME support? +---------------------------------- + +Yes. But don't ask me when. + + +-=-=-=-=- +Themes: +-=-=-=-=- + +8.1 What exactly are themes? +---------------------------------- +Themes are a great aspect of Window Maker allowing a user to simply +save the entire 'look' of their desktop in a Archive to distribute freely among +friends, fellow users and/or the whole net in general. :) + +See the theme-HOWTO at http://wm.current.nu/themes/theme-HOWTO.html +for an in-depth walk-through on making a Theme archive. + + +8.2 How do I install a Theme? ---------------------------------- -This should be as simple as untarring the Theme.tar.gz into one of two places. -You can untar it to the global /usr/local/share/WindowMaker/* directory, and have it -be accessable to all users, or you can untar it to your own +This should be as simple as untarring the Theme.tar.gz into one of two +places. You can untar it to the global /usr/local/share/WindowMaker/* directory, +and have it be accessable to all users, or you can untar it to your own ~/GNUstep/Library/WindowMaker/ directory for your own personal use. Use your favorite variation of the following: @@ -967,8 +1351,12 @@ gzip -dc "Theme.tar.gz" | tar xvf - *(directory may differ on some systems) -How do I make a Theme? +8.3 How do I make a Theme? ---------------------------------- +Please see the theme-HOWTO at http://wm.current.nu/themes/theme-HOWTO.html +for details, here is a short summary. Also, read the README.themes file +included with the Window Maker distribution in the WindowMaker/ directory. + In this walk-through when I use WindowMaker/, it can refer to the global /usr/local/share/WindowMaker/ directory or the users own ~/GNUstep/Library/WindowMaker/ directory. @@ -983,11 +1371,11 @@ To make a Theme.tar.gz, these are the steps I take: tar cvf ThemeName.tar ThemeName.txt Themes/ThemeName Backgrounds/ThemeNameBG.jpg Backgrounds/ThemeNameTile.xpm - You can add as many more images as you need from the appropriate - directories under WindowMaker/ following that general idea. You can even - optionally add an IconSets/ThemeName.iconset and it's associated icons to - your theme in the same manner. This should be stated in your README - if you decide to include these. + You can add as many more images as you need from the + appropriate directories under WindowMaker/ following that general + idea. You can even optionally add an IconSets/ThemeName.iconset and + it's associated icons to your theme in the same manner. This should + be stated in your README if you decide to include these. 3.Then gzip your .tar file to make your ThemeName.tar.gz file with this command: @@ -997,36 +1385,7 @@ To make a Theme.tar.gz, these are the steps I take: 4.Now give it to your friends! -### New - -Why don't you distribute {normal diff,xdelta} patches? ------------------------------------------------------------- - -Whenever possible plain diff patches are distributed. If the new -version has new binary files, normal diff won't be able to handle -them, so a patch package is distributed, instead. We don't use -xdelta because: -- most systems do not have xdelta installed; -- xdelta is picky and require the file to be patched to be -exactly the same as the one used to make the patch. The patch package -scheme used is much more flexible. - -We do not distribute a simple diff with the binary files separately -(and variations, like uuencoding the binary files) because: -- it is more complicated and error prone to require the user to manually -move the files to the correct places; -- the current patch package scheme *does* distribute the binary files -and diff files separately. If the user wants to install everything by -hand, nobody will object to that; -- sooner or later someone will certainly ask for a script to automate the -file moving stuff. - -So we hacked a script (mkpatch) that automatically creates a patch package -with the normal text diff file, a list of removed files and the binary files -that have changed or been added, plus a script that does the patching -automatically. If you don't like the script, you can apply the patch and -move the files manually. Or download the whole distribution. - -### - - +==================================================================== +and they lived happily ever after. +==================================================================== +(The End.) diff --git a/INSTALL b/INSTALL index 12ccc859..a6ae19bd 100644 --- a/INSTALL +++ b/INSTALL @@ -7,12 +7,13 @@ SUPPORTED PLATFORMS =================== (ie: I've heard someone has compiled it on...) -- Intel/Linux RedHat 4.2 (primary platform) +- Intel/Linux Slackware 3.5 (primary platform) - Intel/Linux other distributions - Sparc/Linux RedHat 5.1 - PowerPC/MkLinux - Alpha/Linux RedHat 5.1 - FreeBSD +- NetBSD - Solaris 2.5.1, 2.5.2 - Solaris 2.6.0 - Solaris 2.7beta @@ -21,14 +22,18 @@ SUPPORTED PLATFORMS - OSF/1 - HP-UX - AIX 4.1.4 / IBM PowerPC +- AIX 4.3.2 / IBM PowerPC - AIX 5.3 - DEC Alpha/Digital UNIX 4.x - XFree86 / OS/2 - Corel NetWinder - SunOS 4.x -- MacOS / MachTen 4.1.1 +- PowerMac / Power MachTen 4.1.1 over MacOS -Patches to make it work on other platforms are welcome. +Patches to make it work on other platforms are welcome. + +If the latest version doesn't work for you, try 0.19.3, +which is known to be pretty stable on many platforms. REQUIREMENTS: @@ -72,8 +77,7 @@ OPTIONAL: These libraries are not required to make Window Maker work, but they are supported in case you want to use them. Version numbers are those that I have (and therefore, guraranteed to work), but other versions -might work too. Tell me if you made wmaker work with some library -with a version older than the stated here. +might work too. - libXPM 4.7 or newer @@ -118,6 +122,37 @@ support compiled in. To get a list of other options, run ./configure --help +--enable-kanji support to display Kanji characters, Korean, Chinese + and other languagues that require special characters. + +--enable-single-icon enables the collapsing of all appicons of the + WM_CLASS+WM_INSTANCE into a single one. This feature is not + supported at all by the developers. If you have some trouble with it, + contact it's author: Christopher Seawood + +--disable-shm disable use of the MIT shared memory extension. This will + slow down texture generation a little bit, but in some cases + it seems to be necessary due to a bug that manifests as messed + icons and textures. + +--disable-motif disable support for mwm hints + +--enable-gnome enable support for stuff needed by GNOME + (GNOME compliant bla bla bla) + +--enable-kde enable support for kde/kwm hints + +--enable-lite remove things that are already supported in desktop + environments, like KDE and GNOME. Disabled things + are: window list, root applications menu, + multiple window selection. Note that you will not + be able to exit Window Maker from itself anymore; + you will have to use kill with the SIGTERM signal + or exit it from KDE. + +--enable-modelock XKB language status lock support. If you don't know + what it is you probably don't need it. + --enable-sound enable support of sound effects module --disable-xpm disables use of the XPM library even if it is available on @@ -135,20 +170,7 @@ To get a list of other options, run ./configure --help --enable-debug adds extra debugging information. Do not use it unless you're debugging Window Maker. - ---enable-kanji support to display Kanji characters, Korean, Chinese - and other languagues that require special characters. ---enable-single-icon enables the collapsing of all appicons of the - WM_CLASS+WM_INSTANCE into a single one. This feature is not - supported at all by the developers. If you have some trouble with it, - contact it's author: Christopher Seawood - ---disable-shm disable use of the MIT shared memory extension. This will - slow down texture generation. - ---enable-modelock XKB language status lock support. If you don't know - what it is you probably don't need it. PLATFORM SPECIFIC NOTES: @@ -164,6 +186,11 @@ PLATFORM SPECIFIC NOTES: You also might need to use the --with-gfx-libs and --with-gfx-incs to supply the directory where libtiff is located. + If you have a Ultra Creator 3D or some other machine with high-end + graphics, be sure to start the X server with the default visual + set to 24bpp or you might experience problems with mangled colors. + This is a bug and will be fixed. + - RedHat Linux Make sure you don't have the LANG and LINGUAS environment variables set to en_RN. Also, make sure you have /usr/local/bin in your @@ -424,9 +451,9 @@ menu 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. Note that at the moment you can only -supply a single font in WMGLOBAL. The %d in the font names must not be -removed. +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: diff --git a/Install b/Install index 92b57343..586b2db9 100755 --- a/Install +++ b/Install @@ -57,6 +57,30 @@ echo echo "Option Selection" echo "================" +######################## KDE +echo +echo "Do you want KDE support?" +echo -n [n] " +read kde +if [ "$kde" = y -o "$kde" = Y ]; then + OPTIONS="$OPTIONS --enable-kde" + echo "Do you want to disable features that become duplicated with" + echo "KDE support (like root menus)?" + echo -n [n] " + read lite + if [ "$lite" = y -o "lite" = Y ]; then + OPTIONS="$OPTIONS --enable-lite" + fi +fi + +######################## GNOME +echo +echo "Do you want GNOME support?" +echo -n [n] " +read gnome +if [ "$gnome" = y -o "$gnome" = Y ]; then + OPTIONS="$OPTIONS --enable-gnome" +fi ######################## NLS echo diff --git a/MIRRORS b/MIRRORS index 9dd368e0..5af794ca 100644 --- a/MIRRORS +++ b/MIRRORS @@ -35,7 +35,12 @@ Contact: Joshua Go ftp://ftp.cybertrails.com/pub/windowmaker/ Contact: Adam Jacob + +Provider: Ameth Technologies +http://www.ameth.org/windowmaker/ +ftp://ftp.ameth.org/pub/mirrors/ftp.windowmaker.org/ +Contact: Chase Phillips Third Party WindowMaker Distribution Packages diff --git a/Makefile.in b/Makefile.in index 53071f33..2083e9c7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -100,7 +103,7 @@ CONFIG_HEADER = ./src/config.h CONFIG_CLEAN_FILES = DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS TODO aclocal.m4 config.guess config.sub configure \ -configure.in install-sh missing mkinstalldirs +configure.in install-sh ltconfig ltmain.sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) @@ -292,6 +295,7 @@ clean: clean-recursive clean-am distclean: distclean-recursive distclean-am -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-recursive maintainer-clean-am @echo "This command is intended for maintainers to use;" diff --git a/NEWS b/NEWS index 9f571fef..2498e856 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,155 @@ NEWS for veteran Window Maker users ----------------------------------- +--- 0.50.0 + + +KDE and GNOME +------------- + +Added full support for GNOME and KWM hints. +Read the INSTALL file to see how enable them. + +Everything in the so called GNOME window manager bla bla bla pseudo-spec is +implemented. + +As for KDE stuff, it implements 90% of everything kwm does, adds some +Window Maker specific extensions to it and still uses half of the memory +kwm does, which should be enough to let you dump kwm ;) For details on what +exactly is implemented, see comments in src/kwm.c Read the README.KDE file +for more information. + + +WARNING: Some KDE hints are badly designed, so doing things like using +kpanel's desktop switcher/pager and Window Maker's internal workspace +management functions to create, destroy and rename workspaces at the same +time might cause unknown effects. To be on the safe side, only +use either of them to manage workspaces. Switching workspaces is hopefully, +safe, so you can switch workspaces from wherever you want. + + + +Workspace Specific Background Images +------------------------------------ + +Use the WorkspaceSpecificBack to set background images for specific +workspaces. The WorkspaceBack is used as the default background image. + +Example: + +WorkspaceSpecificBack = ((solid, red), (cpixmap, ship.jpg, gray), (), + (dgradient, red, blue)) + +This will set the background image of workspace 1 to (solid, 0), +2 to ship.jpg and 4 to a gradient. Workspace 3 and other workspaces +will have the image defined by WorkspaceBack. + +Note that this uses quite some memory... + + +setstyle/getstyle +----------------- + +setstyle now accepts the -nofonts flag, which will load the style +file ignoring all font related options. + +Example: + +setstyle -nofonts Blabla.style + + +getstyle can be used to create theme packs. See the usage in the +WindowMaker/README.themes file. + + + +New Texture Type +---------------- + +Textured gradients will tile a texture pixmap and combine it with a gradient, +using an arbitrary opaqueness. + +Syntax is (thgradient, , , , ) + (tvgradient, , , , ) + (tdgradient, , , , ) +where: + and are the colors for the gradient, + is the texture file and + is the opaqueness to merge the texture witht the gradient, +ranging from 0 to 255. + +Example: + +(thgradient, "BlueImage.jpeg", 120, white, black) + +The BlackTexture style and Checker theme are examples. + +Hints: + +You can use any type of pixmap file for this, but small (like 64x32) +grayscale pixmap files should get the best results (fast and low memory +usage). You can use color pixmaps, but it is harder to get the desired effect +with them. + +Be warned that this texture type is the slowest. + + + +New Options +----------- + +IconTitleBack and IconTitleColor control the color of the +miniwindow title. Both of them are colors. + +Example: +IconTitleColor=white; +IconTitleBack=black; + + +Since this introduces an incompatibility in themes and getting flamed by the +themes ppl isn't the most pleasant thing ("Whaddafuk you're thinking!? You +just broke 500 themes!!!" ;) the setstyle command was hacked so that it will +make old themes work as before, by trying to automatically set the above +options. Note that in some cases it will not have exactly the same results as +before. + + +StartMaximized window attribute. Will maximize the window when it +is mapped. + + +AutoRaiseLower option for the Clip. This allows automatic Raise/Lower of the +Clip icons when the mouse pointer enter/leave the Clip. To avoid unwanted +raising/lowering there is a time threshold before raising/lowering. +The thresholds can be changed in wconfig.h by changing one or both of +AUTO_LOWER_DELAY and AUTO_RAISE_DELAY (expressed in miliseconds). +For example if you set AUTO_RAISE_DELAY to 0, then the Clip will be raised as +soon as the mouse pointer enters it's area. Setting AUTO_RAISE_DELAY to a very +big value, will make the Clip to practically do not auto raise unless clicked, +but to be automatically lowered after AUTO_LOWER_DELAY (ms) when leaved. + + +New ThemePack Format +-------------------- + +Starting with this version, a new format of themes is being supported. +Before you open pine and start composing your flame, rest assured that +the old format is still supported. The new format is documented +in the WindowMaker/README.themes file. + + +Root Menu +--------- + +The -noext option for OPEN_MENU will strip whatever is after the last . +in file names that appear on the opened directory. So, + +OPEN_MENU ~/bg WITH xv -root -quit + +will create a menu with all the images in ~/bg without the extension. + + + --- 0.20.3 diff --git a/README b/README index cd45698f..048ac066 100644 --- a/README +++ b/README @@ -1,9 +1,12 @@ + + Window Maker X11 Window Manager + by Alfredo K. Kojima @@ -12,6 +15,11 @@ Matthew Hawkins + Web/FTP Master + + Phillip Smith + + Congratulations! You have purchased an extremely fine device that would give you thousands of years of trouble-free @@ -42,6 +50,20 @@ Window Maker was designed keeping integration with GNUstep in mind and is the "official" window manager for it. Read more about GNUstep further on this file. +\begin{marketing babble} +Window Maker is also KDE and GNOME compliant, which means you can use +it as the window manager of these desktop environments and even fully +replace kwm with wmaker if you use KDE. In that case, you would benefit +from the best of both worlds, being able to take advantage of the usability +and unique features of Window Maker, while still having access to KDE +features such as the panel, pager and tight integration with all KDE +applications. I've known of many cases where people keep switching KDE +and Window Maker depending on their mood or needs of the day, but now +you don't need that anymore :) +As GNOME components become more available, the same can be said about it. +Window Maker can be considered a fully compliant GNOME window manager. +\end{marketing babble} + Window Maker was previously called WindowMaker. Window Maker has no connection with Windowmaker, the software for @@ -148,15 +170,18 @@ 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 a interface builder, a project management system and other -tools. +environment, with tools like interface modeller, a project management system +(project center) and other tools. -GNUstep 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. +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 @@ -316,11 +341,12 @@ Musicware ========= If you use Window Maker and *really* like it, please consider making my day -by sending me a music CD (or a MiniDisc) of your favorite band, singer, -instrumentist, composer or whatever :^). I like listening to music and would -love to get new CDs, especially from other parts of the world. I like almost -any kind of music, from Ozzy Osbourne to Bach (mas não pagode e sertanejo -pelamordideus :), so I will be happy to receive just about anything. +by sending me a music CD (or a MiniDisc or even a MP3 CDR) of your favorite +band, singer, instrumentist, composer or whatever :^). I like listening to +music and would love to get new CDs, especially from other parts of the +world. I like almost any kind of music, from Ozzy Osbourne to Bach (mas não +pagode e sertanejo pelamordideus :), so I will be happy to receive just about +anything. Snail mail address: diff --git a/TODO b/TODO index e007ba42..fda565aa 100644 --- a/TODO +++ b/TODO @@ -3,21 +3,22 @@ Do ASAP: ======== - fix bestvisual selection code. Broken. - add a dialog to let user choose if we should restart, restart twm or continue crashing on crash. Do not forget to check if wmaker is already fully running. -- fix stacking. buggy again (maybe XFree 3.2 bug) - fix RemakeStackList() to account for transient windows -- differential update of appmenu - make unhide app map windows in the same stacking order they were before hiding - blink border of clients with UrgencyHint set between red and black - finish session stuff -- order window list menu by workspace +- fix scroller to not jump while dragging knob (lock setparameters() while dragging?) +- add multiline support for balloons +- move/add balloon to WINGs +- finish XStandardColormap stuff in wrlib Need to do: =========== +- allow user to select/restore default root menu from wprefs - fix and include the windoze cycle window patch - support for X11R6.4 extension for getting extra visual info in wrlib's automatic best context guessing -- rewrite menu traversal code - docklet to control AccessX (keyboard accessibility) functions - rewrite all redundant stuff to use WINGs - resizebartexture option @@ -30,9 +31,6 @@ Need to do: - rewrite defaults/wdefaults stuff to use WINGs UD stuff. Search list: ~/G/D/WindowMaker /u/l/s/W/D/WindowMaker built-in-defaults - remake internal string processing to use wchar? unicode? -- -stateprefix cmd arg to specify sufix for WMState domain (multiple instance - support) -- GNOME stuff - add new file for stuff like default commands and dnd commands for docked apps, balloons for the dock etc - alpha-channel app specified icons @@ -41,14 +39,12 @@ Maybe some day: =============== - virtual workspace - optimize for size -- make dithering in 8bpp better Never: (so, dont even bother to ask) ====== - different themes for each workspace. Unless you give us a SGI/Power Onyx -with 2 CPUs ;). Different workspacebacks for each workspace is being -considered, but don't hold your breath. +with 2 CPUs ;). - anything that requires the mouse pointer to be jumped by WindowMaker to somewhere. This is *terrible* behaviour. And it's not just IMO. diff --git a/WINGs/ChangeLog b/WINGs/ChangeLog index 205ffbff..30f27551 100644 --- a/WINGs/ChangeLog +++ b/WINGs/ChangeLog @@ -1,3 +1,20 @@ +changes since wmaker 0.20.3: +............................ + +- added WMSetSliderImage(), WMSetSliderKnobThickness() +- added WMGetListItemHeight() +- added WMListDidScrollNotification +- added WSetColorWellBordered() +- added hacky color dragging in colorwell +- added poll() support in WMNextEvent. WARNING: the stuff needed for + WMAddInputHandler() is not yet implemented for the poll stuff +- added WMSetFilePanelAccessoryView(), WMGetFilePanelAccessoryView() +- added WMSetPopUpButtonEnabled() +- added WMGetLabelImage() +- autoscroll for popup button menus +- added WMDrawPixmap() +- WARNING: changed parameter list for WMListDrawProc + changes since wmaker 0.20.2: ............................ diff --git a/WINGs/Makefile.am b/WINGs/Makefile.am index 3fc5ea61..2aef850a 100644 --- a/WINGs/Makefile.am +++ b/WINGs/Makefile.am @@ -5,39 +5,43 @@ AUTOMAKE_OPTIONS = no-dependencies SUBDIRS = Resources -LIBLIST= -L$(top_builddir)/wrlib -lwraster\ +LIBLIST= $(top_builddir)/wrlib/libwraster.la\ @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ \ - -lm -L$(top_builddir)/libPropList -lPropList + -lm $(top_builddir)/libPropList/libPropList.la +#lib_LTLIBRARIES = libWINGs.la + lib_LIBRARIES = libWINGs.a +#libWINGs_la_LDFLAGS = -version-info 1:1:0 + include_HEADERS = WINGs.h WUtil.h WINGsP.h noinst_PROGRAMS = wtest wmquery wmfile fontl testmywidget testmywidget_SOURCES = testmywidget.c mywidget.c mywidget.h -testmywidget_LDADD = -L. -lWINGs $(LIBLIST) +testmywidget_LDADD = libWINGs.a $(LIBLIST) fontl_SOURCES = fontl.c -fontl_LDADD = -L. -lWINGs $(LIBLIST) +fontl_LDADD = libWINGs.a $(LIBLIST) wtest_SOURCES = wtest.c -wtest_LDADD = -L. -lWINGs $(LIBLIST) +wtest_LDADD = libWINGs.a $(LIBLIST) wtest_DEPENDENCIES = libWINGs.a wmfile_SOURCES = wmfile.c -wmfile_LDADD = -L. -lWINGs $(LIBLIST) +wmfile_LDADD = libWINGs.a $(LIBLIST) wmquery_SOURCES = wmquery.c -wmquery_LDADD = -L. -lWINGs $(LIBLIST) +wmquery_LDADD = libWINGs.a $(LIBLIST) EXTRA_DIST = logo.xpm diff --git a/WINGs/Makefile.in b/WINGs/Makefile.in index 1ac7430a..79ae7c1e 100644 --- a/WINGs/Makefile.in +++ b/WINGs/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -94,37 +97,41 @@ AUTOMAKE_OPTIONS = no-dependencies SUBDIRS = Resources -LIBLIST= -L$(top_builddir)/wrlib -lwraster\ +LIBLIST= $(top_builddir)/wrlib/libwraster.la\ @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ \ - -lm -L$(top_builddir)/libPropList -lPropList + -lm $(top_builddir)/libPropList/libPropList.la + +#lib_LTLIBRARIES = libWINGs.la lib_LIBRARIES = libWINGs.a +#libWINGs_la_LDFLAGS = -version-info 1:1:0 + include_HEADERS = WINGs.h WUtil.h WINGsP.h noinst_PROGRAMS = wtest wmquery wmfile fontl testmywidget testmywidget_SOURCES = testmywidget.c mywidget.c mywidget.h -testmywidget_LDADD = -L. -lWINGs $(LIBLIST) +testmywidget_LDADD = libWINGs.a $(LIBLIST) fontl_SOURCES = fontl.c -fontl_LDADD = -L. -lWINGs $(LIBLIST) +fontl_LDADD = libWINGs.a $(LIBLIST) wtest_SOURCES = wtest.c -wtest_LDADD = -L. -lWINGs $(LIBLIST) +wtest_LDADD = libWINGs.a $(LIBLIST) wtest_DEPENDENCIES = libWINGs.a wmfile_SOURCES = wmfile.c -wmfile_LDADD = -L. -lWINGs $(LIBLIST) +wmfile_LDADD = libWINGs.a $(LIBLIST) wmquery_SOURCES = wmquery.c -wmquery_LDADD = -L. -lWINGs $(LIBLIST) +wmquery_LDADD = libWINGs.a $(LIBLIST) EXTRA_DIST = logo.xpm @@ -196,20 +203,26 @@ PROGRAMS = $(noinst_PROGRAMS) wtest_OBJECTS = wtest.o wtest_LDFLAGS = wmquery_OBJECTS = wmquery.o -wmquery_DEPENDENCIES = +wmquery_DEPENDENCIES = libWINGs.a $(top_builddir)/wrlib/libwraster.la \ +$(top_builddir)/libPropList/libPropList.la wmquery_LDFLAGS = wmfile_OBJECTS = wmfile.o -wmfile_DEPENDENCIES = +wmfile_DEPENDENCIES = libWINGs.a $(top_builddir)/wrlib/libwraster.la \ +$(top_builddir)/libPropList/libPropList.la wmfile_LDFLAGS = fontl_OBJECTS = fontl.o -fontl_DEPENDENCIES = +fontl_DEPENDENCIES = libWINGs.a $(top_builddir)/wrlib/libwraster.la \ +$(top_builddir)/libPropList/libPropList.la fontl_LDFLAGS = testmywidget_OBJECTS = testmywidget.o mywidget.o -testmywidget_DEPENDENCIES = +testmywidget_DEPENDENCIES = libWINGs.a \ +$(top_builddir)/wrlib/libwraster.la \ +$(top_builddir)/libPropList/libPropList.la testmywidget_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(include_HEADERS) DIST_COMMON = README ChangeLog Makefile.am Makefile.in TODO @@ -225,7 +238,7 @@ OBJECTS = $(libWINGs_a_OBJECTS) $(wtest_OBJECTS) $(wmquery_OBJECTS) $(wmfile_OBJ all: all-recursive all-am .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WINGs/Makefile @@ -285,6 +298,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + libWINGs.a: $(libWINGs_a_OBJECTS) $(libWINGs_a_DEPENDENCIES) -rm -f libWINGs.a $(AR) cru libWINGs.a $(libWINGs_a_OBJECTS) $(libWINGs_a_LIBADD) @@ -463,18 +495,19 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-libLIBRARIES mostlyclean-compile \ - mostlyclean-noinstPROGRAMS mostlyclean-tags \ - mostlyclean-generic + mostlyclean-libtool mostlyclean-noinstPROGRAMS \ + mostlyclean-tags mostlyclean-generic -clean-am: clean-libLIBRARIES clean-compile clean-noinstPROGRAMS \ - clean-tags clean-generic mostlyclean-am +clean-am: clean-libLIBRARIES clean-compile clean-libtool \ + clean-noinstPROGRAMS clean-tags clean-generic \ + mostlyclean-am distclean-am: distclean-libLIBRARIES distclean-compile \ - distclean-noinstPROGRAMS distclean-tags \ - distclean-generic clean-am + distclean-libtool distclean-noinstPROGRAMS \ + distclean-tags distclean-generic clean-am maintainer-clean-am: maintainer-clean-libLIBRARIES \ - maintainer-clean-compile \ + maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-noinstPROGRAMS maintainer-clean-tags \ maintainer-clean-generic distclean-am @@ -484,6 +517,7 @@ clean: clean-recursive clean-am distclean: distclean-recursive distclean-am -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-recursive maintainer-clean-am @echo "This command is intended for maintainers to use;" @@ -492,14 +526,15 @@ maintainer-clean: maintainer-clean-recursive maintainer-clean-am .PHONY: mostlyclean-libLIBRARIES distclean-libLIBRARIES \ clean-libLIBRARIES maintainer-clean-libLIBRARIES uninstall-libLIBRARIES \ install-libLIBRARIES mostlyclean-compile distclean-compile \ -clean-compile maintainer-clean-compile mostlyclean-noinstPROGRAMS \ -distclean-noinstPROGRAMS clean-noinstPROGRAMS \ -maintainer-clean-noinstPROGRAMS uninstall-includeHEADERS \ -install-includeHEADERS install-data-recursive uninstall-data-recursive \ -install-exec-recursive uninstall-exec-recursive installdirs-recursive \ -uninstalldirs-recursive all-recursive check-recursive \ -installcheck-recursive info-recursive dvi-recursive \ -mostlyclean-recursive distclean-recursive clean-recursive \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool \ +mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ +clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ +uninstall-includeHEADERS install-includeHEADERS install-data-recursive \ +uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ installcheck all-am install-exec-am install-data-am uninstall-am \ diff --git a/WINGs/Resources/Makefile.in b/WINGs/Resources/Makefile.in index 5e3a95a4..9785c931 100644 --- a/WINGs/Resources/Makefile.in +++ b/WINGs/Resources/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -193,6 +196,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WINGs/WINGs.h b/WINGs/WINGs.h index 53b41752..4f57710e 100644 --- a/WINGs/WINGs.h +++ b/WINGs/WINGs.h @@ -6,7 +6,7 @@ #include #include -#define WINGS_H_VERSION 980930 +#define WINGS_H_VERSION 981220 @@ -188,7 +188,7 @@ enum { #define WSIHighlightedArrowUp 9 #define WSIArrowDown 10 #define WSIHighlightedArrowDown 11 - +#define WSICheckMark 12 enum { WLDSSelected = (1 << 16), @@ -352,8 +352,8 @@ typedef void WMCallback(void *data); /* delegate method like stuff */ typedef void WMFreeDataProc(void *data); -typedef void WMListDrawProc(WMList *lPtr, Drawable d, char *text, int state, - WMRect *rect); +typedef void WMListDrawProc(WMList *lPtr, int index, Drawable d, char *text, + int state, WMRect *rect); /* typedef void WMSplitViewResizeSubviewsProc(WMSplitView *sPtr, @@ -493,6 +493,8 @@ WMPixmap *WMCreatePixmapFromFile(WMScreen *scrPtr, char *fileName); WMPixmap *WMCreateBlendedPixmapFromFile(WMScreen *scrPtr, char *fileName, RColor *color); +void WMDrawPixmap(WMPixmap *pixmap, Drawable d, int x, int y); + Pixmap WMGetPixmapXID(WMPixmap *pixmap); Pixmap WMGetPixmapMaskXID(WMPixmap *pixmap); @@ -694,6 +696,8 @@ void WMSetLabelWraps(WMLabel *lPtr, Bool flag); void WMSetLabelImage(WMLabel *lPtr, WMPixmap *image); +WMPixmap *WMGetLabelImage(WMLabel *lPtr); + void WMSetLabelImagePosition(WMLabel *lPtr, WMImagePosition position); void WMSetLabelTextAlignment(WMLabel *lPtr, WMAlignment alignment); @@ -738,6 +742,7 @@ void WMSetTextFieldEnabled(WMTextField *tPtr, Bool flag); void WMSetTextFieldSecure(WMTextField *tPtr, Bool flag); +extern char *WMListDidScrollNotification; extern char *WMTextDidChangeNotification; extern char *WMTextDidBeginEditingNotification; extern char *WMTextDidEndEditingNotification; @@ -782,6 +787,8 @@ void WMSetListUserDrawProc(WMList *lPtr, WMListDrawProc *proc); void WMSetListUserDrawItemHeight(WMList *lPtr, unsigned short height); +int WMGetListItemHeight(WMList *lPtr); + /* don't free the returned data */ WMListItem *WMGetListSelectedItem(WMList *lPtr); @@ -801,6 +808,8 @@ void WMSetListBottomPosition(WMList *lPtr, int row); int WMGetListPosition(WMList *lPtr); +extern char *WMListDidScrollNotification; + /* ....................................................................... */ WMBrowser *WMCreateBrowser(WMWidget *parent); @@ -876,6 +885,8 @@ char *WMGetPopUpButtonItem(WMPopUpButton *bPtr, int index); int WMGetPopUpButtonNumberOfItems(WMPopUpButton *bPtr); +void WMSetPopUpButtonEnabled(WMPopUpButton *bPtr, Bool flag); + /* ....................................................................... */ WMColorWell *WMCreateColorWell(WMWidget *parent); @@ -884,6 +895,8 @@ void WMSetColorWellColor(WMColorWell *cPtr, WMColor *color); WMColor *WMGetColorWellColor(WMColorWell *cPtr); +void WSetColorWellBordered(WMColorWell *cPtr, Bool flag); + /* ...................................................................... */ WMScrollView *WMCreateScrollView(WMWidget *parent); @@ -929,6 +942,10 @@ void WMSetSliderContinuous(WMSlider *slider, Bool flag); void WMSetSliderAction(WMSlider *slider, WMAction *action, void *data); +void WMSetSliderKnobThickness(WMSlider *sPtr, int thickness); + +void WMSetSliderImage(WMSlider *sPtr, WMPixmap *pixmap); + /* ....................................................................... */ /* only supports 2 subviews */ @@ -995,6 +1012,11 @@ int WMRunModalOpenPanelForDirectory(WMFilePanel *panel, WMWindow *owner, int WMRunModalSavePanelForDirectory(WMFilePanel *panel, WMWindow *owner, char *path, char *name); +void WMSetFilePanelAccessoryView(WMFilePanel *panel, WMView *view); + +WMView *WMGetFilePanelAccessoryView(WMFilePanel *panel); + + /* ...................................................................... */ /* only 1 instance per WMScreen */ diff --git a/WINGs/WINGsP.h b/WINGs/WINGsP.h index 537e4f6f..aea21650 100644 --- a/WINGs/WINGsP.h +++ b/WINGs/WINGsP.h @@ -6,7 +6,7 @@ #include "WINGs.h" #include "WUtil.h" -#if WINGS_H_VERSION < 980930 +#if WINGS_H_VERSION < 981220 #error There_is_an_old_WINGs.h_file_somewhere_in_your_system._Please_remove_it. #endif @@ -173,7 +173,9 @@ typedef struct W_Screen { struct W_Pixmap *pullDownIndicator; struct W_Pixmap *popUpIndicator; - + + struct W_Pixmap *checkMark; + struct W_Pixmap *homeIcon; struct W_Pixmap *defaultObjectIcon; @@ -308,7 +310,8 @@ _WINGsConfiguration WINGsConfiguration; #define W_FONTID(f) (f)->font->fid -#define W_DRAWABLE(scr) (scr)->rootWin +#define W_DRAWABLE(scr) (scr)->rcontext->drawable + W_View *W_GetViewForXWindow(Display *display, Window window); diff --git a/WINGs/WUtil.h b/WINGs/WUtil.h index 48908c16..fd90ca80 100644 --- a/WINGs/WUtil.h +++ b/WINGs/WUtil.h @@ -29,6 +29,37 @@ #endif +#if (!defined (__GNUC__) || __GNUC__ < 2 || \ + __GNUC_MINOR__ < (defined (__cplusplus) ? 6 : 4)) +#define __ASSERT_FUNCTION ((__const char *) 0) +#else +#define __ASSERT_FUNCTION __PRETTY_FUNCTION__ +#endif + + +#ifdef NDEBUG + +#define wassertr(expr, val) ((void)0) + +#else /* !NDEBUG */ + +#define wassertr(expr) \ + 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);\ + } + +#endif /* !NDEBUG */ + + typedef enum { WMPostWhenIdle = 1, diff --git a/WINGs/findfile.c b/WINGs/findfile.c index e0f7453a..68ecca36 100644 --- a/WINGs/findfile.c +++ b/WINGs/findfile.c @@ -189,12 +189,12 @@ wfindfile(char *paths, char *file) return NULL; if (*file=='/' || *file=='~' || *file=='$' || !paths) { - if (access(file, R_OK)<0) { + if (access(file, F_OK)<0) { fullpath = wexpandpath(file); if (!fullpath) return NULL; - if (access(fullpath, R_OK)<0) { + if (access(fullpath, F_OK)<0) { free(fullpath); return NULL; } else { @@ -219,7 +219,7 @@ wfindfile(char *paths, char *file) fullpath = wexpandpath(path); free(path); if (fullpath) { - if (access(fullpath, R_OK)==0) { + if (access(fullpath, F_OK)==0) { return fullpath; } free(fullpath); @@ -243,12 +243,12 @@ wfindfileinlist(char **path_list, char *file) return NULL; if (*file=='/' || *file=='~' || !path_list) { - if (access(file, R_OK)<0) { + if (access(file, F_OK)<0) { fullpath = wexpandpath(file); if (!fullpath) return NULL; - if (access(fullpath, R_OK)<0) { + if (access(fullpath, F_OK)<0) { free(fullpath); return NULL; } else { @@ -271,8 +271,8 @@ wfindfileinlist(char **path_list, char *file) fullpath = wexpandpath(path); free(path); if (fullpath) { - /* check if file is readable */ - if (access(fullpath, R_OK)==0) { + /* check if file exists */ + if (access(fullpath, F_OK)==0) { return fullpath; } free(fullpath); diff --git a/WINGs/wapplication.c b/WINGs/wapplication.c index fa9c637f..aa7cc52c 100644 --- a/WINGs/wapplication.c +++ b/WINGs/wapplication.c @@ -23,8 +23,6 @@ -extern void W_ReadConfigurations(void); - extern void W_InitNotificationCenter(void); @@ -72,9 +70,6 @@ WMInitializeApplication(char *applicationName, int *argc, char **argv) /* initialize notification center */ W_InitNotificationCenter(); - - /* read general configuration data for WINGs */ - W_ReadConfigurations(); } diff --git a/WINGs/wbrowser.c b/WINGs/wbrowser.c index 3db14b09..0f923140 100644 --- a/WINGs/wbrowser.c +++ b/WINGs/wbrowser.c @@ -72,8 +72,8 @@ static void setupScroller(WMBrowser *bPtr); static void scrollToColumn(WMBrowser *bPtr, int column); -static void paintItem(WMList *lPtr, Drawable d, char *text, int state, - WMRect *rect); +static void paintItem(WMList *lPtr, int index, Drawable d, char *text, + int state, WMRect *rect); static void loadColumn(WMBrowser *bPtr, int column); @@ -189,7 +189,7 @@ drawTitleOfColumn(WMBrowser *bPtr, int column) if (column < bPtr->usedColumnCount && bPtr->titles[column]) W_PaintText(bPtr->view, bPtr->view->window, scr->boldFont, x, - (bPtr->titleHeight-scr->boldFont->height)/2, + (bPtr->titleHeight-WMFontHeight(scr->boldFont))/2, bPtr->columnSize.width, WACenter, W_GC(scr->white), False, bPtr->titles[column], strlen(bPtr->titles[column])); } @@ -248,6 +248,23 @@ removeColumn(WMBrowser *bPtr, int column) if (column < bPtr->maxVisibleColumns) { int tmp; +#if 1 + int limit; + + if(bPtr->usedColumnCount < bPtr->maxVisibleColumns) + limit = bPtr->usedColumnCount; + else + limit = bPtr->maxVisibleColumns; + + for (i=column; i < limit; i++) { + if (bPtr->titles[i]) + free(bPtr->titles[i]); + bPtr->titles[i] = NULL; + + WMClearList(bPtr->columns[i]); + bPtr->usedColumnCount--; + } +#else for (i=column; i < bPtr->maxVisibleColumns; i++) { if (bPtr->titles[i]) free(bPtr->titles[i]); @@ -267,6 +284,7 @@ removeColumn(WMBrowser *bPtr, int column) bPtr->columnCount--; bPtr->usedColumnCount--; } +#endif } else { int tmp = bPtr->columnCount; for (i=column; i < tmp; i++) { @@ -443,7 +461,8 @@ resizeBrowser(WMWidget *w, unsigned int width, unsigned int height) static void -paintItem(WMList *lPtr, Drawable d, char *text, int state, WMRect *rect) +paintItem(WMList *lPtr, int index, Drawable d, char *text, int state, + WMRect *rect) { WMView *view = W_VIEW(lPtr); W_Screen *scr = view->screen; diff --git a/WINGs/wcolorwell.c b/WINGs/wcolorwell.c index 9ac2203b..728f29ea 100644 --- a/WINGs/wcolorwell.c +++ b/WINGs/wcolorwell.c @@ -29,9 +29,9 @@ static void destroyColorWell(ColorWell *cPtr); static void paintColorWell(ColorWell *cPtr); static void handleEvents(XEvent *event, void *data); -#if 0 + static void handleDragEvents(XEvent *event, void *data); -#endif + static void handleActionEvents(XEvent *event, void *data); static void resizeColorWell(); @@ -73,6 +73,7 @@ WMCreateColorWell(WMWidget *parent) free(cPtr); return NULL; } + cPtr->view->self = cPtr; cPtr->colorView = W_CreateView(cPtr->view); if (!cPtr->colorView) { @@ -80,19 +81,22 @@ WMCreateColorWell(WMWidget *parent) free(cPtr); return NULL; } - + cPtr->colorView->self = cPtr; + WMCreateEventHandler(cPtr->view, ExposureMask|StructureNotifyMask |ClientMessageMask, handleEvents, cPtr); WMCreateEventHandler(cPtr->colorView, ExposureMask, handleEvents, cPtr); -#if 0 - WMCreateEventHandler(cPtr->colorView, ButtonPressMask|Button1MotionMask, - handleDragEvents, cPtr); -#endif + + WMCreateEventHandler(cPtr->colorView, ButtonPressMask|ButtonMotionMask + |EnterWindowMask, handleDragEvents, cPtr); + WMCreateEventHandler(cPtr->view, ButtonPressMask, handleActionEvents, cPtr); cPtr->colorView->flags.mapWhenRealized = 1; + + cPtr->flags.bordered = 1; resizeColorWell(cPtr, DEFAULT_WIDTH, DEFAULT_HEIGHT); @@ -119,6 +123,17 @@ WMGetColorWellColor(WMColorWell *cPtr) return cPtr->color; } + +void +WSetColorWellBordered(WMColorWell *cPtr, Bool flag) +{ + if (cPtr->flags.bordered != flag) { + cPtr->flags.bordered = flag; + resizeColorWell(cPtr, cPtr->view->size.width, cPtr->view->size.height); + } +} + + #define MIN(a,b) ((a) > (b) ? (b) : (a)) static void @@ -126,19 +141,28 @@ resizeColorWell(WMColorWell *cPtr, unsigned int width, unsigned int height) { int bw; - if (width < MIN_WIDTH) - width = MIN_WIDTH; - if (height < MIN_HEIGHT) - height = MIN_HEIGHT; + if (cPtr->flags.bordered) { - bw = (int)((float)MIN(width, height)*0.24); + if (width < MIN_WIDTH) + width = MIN_WIDTH; + if (height < MIN_HEIGHT) + height = MIN_HEIGHT; + + bw = (int)((float)MIN(width, height)*0.24); + + W_ResizeView(cPtr->view, width, height); - W_ResizeView(cPtr->view, width, height); + W_ResizeView(cPtr->colorView, width-2*bw, height-2*bw); + + if (cPtr->colorView->pos.x!=bw || cPtr->colorView->pos.y!=bw) + W_MoveView(cPtr->colorView, bw, bw); + } else { + W_ResizeView(cPtr->view, width, height); - W_ResizeView(cPtr->colorView, width-2*bw, height-2*bw); + W_ResizeView(cPtr->colorView, width, height); - if (cPtr->colorView->pos.x!=bw || cPtr->colorView->pos.y!=bw) - W_MoveView(cPtr->colorView, bw, bw); + W_MoveView(cPtr->colorView, 0, 0); + } } @@ -184,7 +208,7 @@ handleEvents(XEvent *event, void *data) } } -#if 0 + static WMPixmap* makeDragPixmap(WMColorWell *cPtr) { @@ -201,6 +225,116 @@ makeDragPixmap(WMColorWell *cPtr) } +static void +slideView(WMView *view, int srcX, int srcY, int dstX, int dstY) +{ + double x, y, dx, dy; + int i; + + srcX -= 8; + srcY -= 8; + dstX -= 8; + dstY -= 8; + + x = srcX; + y = srcY; + + dx = (double)(dstX-srcX)/20.0; + dy = (double)(dstY-srcY)/20.0; + + for (i = 0; i < 20; i++) { + W_MoveView(view, x, y); + XFlush(view->screen->display); + + x += dx; + y += dy; + } +} + + +static void +dragColor(ColorWell *cPtr, XEvent *event, WMPixmap *image) +{ + WMView *dragView; + WMScreen *scr = cPtr->view->screen; + Display *dpy = scr->display; + XColor black = {0, 0,0,0, DoRed|DoGreen|DoBlue}; + XColor green = {0, 0x4500,0xb000,0x4500, DoRed|DoGreen|DoBlue}; + XColor back = {0, 0xffff,0xffff,0xffff, DoRed|DoGreen|DoBlue}; + Bool done = False; + WMColorWell *activeWell = NULL; + + dragView = W_CreateTopView(scr); + + W_ResizeView(dragView, 16, 16); + dragView->attribFlags |= CWOverrideRedirect | CWSaveUnder; + dragView->attribs.event_mask = StructureNotifyMask; + dragView->attribs.override_redirect = True; + dragView->attribs.save_under = True; + + W_MoveView(dragView, event->xmotion.x_root-8, event->xmotion.y_root-8); + + W_RealizeView(dragView); + + W_MapView(dragView); + + XSetWindowBackgroundPixmap(dpy, dragView->window, WMGetPixmapXID(image)); + XClearWindow(dpy, dragView->window); + + + XGrabPointer(dpy, dragView->window, True, + ButtonMotionMask|ButtonReleaseMask|EnterWindowMask, + GrabModeSync, GrabModeAsync, + scr->rootWin, scr->defaultCursor, CurrentTime); + + while (!done) { + XEvent ev; + WMView *view; + + XAllowEvents(dpy, SyncPointer, CurrentTime); + WMNextEvent(dpy, &ev); + + switch (ev.type) { + case ButtonRelease: + if (activeWell != NULL) { + WMSetColorWellColor(activeWell, cPtr->color); + } else { + slideView(dragView, ev.xbutton.x_root, ev.xbutton.y_root, + event->xmotion.x_root, event->xmotion.y_root); + } + + done = True; + break; + + case EnterNotify: + view = W_GetViewForXWindow(dpy, ev.xcrossing.window); + + if (view && view->self && W_CLASS(view->self) == WC_ColorWell + && view->self != activeWell && view->self != cPtr) { + + activeWell = view->self; + XRecolorCursor(dpy, scr->defaultCursor, &green, &back); + } else if (view->self!=NULL && view->self != activeWell) { + XRecolorCursor(dpy, scr->defaultCursor, &black, &back); + activeWell = NULL; + } + break; + + case MotionNotify: + W_MoveView(dragView, ev.xmotion.x_root-8, ev.xmotion.y_root-8); + break; + + default: + WMHandleEvent(&ev); + break; + } + } + XUngrabPointer(dpy, CurrentTime); + XRecolorCursor(dpy, scr->defaultCursor, &black, &back); + + W_DestroyView(dragView); +} + static void handleDragEvents(XEvent *event, void *data) @@ -214,20 +348,24 @@ handleDragEvents(XEvent *event, void *data) cPtr->ipoint.y = event->xbutton.y; } break; - + case MotionNotify: if (event->xmotion.state & Button1Mask) { if (abs(cPtr->ipoint.x - event->xmotion.x) > 4 || abs(cPtr->ipoint.y - event->xmotion.y) > 4) { WMSize offs; WMPixmap *pixmap; - + offs.width = 2; offs.height = 2; pixmap = makeDragPixmap(cPtr); - + + /* WMDragImageFromView(cPtr->view, pixmap, cPtr->view->pos, offs, event, True); + * */ + + dragColor(cPtr, event, pixmap); WMReleasePixmap(pixmap); } @@ -235,7 +373,7 @@ handleDragEvents(XEvent *event, void *data) break; } } -#endif + static void diff --git a/WINGs/wevent.c b/WINGs/wevent.c index aff5591c..2be11367 100644 --- a/WINGs/wevent.c +++ b/WINGs/wevent.c @@ -11,6 +11,11 @@ #include #include +#ifdef HAVE_POLL_H +#include +#endif + + #ifdef HAVE_SYS_SELECT_H # include #endif @@ -708,9 +713,93 @@ WMIsDoubleClick(XEvent *event) Bool W_WaitForEvent(Display *dpy, unsigned long xeventmask) { -#ifndef HAVE_SELECT -#error This_system_does_not_have_select(2)_and_is_not_supported +#if defined(HAVE_POLL) && defined(HAVE_POLL_H) && !defined(HAVE_SELECT) + struct pollfd *fds; + InputHandler *handler; + int count, timeout, nfds, k, retval; + + for (nfds = 1, handler = inputHandler; + handler != 0; handler = handler->next) nfds++; + + fds = wmalloc(nfds * sizeof(struct pollfd)); + fds[0].fd = ConnectionNumber(dpy); + fds[0].events = POLLIN; + + for (k = 1, handler = inputHandler; + handler; + handler = handler->next, k++) { + fds[k].fd = handler->fd; + fds[k].events = 0; + if (handler->mask & WIReadMask) + fds[k].events |= POLLIN; + + if (handler->mask & WIWriteMask) + fds[k].events |= POLLOUT; + +#if 0 /* FIXME */ + if (handler->mask & WIExceptMask) + FD_SET(handler->fd, &eset); #endif + } + + /* + * Setup the select() timeout to the estimated time until the + * next timer expires. + */ + if (timerPending()) { + struct timeval tv; + delayUntilNextTimerEvent(&tv); + timeout = tv.tv_sec * 1000 + tv.tv_usec / 1000; + } else { + timeout = -1; + } + + if (xeventmask==0) { + if (XPending(dpy)) + return True; + } else { + XEvent ev; + if (XCheckMaskEvent(dpy, xeventmask, &ev)) { + XPutBackEvent(dpy, &ev); + return True; + } + } + + count = poll(fds, nfds, timeout); + + if (count > 0) { + handler = inputHandler; + k = 1; + while (handler) { + int mask; + + mask = 0; + + if (fds[k].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI)) + mask |= WIReadMask; + + if (fds[k].revents & (POLLOUT | POLLWRBAND)) + mask |= WIWriteMask; + + if (fds[k].revents & (POLLHUP | POLLNVAL | POLLERR)) + mask |= WIExceptMask; + + if (mask!=0 && handler->callback) { + (*handler->callback)(handler->fd, mask, + handler->clientData); + } + + handler = handler->next; + k++; + } + } + + retval = fds[0].revents & (POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI); + free(fds); + + return retval; +#else /* not HAVE_POLL */ +#ifdef HAVE_SELECT struct timeval timeout; struct timeval *timeoutPtr; fd_set rset, wset, eset; @@ -764,7 +853,7 @@ W_WaitForEvent(Display *dpy, unsigned long xeventmask) return True; } } - /* TODO: port to poll() */ + count = select(1 + maxfd, &rset, &wset, &eset, timeoutPtr); if (count > 0) { @@ -794,10 +883,12 @@ W_WaitForEvent(Display *dpy, unsigned long xeventmask) } return FD_ISSET(ConnectionNumber(dpy), &rset); +#else /* not HAVE_SELECT, not HAVE_POLL */ +Neither select nor poll. You lose. +#endif /* HAVE_SELECT */ +#endif /* HAVE_POLL */ } - - void WMNextEvent(Display *dpy, XEvent *event) { diff --git a/WINGs/wfilepanel.c b/WINGs/wfilepanel.c index 6608f6e8..ccf61e79 100644 --- a/WINGs/wfilepanel.c +++ b/WINGs/wfilepanel.c @@ -30,6 +30,8 @@ typedef struct W_FilePanel { WMButton *homeButton; + WMView *accessoryView; + WMTextField *fileField; char **fileTypes; @@ -358,6 +360,28 @@ WMGetFilePanelFileName(WMFilePanel *panel) } +void +WMSetFilePanelAccessoryView(WMFilePanel *panel, WMView *view) +{ + WMView *v; + + panel->accessoryView = view; + + v = WMWidgetView(panel->win); + + W_ReparentView(view, v); + + W_MoveView(view, (v->size.width - v->size.width)/2, 300); +} + + +WMView* +WMGetFilePanelAccessoryView(WMFilePanel *panel) +{ + return panel->accessoryView; +} + + static char* get_name_from_path(char *path) { @@ -564,3 +588,5 @@ buttonClick(WMButton *bPtr, WMFilePanel *panel) panel->flags.done = 1; } + + diff --git a/WINGs/wfont.c b/WINGs/wfont.c index c6759e1d..7671f42e 100644 --- a/WINGs/wfont.c +++ b/WINGs/wfont.c @@ -91,7 +91,7 @@ WMCreateFontInDefaultEncoding(WMScreen *scrPtr, char *fontName) WMFont* WMRetainFont(WMFont *font) { - assert(font!=NULL); + wassertrv(font!=NULL, NULL); font->refCount++; @@ -102,7 +102,8 @@ WMRetainFont(WMFont *font) void WMReleaseFont(WMFont *font) { - assert(font!=NULL); + wassertr(font!=NULL); + font->refCount--; if (font->refCount < 1) { if (font->notFontSet) @@ -118,8 +119,8 @@ WMReleaseFont(WMFont *font) unsigned int WMFontHeight(WMFont *font) { - assert(font!=NULL); - + wassertrv(font!=NULL, 0); + return font->height; } @@ -179,6 +180,8 @@ WMBoldSystemFontOfSize(WMScreen *scrPtr, int size) XFontSet WMGetFontFontSet(WMFont *font) { + wassertrv(font!=NULL, NULL); + if (font->notFontSet) return NULL; else @@ -189,8 +192,8 @@ WMGetFontFontSet(WMFont *font) int WMWidthOfString(WMFont *font, char *text, int length) { - assert(font!=NULL); - assert(text!=NULL); + wassertrv(font!=NULL, 0); + wassertrv(text!=NULL, 0); if (font->notFontSet) return XTextWidth(font->font.normal, text, length); @@ -210,6 +213,8 @@ void WMDrawString(WMScreen *scr, Drawable d, GC gc, WMFont *font, int x, int y, char *text, int length) { + wassertr(font!=NULL); + if (font->notFontSet) { XSetFont(scr->display, gc, font->font.normal->fid); XDrawString(scr->display, d, gc, x, y + font->y, text, length); @@ -224,6 +229,8 @@ void WMDrawImageString(WMScreen *scr, Drawable d, GC gc, WMFont *font, int x, int y, char *text, int length) { + wassertr(font != NULL); + if (font->notFontSet) { XSetFont(scr->display, gc, font->font.normal->fid); XDrawImageString(scr->display, d, gc, x, y + font->y, text, length); diff --git a/WINGs/wframe.c b/WINGs/wframe.c index f120a24e..0fa2e028 100644 --- a/WINGs/wframe.c +++ b/WINGs/wframe.c @@ -82,7 +82,7 @@ paintFrame(Frame *fPtr) int fy, fh; if (fPtr->caption!=NULL) - th = scrPtr->normalFont->height; + th = WMFontHeight(scrPtr->normalFont); else { th = 0; } diff --git a/WINGs/widgets.c b/WINGs/widgets.c index 828effa9..d0ff22c4 100644 --- a/WINGs/widgets.c +++ b/WINGs/widgets.c @@ -281,12 +281,30 @@ static char *PULLDOWN_INDICATOR[] = { #define PULLDOWN_INDICATOR_HEIGHT 7 +#define CHECK_MARK_WIDTH 8 +#define CHECK_MARK_HEIGHT 10 + +static char *CHECK_MARK[] = { +"======== ", +"======= #", +"====== #%", +"===== #%=", +" #== #%==", +" #% #%===", +" % #%====", +" #%=====", +" #%======", +"#%======="}; + + #define STIPPLE_WIDTH 8 #define STIPPLE_HEIGHT 8 static unsigned char STIPPLE_BITS[] = { 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}; +extern void W_ReadConfigurations(void); + extern W_ViewProcedureTable _WindowViewProcedures; extern W_ViewProcedureTable _FrameViewProcedures; @@ -489,6 +507,8 @@ WMCreateScreenWithRContext(Display *display, int screen, RContext *context) initProcedureTable(); + W_ReadConfigurations(); + assert(W_ApplicationInitialized()); } @@ -567,6 +587,16 @@ WMCreateScreenWithRContext(Display *display, int screen, RContext *context) scrPtr->boldFont = WMBoldSystemFontOfSize(scrPtr, 12); + if (!scrPtr->boldFont) + scrPtr->boldFont = scrPtr->normalFont; + + if (!scrPtr->normalFont) { + wwarning("could not load any fonts. Make sure your font installation" + "and locale settings are correct."); + + return NULL; + } + scrPtr->checkButtonImageOn = makePixmap(scrPtr, CHECK_BUTTON_ON, CHECK_BUTTON_ON_WIDTH, CHECK_BUTTON_ON_HEIGHT, False); @@ -636,6 +666,11 @@ WMCreateScreenWithRContext(Display *display, int screen, RContext *context) scrPtr->pullDownIndicator = makePixmap(scrPtr, PULLDOWN_INDICATOR, PULLDOWN_INDICATOR_WIDTH, PULLDOWN_INDICATOR_HEIGHT, True); + + scrPtr->checkMark = makePixmap(scrPtr, CHECK_MARK, + CHECK_MARK_WIDTH, + CHECK_MARK_HEIGHT, True); + loadPixmaps(scrPtr); scrPtr->defaultCursor = XCreateFontCursor(display, XC_left_ptr); diff --git a/WINGs/wlabel.c b/WINGs/wlabel.c index 77fb7b6b..c99b65f9 100644 --- a/WINGs/wlabel.c +++ b/WINGs/wlabel.c @@ -99,6 +99,13 @@ WMSetLabelImage(WMLabel *lPtr, WMPixmap *image) } +WMPixmap* +WMGetLabelImage(WMLabel *lPtr) +{ + return lPtr->image; +} + + void WMSetLabelImagePosition(WMLabel *lPtr, WMImagePosition position) { diff --git a/WINGs/wlist.c b/WINGs/wlist.c index 0b11c135..c5925198 100644 --- a/WINGs/wlist.c +++ b/WINGs/wlist.c @@ -4,6 +4,8 @@ #include "WINGsP.h" +char *WMListDidScrollNotification = "WMListDidScrollNotification"; + typedef struct W_List { W_Class widgetClass; @@ -99,7 +101,7 @@ WMCreateList(WMWidget *parent) |EnterWindowMask|LeaveWindowMask|ButtonMotionMask, handleActionEvents, lPtr); - lPtr->itemHeight = scrPtr->normalFont->height + 1; + lPtr->itemHeight = WMFontHeight(scrPtr->normalFont) + 1; /* create the vertical scroller */ lPtr->vScroller = WMCreateScroller(lPtr); @@ -224,6 +226,7 @@ WMRemoveListItem(WMList *lPtr, int row) { WMListItem *llist; WMListItem *tmp; + int topItem = lPtr->topItem; CHECK_CLASS(lPtr, WC_List); @@ -266,6 +269,8 @@ WMRemoveListItem(WMList *lPtr, int row) if (!lPtr->idleID) { lPtr->idleID = WMAddIdleHandler((WMCallback*)updateScroller, lPtr); } + if (lPtr->topItem != topItem) + WMPostNotificationName(WMListDidScrollNotification, lPtr, NULL); } @@ -370,6 +375,13 @@ WMGetListSelectedItemRow(WMList *lPtr) } +int +WMGetListItemHeight(WMList *lPtr) +{ + return lPtr->itemHeight; +} + + void WMSetListPosition(WMList *lPtr, int row) { @@ -417,6 +429,7 @@ vScrollCallBack(WMWidget *scroller, void *self) WMList *lPtr = (WMList*)self; WMScroller *sPtr = (WMScroller*)scroller; int height; + int topItem = lPtr->topItem; height = lPtr->view->size.height - 4; @@ -476,6 +489,9 @@ vScrollCallBack(WMWidget *scroller, void *self) /* do nothing */ break; } + + if (lPtr->topItem != topItem) + WMPostNotificationName(WMListDidScrollNotification, lPtr, NULL); } @@ -516,8 +532,8 @@ paintItem(List *lPtr, int index) flags |= WLDSIsBranch; if (lPtr->draw) - (*lPtr->draw)(lPtr, view->window, itemPtr->text, flags, &rect); - + (*lPtr->draw)(lPtr, index, view->window, itemPtr->text, flags, + &rect); } else { if (itemPtr->selected) XFillRectangle(scr->display, view->window, W_GC(scr->white), x, y, @@ -706,6 +722,7 @@ handleActionEvents(XEvent *event, void *data) { List *lPtr = (List*)data; int tmp; + int topItem = lPtr->topItem; CHECK_CLASS(data, WC_List); @@ -713,14 +730,11 @@ handleActionEvents(XEvent *event, void *data) case ButtonRelease: lPtr->flags.buttonPressed = 0; tmp = getItemIndexAt(lPtr, event->xbutton.y); + if (tmp == lPtr->selectedItem && tmp >= 0) { - if (WMIsDoubleClick(event)) { - if (lPtr->doubleAction) - (*lPtr->doubleAction)(lPtr, lPtr->doubleClientData); - } else { - if (lPtr->action) - (*lPtr->action)(lPtr, lPtr->clientData); - } + + if (lPtr->action) + (*lPtr->action)(lPtr, lPtr->clientData); } break; @@ -728,7 +742,7 @@ handleActionEvents(XEvent *event, void *data) lPtr->flags.buttonPressed = lPtr->flags.buttonWasPressed; lPtr->flags.buttonWasPressed = 0; break; - + case LeaveNotify: lPtr->flags.buttonWasPressed = lPtr->flags.buttonPressed; lPtr->flags.buttonPressed = 0; @@ -743,6 +757,11 @@ handleActionEvents(XEvent *event, void *data) lPtr->selectedItem = tmp; } lPtr->flags.buttonPressed = 1; + + if (WMIsDoubleClick(event)) { + if (lPtr->doubleAction) + (*lPtr->doubleAction)(lPtr, lPtr->doubleClientData); + } } break; @@ -756,6 +775,8 @@ handleActionEvents(XEvent *event, void *data) } break; } + if (lPtr->topItem != topItem) + WMPostNotificationName(WMListDidScrollNotification, lPtr, NULL); } diff --git a/WINGs/wmisc.c b/WINGs/wmisc.c index 942d78bf..e6f9f0ab 100644 --- a/WINGs/wmisc.c +++ b/WINGs/wmisc.c @@ -72,7 +72,7 @@ W_DrawRelief(W_Screen *scr, Drawable d, int x, int y, unsigned int width, XDrawLine(dpy, d, bgc, x+width-1, y, x+width-1, y+height-1); if (height > 2 && relief!=WRPushed) { - XDrawLine(dpy, d, dgc, x+width-2, y+2, x+width-2, y+height-3); + XDrawLine(dpy, d, dgc, x+width-2, y+1, x+width-2, y+height-2); } } @@ -116,12 +116,13 @@ W_GetTextHeight(WMFont *font, char *text, int width, int wrap) int count; int length = strlen(text); int h; + int fheight = WMFontHeight(font); h = 0; while (length > 0) { count = fitText(ptr, font, width, wrap); - h += font->height; + h += fheight; if (isspace(ptr[count])) count++; @@ -142,6 +143,7 @@ W_PaintText(W_View *view, Drawable d, WMFont *font, int x, int y, int line_width; int line_x; int count; + int fheight = WMFontHeight(font); while (length > 0) { count = fitText(ptr, font, width, wrap); @@ -156,7 +158,7 @@ W_PaintText(W_View *view, Drawable d, WMFont *font, int x, int y, WMDrawString(view->screen, d, gc, font, line_x, y, ptr, count); - y += font->height; + y += fheight; if (isspace(ptr[count])) count++; diff --git a/WINGs/wpanel.c b/WINGs/wpanel.c index a9d180dc..b164eb7d 100644 --- a/WINGs/wpanel.c +++ b/WINGs/wpanel.c @@ -113,8 +113,8 @@ WMCreateAlertPanel(WMScreen *scrPtr, WMWindow *owner, largeFont = WMBoldSystemFontOfSize(scrPtr, 24); panel->tLbl = WMCreateLabel(panel->win); - WMMoveWidget(panel->tLbl, 80, (80 - largeFont->height)/2); - WMResizeWidget(panel->tLbl, 400 - 70, largeFont->height+4); + WMMoveWidget(panel->tLbl, 80, (80 - WMFontHeight(largeFont))/2); + WMResizeWidget(panel->tLbl, 400 - 70, WMFontHeight(largeFont)+4); WMSetLabelText(panel->tLbl, title); WMSetLabelTextAlignment(panel->tLbl, WALeft); WMSetLabelFont(panel->tLbl, largeFont); @@ -126,7 +126,7 @@ WMCreateAlertPanel(WMScreen *scrPtr, WMWindow *owner, if (msg) { panel->mLbl = WMCreateLabel(panel->win); WMMoveWidget(panel->mLbl, 10, 83); - WMResizeWidget(panel->mLbl, 380, scrPtr->normalFont->height*4); + WMResizeWidget(panel->mLbl, 380, WMFontHeight(scrPtr->normalFont)*4); WMSetLabelText(panel->mLbl, msg); WMSetLabelTextAlignment(panel->mLbl, WACenter); } @@ -317,7 +317,7 @@ WMCreateInputPanel(WMScreen *scrPtr, WMWindow *owner, char *title, char *msg, panel->tLbl = WMCreateLabel(panel->win); WMMoveWidget(panel->tLbl, 20, 16); - WMResizeWidget(panel->tLbl, 320 - 40, largeFont->height+4); + WMResizeWidget(panel->tLbl, 320 - 40, WMFontHeight(largeFont)+4); WMSetLabelText(panel->tLbl, title); WMSetLabelTextAlignment(panel->tLbl, WALeft); WMSetLabelFont(panel->tLbl, largeFont); @@ -329,7 +329,8 @@ WMCreateInputPanel(WMScreen *scrPtr, WMWindow *owner, char *title, char *msg, if (msg) { panel->mLbl = WMCreateLabel(panel->win); WMMoveWidget(panel->mLbl, 20, 50); - WMResizeWidget(panel->mLbl, 320 - 40,scrPtr->normalFont->height*2); + WMResizeWidget(panel->mLbl, 320 - 40, + WMFontHeight(scrPtr->normalFont)*2); WMSetLabelText(panel->mLbl, msg); WMSetLabelTextAlignment(panel->mLbl, WALeft); } diff --git a/WINGs/wpixmap.c b/WINGs/wpixmap.c index 644caa00..43a5f84f 100644 --- a/WINGs/wpixmap.c +++ b/WINGs/wpixmap.c @@ -17,6 +17,8 @@ WMRetainPixmap(WMPixmap *pixmap) void WMReleasePixmap(WMPixmap *pixmap) { + wassertr(pixmap!=NULL); + pixmap->refCount--; if (pixmap->refCount<1) { @@ -139,12 +141,17 @@ WMCreatePixmapFromXPMData(WMScreen *scrPtr, char **data) Pixmap WMGetPixmapXID(WMPixmap *pixmap) { + wassertrv(pixmap != NULL, None); + return pixmap->pixmap; } + Pixmap WMGetPixmapMaskXID(WMPixmap *pixmap) { + wassertrv(pixmap != NULL, None); + return pixmap->mask; } @@ -152,11 +159,13 @@ WMGetPixmapMaskXID(WMPixmap *pixmap) WMSize WMGetPixmapSize(WMPixmap *pixmap) { - WMSize size; + WMSize size = {0,0}; + + wassertrv(pixmap != NULL, size); size.width = pixmap->width; size.height = pixmap->height; - + return size; } @@ -197,9 +206,25 @@ WMGetSystemPixmap(WMScreen *scr, int image) case WSIHighlightedArrowDown: return WMRetainPixmap(scr->hiDownArrow); - + + case WSICheckMark: + return WMRetainPixmap(scr->checkMark); + default: return NULL; } } + + +void +WMDrawPixmap(WMPixmap *pixmap, Drawable d, int x, int y) +{ + WMScreen *scr = pixmap->screen; + + XSetClipMask(scr->display, scr->clipGC, pixmap->mask); + XSetClipOrigin(scr->display, scr->clipGC, x, y); + + XCopyArea(scr->display, pixmap->pixmap, d, scr->clipGC, 0, 0, + pixmap->width, pixmap->height, x, y); +} diff --git a/WINGs/wpopupbutton.c b/WINGs/wpopupbutton.c index df5d2486..f1ee440f 100644 --- a/WINGs/wpopupbutton.c +++ b/WINGs/wpopupbutton.c @@ -10,6 +10,7 @@ typedef struct ItemList { unsigned int disabled:1; } ItemList; + typedef struct W_PopUpButton { W_Class widgetClass; WMView *view; @@ -30,12 +31,20 @@ typedef struct W_PopUpButton { WMView *menuView; /* override redirect popup menu */ + WMHandlerID timer; /* for autoscroll */ + + /**/ + int scrollStartY; /* for autoscroll */ + struct { unsigned int pullsDown:1; unsigned int configured:1; unsigned int insideMenu:1; + + unsigned int enabled:1; + } flags; } PopUpButton; @@ -43,6 +52,8 @@ typedef struct W_PopUpButton { #define MENU_BLINK_DELAY 60000 #define MENU_BLINK_COUNT 2 +#define SCROLL_DELAY 30 + W_ViewProcedureTable _PopUpButtonViewProcedures = { NULL, @@ -94,6 +105,8 @@ WMCreatePopUpButton(WMWidget *parent) WMCreateEventHandler(bPtr->view, ButtonPressMask|ButtonReleaseMask, handleActionEvents, bPtr); + bPtr->flags.enabled = 1; + bPtr->menuView = W_CreateTopView(scr); bPtr->menuView->attribs.override_redirect = True; bPtr->menuView->attribFlags |= CWOverrideRedirect; @@ -101,8 +114,8 @@ WMCreatePopUpButton(WMWidget *parent) W_ResizeView(bPtr->menuView, bPtr->view->size.width, 1); WMCreateEventHandler(bPtr->menuView, ButtonPressMask|ButtonReleaseMask - |EnterWindowMask|LeaveWindowMask|ButtonMotionMask, - handleActionEvents, bPtr); + |EnterWindowMask|LeaveWindowMask|ButtonMotionMask + |ExposureMask, handleActionEvents, bPtr); return bPtr; } @@ -245,6 +258,15 @@ WMRemovePopUpButtonItem(WMPopUpButton *bPtr, int index) void +WMSetPopUpButtonEnabled(WMPopUpButton *bPtr, Bool flag) +{ + bPtr->flags.enabled = flag; + if (bPtr->view->flags.mapped) + paintPopUpButton(bPtr); +} + + +void WMSetPopUpButtonSelectedItem(WMPopUpButton *bPtr, int index) { ItemList *itemPtr = bPtr->items; @@ -380,10 +402,11 @@ paintPopUpButton(PopUpButton *bPtr) bPtr->view->size.height, WRRaised); if (caption) { - W_PaintText(bPtr->view, pixmap, scr->normalFont, - 6, (bPtr->view->size.height-scr->normalFont->height)/2, - bPtr->view->size.width, WALeft, W_GC(scr->black), False, - caption, strlen(caption)); + W_PaintText(bPtr->view, pixmap, scr->normalFont, 6, + (bPtr->view->size.height-WMFontHeight(scr->normalFont))/2, + bPtr->view->size.width, WALeft, + bPtr->flags.enabled ? W_GC(scr->black) : W_GC(scr->darkGray), + False, caption, strlen(caption)); } if (bPtr->flags.pullsDown) { @@ -448,7 +471,7 @@ paintMenuEntry(PopUpButton *bPtr, int index, int highlight) itemHeight = bPtr->view->size.height; width = bPtr->view->size.width; height = itemHeight * bPtr->itemCount; - yo = (itemHeight - scr->normalFont->height)/2; + yo = (itemHeight - WMFontHeight(scr->normalFont))/2; if (!highlight) { XClearArea(scr->display, bPtr->menuView->window, 0, index*itemHeight, @@ -495,7 +518,7 @@ makeMenuPixmap(PopUpButton *bPtr) itemHeight = bPtr->view->size.height; width = bPtr->view->size.width; height = itemHeight * bPtr->itemCount; - yo = (itemHeight - scr->normalFont->height)/2; + yo = (itemHeight - WMFontHeight(scr->normalFont))/2; pixmap = XCreatePixmap(scr->display, bPtr->view->window, width, height, scr->depth); @@ -595,17 +618,71 @@ itemIsEnabled(PopUpButton *bPtr, int index) { ItemList *item = bPtr->items; - while (index-- > 0) + while (index-- > 0 && item) item = item->nextPtr; - return !item->disabled; + return item ? !item->disabled : False; } + +static void +autoScroll(void *data) +{ + PopUpButton *bPtr = (PopUpButton*)data; + int scrHeight = WMWidgetScreen(bPtr)->rootView->size.height; + int repeat = 0; + int dy = 0; + + + if (bPtr->scrollStartY >= scrHeight-1 + && bPtr->menuView->pos.y+bPtr->menuView->size.height >= scrHeight-1) { + repeat = 1; + + if (bPtr->menuView->pos.y+bPtr->menuView->size.height-5 + <= scrHeight - 1) { + dy = scrHeight - 1 + - (bPtr->menuView->pos.y+bPtr->menuView->size.height); + } else + dy = -5; + + } else if (bPtr->scrollStartY <= 1 && bPtr->menuView->pos.y < 1) { + repeat = 1; + + if (bPtr->menuView->pos.y+5 > 1) + dy = 1 - bPtr->menuView->pos.y; + else + dy = 5; + } + + if (repeat) { + int oldItem; + + W_MoveView(bPtr->menuView, bPtr->menuView->pos.x, + bPtr->menuView->pos.y + dy); + + oldItem = bPtr->highlightedItem; + bPtr->highlightedItem = (bPtr->scrollStartY - bPtr->menuView->pos.y) + / bPtr->view->size.height; + + if (oldItem!=bPtr->highlightedItem) { + paintMenuEntry(bPtr, oldItem, False); + paintMenuEntry(bPtr, bPtr->highlightedItem, + itemIsEnabled(bPtr, bPtr->highlightedItem)); + } + + bPtr->timer = WMAddTimerHandler(SCROLL_DELAY, autoScroll, bPtr); + } else { + bPtr->timer = NULL; + } +} + + static void handleActionEvents(XEvent *event, void *data) { PopUpButton *bPtr = (PopUpButton*)data; int oldItem; + int scrHeight = WMWidgetScreen(bPtr)->rootView->size.height; CHECK_CLASS(data, WC_PopUpButton); @@ -614,6 +691,11 @@ handleActionEvents(XEvent *event, void *data) switch (event->type) { /* called for menuView */ + case Expose: + paintMenuEntry(bPtr, bPtr->highlightedItem, + itemIsEnabled(bPtr, bPtr->highlightedItem)); + break; + case LeaveNotify: bPtr->flags.insideMenu = 0; if (bPtr->menuView->flags.mapped) @@ -624,7 +706,7 @@ handleActionEvents(XEvent *event, void *data) case EnterNotify: bPtr->flags.insideMenu = 1; break; - + case MotionNotify: if (bPtr->flags.insideMenu) { oldItem = bPtr->highlightedItem; @@ -634,11 +716,24 @@ handleActionEvents(XEvent *event, void *data) paintMenuEntry(bPtr, bPtr->highlightedItem, itemIsEnabled(bPtr, bPtr->highlightedItem)); } + + if (event->xmotion.y_root >= scrHeight-1 + || event->xmotion.y_root <= 1) { + bPtr->scrollStartY = event->xmotion.y_root; + if (!bPtr->timer) + autoScroll(bPtr); + } else if (bPtr->timer) { + WMDeleteTimerHandler(bPtr->timer); + bPtr->timer = NULL; + } } break; /* called for bPtr->view */ case ButtonPress: + if (!bPtr->flags.enabled) + break; + popUpMenu(bPtr); if (!bPtr->flags.pullsDown) { bPtr->highlightedItem = bPtr->selectedItemIndex; @@ -657,6 +752,12 @@ handleActionEvents(XEvent *event, void *data) XUngrabPointer(bPtr->view->screen->display, event->xbutton.time); if (!bPtr->flags.pullsDown) popDownMenu(bPtr); + + if (bPtr->timer) { + WMDeleteTimerHandler(bPtr->timer); + bPtr->timer = NULL; + } + if (bPtr->flags.insideMenu && bPtr->highlightedItem>=0) { if (itemIsEnabled(bPtr, bPtr->highlightedItem)) { int i; @@ -690,6 +791,10 @@ static void destroyPopUpButton(PopUpButton *bPtr) { ItemList *itemPtr, *tmp; + + if (bPtr->timer) { + WMDeleteTimerHandler(bPtr->timer); + } itemPtr = bPtr->items; while (itemPtr!=NULL) { diff --git a/WINGs/wslider.c b/WINGs/wslider.c index 90439b74..f4ee461f 100644 --- a/WINGs/wslider.c +++ b/WINGs/wslider.c @@ -18,10 +18,13 @@ typedef struct W_Slider { int value; Pixmap knobPixmap; + WMPixmap *backPixmap; WMAction *action; void *clientData; + int knobThickness; + struct { unsigned int continuous:1; @@ -33,8 +36,6 @@ typedef struct W_Slider { -#define SLIDER_LENGTH 20 - static void resizeSlider(); @@ -54,6 +55,7 @@ static void realizeSlider(Slider *sPtr); static void handleEvents(XEvent *event, void *data); static void handleActionEvents(XEvent *event, void *data); +static void makeKnobPixmap(Slider *sPtr); static void realizeObserver(void *self, WMNotification *not) @@ -93,7 +95,9 @@ WMCreateSlider(WMWidget *parent) sPtr->minValue = 0; sPtr->maxValue = 100; sPtr->value = 50; - + + sPtr->knobThickness = 20; + sPtr->flags.continuous = 1; WMAddNotificationObserver(realizeObserver, sPtr, @@ -103,6 +107,36 @@ WMCreateSlider(WMWidget *parent) } +void +WMSetSliderImage(WMSlider *sPtr, WMPixmap *pixmap) +{ + if (sPtr->backPixmap) + WMReleasePixmap(sPtr->backPixmap); + + sPtr->backPixmap = WMRetainPixmap(pixmap); + + if (sPtr->view->flags.mapped) { + paintSlider(sPtr); + } +} + + +void +WMSetSliderKnobThickness(WMSlider *sPtr, int thickness) +{ + assert(thickness > 0); + + sPtr->knobThickness = thickness; + + if (sPtr->knobPixmap) { + makeKnobPixmap(sPtr); + } + + if (sPtr->view->flags.mapped) { + paintSlider(sPtr); + } +} + int WMGetSliderMinValue(WMSlider *slider) @@ -204,16 +238,18 @@ makeKnobPixmap(Slider *sPtr) if (sPtr->flags.vertical) { w = sPtr->view->size.width-2; - h = SLIDER_LENGTH; + h = sPtr->knobThickness; } else { - w = SLIDER_LENGTH; + w = sPtr->knobThickness; h = sPtr->view->size.height-2; } pix = XCreatePixmap(scr->display, sPtr->view->window, w, h, scr->depth); XFillRectangle(scr->display, pix, W_GC(scr->gray), 0, 0, w, h); - if (sPtr->flags.vertical) { + if (sPtr->knobThickness < 10) { + W_DrawRelief(scr, pix, 0, 0, w, h, WRRaised); + } else if (sPtr->flags.vertical) { XDrawLine(scr->display, pix, W_GC(scr->white), 0, 0, 0, h-3); XDrawLine(scr->display, pix, W_GC(scr->white), 1, 0, 1, h-3); XDrawLine(scr->display, pix, W_GC(scr->darkGray), w-2, 1, w-2, h/2-2); @@ -222,8 +258,9 @@ makeKnobPixmap(Slider *sPtr) XDrawLine(scr->display, pix, W_GC(scr->white), 0, 0, w-2, 0); XDrawLine(scr->display, pix, W_GC(scr->darkGray), 1, h/2-2, w-3, h/2-2); XDrawLine(scr->display, pix, W_GC(scr->white), 0, h/2-1, w-3, h/2-1); + XDrawLine(scr->display, pix, W_GC(scr->black), w-1, 0, w-1, h-2); - + XDrawLine(scr->display, pix, W_GC(scr->darkGray), 0, h-3, w-2, h-3); XDrawLine(scr->display, pix, W_GC(scr->black), 0, h-2, w-1, h-2); XDrawLine(scr->display, pix, W_GC(scr->darkGray), 0, h-1, w-1,h-1); @@ -231,16 +268,19 @@ makeKnobPixmap(Slider *sPtr) XDrawLine(scr->display, pix, W_GC(scr->white), 0, 0, w-3, 0); XDrawLine(scr->display, pix, W_GC(scr->white), 0, 0, 0, h-2); + XDrawLine(scr->display, pix, W_GC(scr->white), 1, 0, 1, h-3); XDrawLine(scr->display, pix, W_GC(scr->darkGray), w/2-2, 1, w/2-2, h-3); XDrawLine(scr->display, pix, W_GC(scr->white), w/2-1, 0, w/2-1, h-3); + XDrawLine(scr->display, pix, W_GC(scr->darkGray), w-3, 0, w-3, h-2); XDrawLine(scr->display, pix, W_GC(scr->black), w-2, 0, w-2, h-2); XDrawLine(scr->display, pix, W_GC(scr->darkGray), w-1, 0, w-1, h-1); - + XDrawLine(scr->display, pix, W_GC(scr->black), 1, h-1, w/2+1, h-1); XDrawLine(scr->display, pix, W_GC(scr->darkGray), 1, h-2, w/2-2, h-2); XDrawLine(scr->display, pix, W_GC(scr->darkGray), w/2, h-2, w-3,h-2); + XDrawLine(scr->display, pix, W_GC(scr->black), 0, h-1, w-2, h-1); } @@ -305,20 +345,30 @@ paintSlider(Slider *sPtr) buffer = XCreatePixmap(scr->display, sPtr->view->window, size.width, size.height, scr->depth); - XFillRectangle(scr->display, buffer, lgc, 0, 0, size.width, size.height); - XFillRectangle(scr->display, buffer, scr->stippleGC, 0, 0, size.width, - size.height); + + if (sPtr->backPixmap) { + WMSize size = WMGetPixmapSize(sPtr->backPixmap); + + XCopyArea(scr->display, WMGetPixmapXID(sPtr->backPixmap), + buffer, scr->copyGC, 0, 0, size.width, size.height, 1, 1); + } else { + XFillRectangle(scr->display, buffer, lgc, 0, 0, size.width, + size.height); + XFillRectangle(scr->display, buffer, scr->stippleGC, 0, 0, size.width, + size.height); + } if (sPtr->flags.vertical) { - pos = (size.height-2-SLIDER_LENGTH)*(POSV-MINV)/(MAXV-MINV)+1; + pos = (size.height-2-sPtr->knobThickness)*(POSV-MINV)/(MAXV-MINV)+1; /* draw knob */ XCopyArea(scr->display, sPtr->knobPixmap, buffer, - scr->copyGC, 0, 0, size.width-2, SLIDER_LENGTH, 1, pos); + scr->copyGC, 0, 0, size.width-2, sPtr->knobThickness, + 1, pos); } else { - pos = (size.width-2-SLIDER_LENGTH)*(POSV-MINV)/(MAXV-MINV)+1; + pos = (size.width-2-sPtr->knobThickness)*(POSV-MINV)/(MAXV-MINV)+1; /* draw knob */ XCopyArea(scr->display, sPtr->knobPixmap, buffer, - scr->copyGC, 0, 0, SLIDER_LENGTH, size.height, pos, 1); + scr->copyGC, 0, 0, sPtr->knobThickness, size.height, pos, 1); } XDrawLine(scr->display, buffer, bgc, 0, 0, 0, size.height-1); @@ -373,18 +423,18 @@ getSliderPart(Slider *sPtr, int x, int y) if (sPtr->flags.vertical) { p = y; - pos = (size.height-2-SLIDER_LENGTH)*(POSV-MINV)/(MAXV-MINV); + pos = (size.height-2-sPtr->knobThickness)*(POSV-MINV)/(MAXV-MINV); if (p < pos) return INCR_PART; - if (p > pos + SLIDER_LENGTH) + if (p > pos + sPtr->knobThickness) return DECR_PART; return KNOB_PART; } else { p = x; - pos = (size.width-2-SLIDER_LENGTH)*(POSV-MINV)/(MAXV-MINV); + pos = (size.width-2-sPtr->knobThickness)*(POSV-MINV)/(MAXV-MINV); if (p < pos) return DECR_PART; - if (p > pos + SLIDER_LENGTH) + if (p > pos + sPtr->knobThickness) return INCR_PART; return KNOB_PART; } @@ -396,11 +446,13 @@ valueForMousePoint(Slider *sPtr, int x, int y) { WMSize size = sPtr->view->size; int f; - + if (sPtr->flags.vertical) { - f = (y-SLIDER_LENGTH/2)*(MAXV-MINV)/((int)size.height-2-SLIDER_LENGTH); + f = (y-sPtr->knobThickness/2)*(MAXV-MINV) + / ((int)size.height-2-sPtr->knobThickness); } else { - f = (x-SLIDER_LENGTH/2)*(MAXV-MINV)/((int)size.width-2-SLIDER_LENGTH); + f = (x-sPtr->knobThickness/2)*(MAXV-MINV) + / ((int)size.width-2-sPtr->knobThickness); } f += sPtr->minValue; @@ -408,6 +460,7 @@ valueForMousePoint(Slider *sPtr, int x, int y) f = sPtr->minValue; else if (f > sPtr->maxValue) f = sPtr->maxValue; + return f; } @@ -427,13 +480,13 @@ handleActionEvents(XEvent *event, void *data) else { #ifdef STRICT_NEXT_BEHAVIOUR sPtr->flags.dragging = 1; - + sPtr->value = valueForMousePoint(sPtr, event->xmotion.x, event->xmotion.y); paintSlider(sPtr); #else int tmp; - + tmp = valueForMousePoint(sPtr, event->xmotion.x, event->xmotion.y); if (tmp < sPtr->value) tmp = sPtr->value-1; @@ -447,14 +500,14 @@ handleActionEvents(XEvent *event, void *data) } } break; - + case ButtonRelease: if (!sPtr->flags.continuous && sPtr->flags.dragging && sPtr->action) { (*sPtr->action)(sPtr, sPtr->clientData); } sPtr->flags.dragging = 0; break; - + case MotionNotify: if (sPtr->flags.dragging) { sPtr->value = valueForMousePoint(sPtr, event->xmotion.x, @@ -476,7 +529,10 @@ destroySlider(Slider *sPtr) { if (sPtr->knobPixmap) XFreePixmap(sPtr->view->screen->display, sPtr->knobPixmap); - + + if (sPtr->backPixmap) + WMReleasePixmap(sPtr->backPixmap); + free(sPtr); } diff --git a/WINGs/wtest.c b/WINGs/wtest.c index a466c621..d79a1a83 100644 --- a/WINGs/wtest.c +++ b/WINGs/wtest.c @@ -273,41 +273,18 @@ testSlider(WMScreen *scr) s = WMCreateSlider(win); WMResizeWidget(s, 16, 100); WMMoveWidget(s, 100, 100); + WMSetSliderKnobThickness(s, 8); s = WMCreateSlider(win); WMResizeWidget(s, 100, 16); WMMoveWidget(s, 100, 10); + WMSetSliderKnobThickness(s, 8); WMRealizeWidget(win); WMMapSubwidgets(win); WMMapWidget(win); } -#if 0 -void -testText(WMScreen *scr) -{ - WMWindow *win; - WMSimpleText *text; - - windowCount++; - - win = WMCreateWindow(scr, "testText"); - WMResizeWidget(win, 300, 300); - WMSetWindowTitle(win, "Text"); - - WMSetWindowCloseAction(win, closeAction, NULL); - - text = WMCreateSimpleText(win); - WMResizeWidget(text, 280, 280); - WMMoveWidget(text, 10, 10); - - WMRealizeWidget(win); - WMMapSubwidgets(win); - WMMapWidget(win); -} -#endif - void testTextField(WMScreen *scr) { @@ -424,13 +401,15 @@ int main(int argc, char **argv) * * Put the testSomething() function you want to test here. */ -#if 1 +#if 0 testOpenFilePanel(scr); testFontPanel(scr); testList(scr); testGradientButtons(scr); testScrollView(scr); +#endif testColorWell(scr); +#if 1 testSlider(scr); testTextField(scr); testPullDown(scr); diff --git a/WINGs/wtextfield.c b/WINGs/wtextfield.c index 5ececb23..2821e2e3 100644 --- a/WINGs/wtextfield.c +++ b/WINGs/wtextfield.c @@ -36,6 +36,8 @@ typedef struct W_TextField { short usableWidth; short offsetWidth; /* offset of text from border */ + WMRange selection; + #if 0 WMHandlerID timerID; /* for cursor blinking */ #endif @@ -191,7 +193,7 @@ WMCreateTextField(WMWidget *parent) WMSetTextFieldBordered(tPtr, DEFAULT_BORDERED); tPtr->flags.alignment = DEFAULT_ALIGNMENT; tPtr->offsetWidth = (tPtr->view->size.height - - tPtr->view->screen->normalFont->height)/2; + - WMFontHeight(tPtr->view->screen->normalFont))/2; WMCreateEventHandler(tPtr->view, EnterWindowMask|LeaveWindowMask |ButtonPressMask|KeyPressMask|Button1MotionMask, @@ -307,8 +309,12 @@ WMSetTextFieldText(WMTextField *tPtr, char *text) } strcpy(tPtr->text, text); } + /* if (tPtr->textLen < tPtr->cursorPosition) tPtr->cursorPosition = tPtr->textLen; + */ + tPtr->cursorPosition = 0; + tPtr->viewPosition = 0; if (tPtr->view->flags.realized) paintTextField(tPtr); @@ -370,7 +376,7 @@ resizeTextField(WMTextField *tPtr, unsigned int width, unsigned int height) W_ResizeView(tPtr->view, width, height); tPtr->offsetWidth = (tPtr->view->size.height - - tPtr->view->screen->normalFont->height)/2; + - WMFontHeight(tPtr->view->screen->normalFont))/2; tPtr->usableWidth = tPtr->view->size.width - 2*tPtr->offsetWidth; } @@ -477,7 +483,7 @@ paintTextField(TextField *tPtr) &(tPtr->text[tPtr->viewPosition]), tPtr->textLen - tPtr->viewPosition); - th = screen->normalFont->height; + th = WMFontHeight(screen->normalFont); ty = tPtr->offsetWidth; switch (tPtr->flags.alignment) { diff --git a/WINGs/wview.c b/WINGs/wview.c index 4d1956af..8b7e5b3b 100644 --- a/WINGs/wview.c +++ b/WINGs/wview.c @@ -144,8 +144,9 @@ createView(W_Screen *screen, W_View *parent) view->attribFlags = CWEventMask|CWBitGravity; view->attribs = defAtts; - view->attribFlags |= CWBackPixel|CWColormap; + view->attribFlags |= CWBackPixel|CWColormap|CWBorderPixel; view->attribs.background_pixel = W_PIXEL(screen->gray); + view->attribs.border_pixel = W_PIXEL(screen->black); view->attribs.colormap = screen->colormap; adoptChildView(parent, view); diff --git a/WPrefs.app/Appearance.c b/WPrefs.app/Appearance.c new file mode 100644 index 00000000..13a310d7 --- /dev/null +++ b/WPrefs.app/Appearance.c @@ -0,0 +1,236 @@ +/* TextureAndColor.c- color/texture for titlebar etc. + * + * WPrefs - Window Maker Preferences Program + * + * Copyright (c) 1999 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + + +#include "WPrefs.h" + +#include "TexturePanel.h" + +typedef struct _Panel { + WMFrame *frame; + char *sectionName; + + CallbackRec callbacks; + + WMWindow *win; + + WMLabel *prevL; + + WMPopUpButton *secP; + + /* texture list */ + WMLabel *texL; + WMList *texLs; + + WMPopUpButton *cmdP; + WMTextField *texT; + + WMButton *editB; + + /* for preview shit */ + Pixmap preview; + Pixmap ftitle; + Pixmap utitle; + Pixmap otitle; + Pixmap icon; + Pixmap back; + Pixmap mtitle; + Pixmap mitem; +} _Panel; + + + + +#define ICON_FILE "appearance" + + +#define FTITLE (1<<0) +#define UTITLE (1<<1) +#define OTITLE (1<<2) +#define ICON (1<<3) +#define BACK (1<<4) +#define MTITLE (1<<5) +#define MITEM (1<<6) +#define EVERYTHING 0xff + + +static Pixmap +renderTexture(_Panel *panel, char *texture, int width, int height, + Bool bordered) +{ + return None; +} + + +static void +updatePreviewBox(_Panel *panel, int elements) +{ + WMScreen *scr = WMWidgetScreen(panel->win); + Display *dpy = WMScreenDisplay(scr); + /* RContext *rc = WMScreenRContext(scr);*/ + int refresh = 0; + char *tmp; + + if (!panel->preview) { + panel->preview = XCreatePixmap(dpy, WMWidgetXID(panel->win), + 220-4, 185-4, WMScreenDepth(scr)); + + refresh = -1; + } + + if (elements & FTITLE) { + if (panel->ftitle) + XFreePixmap(dpy, panel->ftitle); + + panel->ftitle = renderTexture(panel, tmp, 180, 20, True); + free(tmp); + } + + /* have to repaint everything to make things simple, eliminating + * clipping stuff */ + if (refresh) { + + } + + if (refresh<0) { + WMPixmap *pix; + pix = WMCreatePixmapFromXPixmaps(scr, panel->preview, None, + 220-4, 185-4, WMScreenDepth(scr)); + + WMSetLabelImage(panel->prevL, pix); + WMReleasePixmap(pix); + } +} + + + +static char* +getStrArrayForKey(char *key) +{ + proplist_t v; + + v = GetObjectForKey(key); + if (!v) + return NULL; + + return PLGetDescription(v); +} + + +static void +createPanel(Panel *p) +{ + _Panel *panel = (_Panel*)p; + WMColor *color; + WMFont *boldFont; + WMScreen *scr = WMWidgetScreen(panel->win); + + panel->frame = WMCreateFrame(panel->win); + WMResizeWidget(panel->frame, FRAME_WIDTH, FRAME_HEIGHT); + WMMoveWidget(panel->frame, FRAME_LEFT, FRAME_TOP); + + /* preview box */ + panel->prevL = WMCreateLabel(panel->frame); + WMResizeWidget(panel->prevL, 260, 190); + WMMoveWidget(panel->prevL, 10, 10); + WMSetLabelRelief(panel->prevL, WRSunken); + + panel->secP = WMCreatePopUpButton(panel->frame); + WMResizeWidget(panel->secP, 242, 20); + WMMoveWidget(panel->secP, 10, 207); +// WMSetPopUpButtonAction(panel->secP, changePage, panel); + + + /* texture list */ + boldFont = WMBoldSystemFontOfSize(scr, 12); + + panel->texL = WMCreateLabel(panel->frame); + WMResizeWidget(panel->texL, 225, 18); + WMMoveWidget(panel->texL, 285, 10); + WMSetLabelFont(panel->texL, boldFont); + WMSetLabelText(panel->texL, _("Textures")); + WMSetLabelRelief(panel->texL, WRSunken); + WMSetLabelTextAlignment(panel->texL, WACenter); + color = WMDarkGrayColor(scr); + WMSetWidgetBackgroundColor(panel->texL, color); + WMReleaseColor(color); + color = WMWhiteColor(scr); + WMSetLabelTextColor(panel->texL, color); + WMReleaseColor(color); + + WMReleaseFont(boldFont); + + + panel->texLs = WMCreateList(panel->frame); + WMResizeWidget(panel->texLs, 225, 144); + WMMoveWidget(panel->texLs, 285, 30); + + panel->cmdP = WMCreatePopUpButton(panel->frame); + WMResizeWidget(panel->cmdP, 225, 20); + WMMoveWidget(panel->cmdP, 285, 180); + WMSetPopUpButtonPullsDown(panel->cmdP, True); + WMSetPopUpButtonText(panel->cmdP, _("Texture Commands")); + WMAddPopUpButtonItem(panel->cmdP, _("Create New")); + WMAddPopUpButtonItem(panel->cmdP, _("Add From Text Field")); + WMAddPopUpButtonItem(panel->cmdP, _("Remove Selected")); + WMAddPopUpButtonItem(panel->cmdP, _("Extract From File")); + + panel->editB = WMCreateCommandButton(panel->frame); + WMResizeWidget(panel->editB, 64, 20); + WMMoveWidget(panel->editB, 260, 207); + WMSetButtonText(panel->editB, _("Browse...")); + + panel->texT = WMCreateTextField(panel->frame); + WMResizeWidget(panel->texT, 176, 20); + WMMoveWidget(panel->texT, 330, 207); + + /**/ + + WMRealizeWidget(panel->frame); + WMMapSubwidgets(panel->frame); + + WMSetPopUpButtonSelectedItem(panel->secP, 0); + + + +} + + + +Panel* +InitAppearance(WMScreen *scr, WMWindow *win) +{ + _Panel *panel; + + panel = wmalloc(sizeof(_Panel)); + memset(panel, 0, sizeof(_Panel)); + + panel->sectionName = _("Appearance Preferences"); + + panel->win = win; + + panel->callbacks.createWidgets = createPanel; + + AddSection(panel, ICON_FILE); + + return panel; +} diff --git a/WPrefs.app/Focus.c b/WPrefs.app/Focus.c index dc51450d..e81093b7 100644 --- a/WPrefs.app/Focus.c +++ b/WPrefs.app/Focus.c @@ -355,7 +355,7 @@ createPanel(Panel *p) panel->ignB = WMCreateSwitchButton(panel->optF); WMResizeWidget(panel->ignB, 210, 50); WMMoveWidget(panel->ignB, 15, 10); - WMSetButtonText(panel->ignB, _("Do not let aplications receive the "\ + WMSetButtonText(panel->ignB, _("Do not let applications receive the "\ "click used to focus windows.")); panel->newB = WMCreateSwitchButton(panel->optF); diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c index e3756b6e..78b90fe8 100644 --- a/WPrefs.app/KeyboardShortcuts.c +++ b/WPrefs.app/KeyboardShortcuts.c @@ -45,7 +45,11 @@ typedef struct _Panel { WMButton *defB; WMLabel *instructionsL; - + + WMColor *white; + WMColor *black; + WMFont *font; + /**/ char capturing; char **shortcuts; @@ -71,6 +75,7 @@ static char *keyOptions[] = { "LowerKey", "RaiseLowerKey", "ShadeKey", + "MoveResizeKey", "SelectKey", "FocusNextKey", "FocusPrevKey", @@ -92,6 +97,14 @@ static char *keyOptions[] = { "WindowShortcut2Key", "WindowShortcut3Key", "WindowShortcut4Key", +#ifdef EXTEND_WINDOWSHORTCUT + "WindowShortcut5Key", + "WindowShortcut6Key", + "WindowShortcut7Key", + "WindowShortcut8Key", + "WindowShortcut9Key", + "WindowShortcut10Key", +#endif "ClipRaiseKey", "ClipLowerKey", #ifndef XKB_MODELOCK @@ -180,6 +193,8 @@ captureClick(WMWidget *w, void *data) if (panel->shortcuts[row]) free(panel->shortcuts[row]); panel->shortcuts[row] = shortcut; + + WMRedisplayWidget(panel->actLs); } else { free(shortcut); } @@ -205,6 +220,7 @@ clearShortcut(WMWidget *w, void *data) if (panel->shortcuts[row]) free(panel->shortcuts[row]); panel->shortcuts[row]=NULL; + WMRedisplayWidget(panel->actLs); } } @@ -226,6 +242,7 @@ typedKeys(void *observerData, WMNotification *notification) free(panel->shortcuts[row]); panel->shortcuts[row] = NULL; } + WMRedisplayWidget(panel->actLs); } @@ -281,6 +298,40 @@ showData(_Panel *panel) panel->shortcuts[i] = NULL; } } + WMRedisplayWidget(panel->actLs); +} + + +static void +paintItem(WMList *lPtr, int index, Drawable d, char *text, int state, + WMRect *rect) +{ + int width, height, x, y; + _Panel *panel = (_Panel*)WMGetHangedData(lPtr); + WMScreen *scr = WMWidgetScreen(lPtr); + Display *dpy = WMScreenDisplay(scr); + + width = rect->size.width; + height = rect->size.height; + x = rect->pos.x; + y = rect->pos.y; + + if (state & WLDSSelected) + XFillRectangle(dpy, d, WMColorGC(panel->white), x, y, width, + height); + else + XClearArea(dpy, d, x, y, width, height, False); + + if (panel->shortcuts[index]) { + WMPixmap *pix = WMGetSystemPixmap(scr, WSICheckMark); + WMSize size = WMGetPixmapSize(pix); + + WMDrawPixmap(pix, d, x+(20-size.width)/2, (height-size.height)/2+y); + WMReleasePixmap(pix); + } + + WMDrawString(scr, d, WMColorGC(panel->black), panel->font, x+20, y, + text, strlen(text)); } @@ -318,6 +369,8 @@ createPanel(Panel *p) panel->actLs = WMCreateList(panel->frame); WMResizeWidget(panel->actLs, 280, 190); WMMoveWidget(panel->actLs, 20, 32); + WMSetListUserDrawProc(panel->actLs, paintItem); + WMHangData(panel->actLs, panel); WMAddListItem(panel->actLs, _("Open applications menu")); WMAddListItem(panel->actLs, _("Open window list menu")); @@ -332,6 +385,7 @@ createPanel(Panel *p) WMAddListItem(panel->actLs, _("Raise/Lower window under mouse pointer")); WMAddListItem(panel->actLs, _("Shade active window")); WMAddListItem(panel->actLs, _("Select active window")); + WMAddListItem(panel->actLs, _("Move/Resize active window")); WMAddListItem(panel->actLs, _("Focus next window")); WMAddListItem(panel->actLs, _("Focus previous window")); WMAddListItem(panel->actLs, _("Switch to next workspace")); @@ -448,7 +502,11 @@ InitKeyboardShortcuts(WMScreen *scr, WMWindow *win) panel->callbacks.createWidgets = createPanel; panel->callbacks.updateDomain = storeData; - + + panel->white = WMWhiteColor(scr); + panel->black = WMBlackColor(scr); + panel->font = WMSystemFontOfSize(scr, 12); + AddSection(panel, ICON_FILE); return panel; diff --git a/WPrefs.app/Makefile.am b/WPrefs.app/Makefile.am index 8e9b0162..19fe77d0 100644 --- a/WPrefs.app/Makefile.am +++ b/WPrefs.app/Makefile.am @@ -18,6 +18,7 @@ WPrefs_SOURCES = \ main.c \ WPrefs.c \ WPrefs.h \ + Appearance.c \ Configurations.c \ Expert.c \ Focus.c \ @@ -33,6 +34,7 @@ WPrefs_SOURCES = \ TextureAndColor.c \ TexturePanel.c \ TexturePanel.h \ + Themes.c \ WindowHandling.c \ Workspace.c \ double.c \ @@ -56,8 +58,8 @@ WPrefs_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a WPrefs_LDADD = \ $(top_builddir)/WINGs/libWINGs.a\ - $(top_builddir)/wrlib/libwraster.a \ - $(top_builddir)/libPropList/libPropList.a \ + $(top_builddir)/wrlib/libwraster.la \ + $(top_builddir)/libPropList/libPropList.la \ @GFXLFLAGS@ \ @XLFLAGS@ \ @GFXLIBS@ \ diff --git a/WPrefs.app/Makefile.in b/WPrefs.app/Makefile.in index 5e8f3d5b..5bc453dd 100644 --- a/WPrefs.app/Makefile.in +++ b/WPrefs.app/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -110,6 +113,7 @@ WPrefs_SOURCES = \ main.c \ WPrefs.c \ WPrefs.h \ + Appearance.c \ Configurations.c \ Expert.c \ Focus.c \ @@ -125,6 +129,7 @@ WPrefs_SOURCES = \ TextureAndColor.c \ TexturePanel.c \ TexturePanel.h \ + Themes.c \ WindowHandling.c \ Workspace.c \ double.c \ @@ -147,8 +152,8 @@ WPrefs_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a WPrefs_LDADD = \ $(top_builddir)/WINGs/libWINGs.a\ - $(top_builddir)/wrlib/libwraster.a \ - $(top_builddir)/libPropList/libPropList.a \ + $(top_builddir)/wrlib/libwraster.la \ + $(top_builddir)/libPropList/libPropList.la \ @GFXLFLAGS@ \ @XLFLAGS@ \ @GFXLIBS@ \ @@ -168,15 +173,16 @@ LIBS = @LIBS@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ -WPrefs_OBJECTS = main.o WPrefs.o Configurations.o Expert.o Focus.o \ -Icons.o KeyboardSettings.o KeyboardShortcuts.o Menu.o MenuPreferences.o \ -MouseSettings.o Paths.o Preferences.o Text.o TextureAndColor.o \ -TexturePanel.o WindowHandling.o Workspace.o double.o MenuGuru.o \ -xmodifier.o +WPrefs_OBJECTS = main.o WPrefs.o Appearance.o Configurations.o Expert.o \ +Focus.o Icons.o KeyboardSettings.o KeyboardShortcuts.o Menu.o \ +MenuPreferences.o MouseSettings.o Paths.o Preferences.o Text.o \ +TextureAndColor.o TexturePanel.o Themes.o WindowHandling.o Workspace.o \ +double.o MenuGuru.o xmodifier.o WPrefs_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ DATA = $(wpdata_DATA) DIST_COMMON = README Makefile.am Makefile.in @@ -192,7 +198,7 @@ OBJECTS = $(WPrefs_OBJECTS) all: all-recursive all-am .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu WPrefs.app/Makefile @@ -215,8 +221,8 @@ install-wpexecbinPROGRAMS: $(wpexecbin_PROGRAMS) $(mkinstalldirs) $(DESTDIR)$(wpexecbindir) @list='$(wpexecbin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ - echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(wpexecbindir)/`echo $$p|sed '$(transform)'`"; \ - $(INSTALL_PROGRAM) $$p $(DESTDIR)$(wpexecbindir)/`echo $$p|sed '$(transform)'`; \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(wpexecbindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(wpexecbindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; \ done @@ -245,6 +251,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + WPrefs: $(WPrefs_OBJECTS) $(WPrefs_DEPENDENCIES) @rm -f WPrefs $(LINK) $(WPrefs_LDFLAGS) $(WPrefs_OBJECTS) $(WPrefs_LDADD) $(LIBS) @@ -397,17 +422,20 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean-am: mostlyclean-wpexecbinPROGRAMS mostlyclean-compile \ - mostlyclean-tags mostlyclean-generic + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic -clean-am: clean-wpexecbinPROGRAMS clean-compile clean-tags \ - clean-generic mostlyclean-am +clean-am: clean-wpexecbinPROGRAMS clean-compile clean-libtool \ + clean-tags clean-generic mostlyclean-am distclean-am: distclean-wpexecbinPROGRAMS distclean-compile \ - distclean-tags distclean-generic clean-am + distclean-libtool distclean-tags distclean-generic \ + clean-am maintainer-clean-am: maintainer-clean-wpexecbinPROGRAMS \ - maintainer-clean-compile maintainer-clean-tags \ - maintainer-clean-generic distclean-am + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean-am mostlyclean: mostlyclean-recursive mostlyclean-am @@ -415,6 +443,7 @@ clean: clean-recursive clean-am distclean: distclean-recursive distclean-am -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-recursive maintainer-clean-am @echo "This command is intended for maintainers to use;" @@ -424,11 +453,13 @@ maintainer-clean: maintainer-clean-recursive maintainer-clean-am clean-wpexecbinPROGRAMS maintainer-clean-wpexecbinPROGRAMS \ uninstall-wpexecbinPROGRAMS install-wpexecbinPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile uninstall-wpdataDATA install-wpdataDATA \ -install-data-recursive uninstall-data-recursive install-exec-recursive \ -uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ -all-recursive check-recursive installcheck-recursive info-recursive \ -dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool uninstall-wpdataDATA \ +install-wpdataDATA install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ installcheck all-am install-exec-am install-data-am uninstall-am \ diff --git a/WPrefs.app/Menu.c b/WPrefs.app/Menu.c index bfb02412..62af329d 100644 --- a/WPrefs.app/Menu.c +++ b/WPrefs.app/Menu.c @@ -546,15 +546,24 @@ browserClick(WMWidget *w, void *data) if (isMenu(item)) { updateForItemType(panel, TNothing); + + WMSetPopUpButtonEnabled(panel->cmd2P, True); return; - } + } else { + int column = WMGetBrowserSelectedColumn(panel->browser); + + if (column == WMGetBrowserNumberOfColumns(panel->browser)-1 + && column > 0) + WMSetPopUpButtonEnabled(panel->cmd2P, True); + else + WMSetPopUpButtonEnabled(panel->cmd2P, False); - if (WMGetBrowserSelectedColumn(panel->browser)== - WMGetBrowserFirstVisibleColumn(panel->browser)) { - /* second column is empty, because selected item is not a submenu */ - WMSetTextFieldText(panel->tit2T, NULL); + if (column==WMGetBrowserFirstVisibleColumn(panel->browser)) { + /* second column is empty, because selected item is not a submenu */ + WMSetTextFieldText(panel->tit2T, NULL); + } } - + command = getItemCommand(item); WMSetTextFieldText(panel->shoT, getItemShortcut(item)); diff --git a/WPrefs.app/MouseSettings.c b/WPrefs.app/MouseSettings.c index 115a71ce..ffc8504d 100644 --- a/WPrefs.app/MouseSettings.c +++ b/WPrefs.app/MouseSettings.c @@ -633,8 +633,8 @@ createPanel(Panel *p) WMSetFrameTitle(panel->menuF, _("Workspace Mouse Actions")); panel->disaB = WMCreateSwitchButton(panel->menuF); - WMResizeWidget(panel->disaB, 185, 19); - WMMoveWidget(panel->disaB, 20, 20); + WMResizeWidget(panel->disaB, 205, 18); + WMMoveWidget(panel->disaB, 10, 20); WMSetButtonText(panel->disaB, _("Disable mouse actions")); panel->mblL = WMCreateLabel(panel->menuF); diff --git a/WPrefs.app/Paths.c b/WPrefs.app/Paths.c index 9878172d..88e9fee7 100644 --- a/WPrefs.app/Paths.c +++ b/WPrefs.app/Paths.c @@ -223,7 +223,8 @@ listClick(WMWidget *w, void *data) static void -paintItem(WMList *lPtr, Drawable d, char *text, int state, WMRect *rect) +paintItem(WMList *lPtr, int index, Drawable d, char *text, int state, + WMRect *rect) { int width, height, x, y; _Panel *panel = (_Panel*)WMGetHangedData(lPtr); diff --git a/WPrefs.app/README b/WPrefs.app/README index 06a19544..0aa844e0 100644 --- a/WPrefs.app/README +++ b/WPrefs.app/README @@ -33,6 +33,17 @@ the contents of the ~/GNUstep/Defaults directory before using it. +License +------- + + Like Window Maker, WPrefs is distributed with through the General Public +License (as stated in the file COPYING). As an exception, the icons and +original graphical artwork included with WPrefs has the additional +restriction that they must not be redistributed without the rest of the +Window Maker distribution. In other words, you can use and distribute the +WPrefs icons freely, as long as they are distributed for use with Window +Maker (ripping the icons and putting them in your program is prohibited). + Notes ----- diff --git a/WPrefs.app/TexturePanel.c b/WPrefs.app/TexturePanel.c index 95af43f7..1f6c049c 100644 --- a/WPrefs.app/TexturePanel.c +++ b/WPrefs.app/TexturePanel.c @@ -114,7 +114,7 @@ char *WMGetColorWellRGBString(WMColorWell *cPtr) { */ static void buttonCallback(WMWidget *self, void *data); static void renderTextureButtons (_TexturePanel *panel); -static void paintListItem(WMList *lPtr, Drawable d, char *text, int state, WMRect *rect); +static void paintListItem(WMList *lPtr, int index, Drawable d, char *text, int state, WMRect *rect); static void notificationObserver(void *self, WMNotification *notif); static void @@ -139,7 +139,7 @@ notificationObserver(void *self, WMNotification *notif) static void -paintListItem(WMList *lPtr, Drawable d, char *text, int state, WMRect *rect) +paintListItem(WMList *lPtr, int index, Drawable d, char *text, int state, WMRect *rect) { WMScreen *scr; int width, height, x, y; diff --git a/WPrefs.app/Themes.c b/WPrefs.app/Themes.c new file mode 100644 index 00000000..a860d820 --- /dev/null +++ b/WPrefs.app/Themes.c @@ -0,0 +1,262 @@ +/* Themes.c- Theme stuff + * + * WPrefs - Window Maker Preferences Program + * + * Copyright (c) 1998 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + + +#include "WPrefs.h" + +#include + +typedef struct _Panel { + WMFrame *frame; + + char *sectionName; + + CallbackRec callbacks; + + WMWindow *win; + + WMButton *saveB; + WMList *list; + WMButton *loadB; + WMButton *instB; + + WMFrame *totF; + WMButton *totB; + WMLabel *totL; + + WMFrame *botF; + WMButton *botB; + WMLabel *botL; + + pid_t tilePID; + pid_t barPID; +} _Panel; + + + +#define ICON_FILE "theme" + + +static void +showData(_Panel *panel) +{ + +} + + +static void +finishedTileDownload(void *data) +{ + _Panel *panel = (_Panel*)data; + + WMSetButtonText(panel->totB, _("Set")); + panel->tilePID = 0; +} + + + +static void +finishedBarDownload(void *data) +{ + _Panel *panel = (_Panel*)data; + + WMSetButtonText(panel->botB, _("Set")); + panel->barPID = 0; +} + + +static pid_t +downloadFile(WMScreen *scr, _Panel *panel, char *file) +{ + pid_t pid; + + pid = fork(); + if (pid < 0) { + wsyserror("could not fork() process"); + + WMRunAlertPanel(scr, panel->win, _("Error"), + "Could not start download. fork() failed", + _("OK"), NULL, NULL); + return -1; + } + if (pid != 0) { + return pid; + } + + close(ConnectionNumber(WMScreenDisplay(scr))); + + + + exit(1); +} + + +static void +downloadCallback(WMWidget *w, void *data) +{ + _Panel *panel = (_Panel*)data; + pid_t newPid; + WMButton *button = (WMButton*)w; + pid_t *pid; + + if (button == panel->totB) { + pid = &panel->tilePID; + } else { + pid = &panel->barPID; + } + + if (*pid == 0) { + newPid = downloadFile(WMWidgetScreen(w), panel, NULL); + if (newPid < 0) { + return; + } + WMSetButtonText(button, _("Stop")); + + if (button == panel->totB) { + AddDeadChildHandler(newPid, finishedTileDownload, data); + } else { + AddDeadChildHandler(newPid, finishedBarDownload, data); + } + *pid = newPid; + } else { + *pid = 0; + + WMSetButtonText(button, _("Download")); + } +} + + + +static void +updateThemeList(_Panel *panel) +{ + WMClearList(panel->list); + + + +} + + + +static void +createPanel(Panel *p) +{ + _Panel *panel = (_Panel*)p; + WMScreen *scr = WMWidgetScreen(panel->win); + + panel->frame = WMCreateFrame(panel->win); + WMResizeWidget(panel->frame, FRAME_WIDTH, FRAME_HEIGHT); + WMMoveWidget(panel->frame, FRAME_LEFT, FRAME_TOP); + + panel->saveB = WMCreateCommandButton(panel->frame); + WMResizeWidget(panel->saveB, 154, 24); + WMMoveWidget(panel->saveB, 15, 10); + WMSetButtonText(panel->saveB, _("Save Current Theme")); + + panel->list = WMCreateList(panel->frame); + WMResizeWidget(panel->list, 154, 150); + WMMoveWidget(panel->list, 15, 40); + + panel->loadB = WMCreateCommandButton(panel->frame); + WMResizeWidget(panel->loadB, 74, 24); + WMMoveWidget(panel->loadB, 15, 200); + WMSetButtonText(panel->loadB, _("Load")); + + panel->instB = WMCreateCommandButton(panel->frame); + WMResizeWidget(panel->instB, 74, 24); + WMMoveWidget(panel->instB, 95, 200); + WMSetButtonText(panel->instB, _("Install")); + + + /**************** Tile of the day ****************/ + + panel->totF = WMCreateFrame(panel->frame); + WMResizeWidget(panel->totF, 210, 105); + WMMoveWidget(panel->totF, 240, 10); + WMSetFrameTitle(panel->totF, _("Tile of The Day")); + + panel->totL = WMCreateLabel(panel->totF); + WMResizeWidget(panel->totL, 67, 67); + WMMoveWidget(panel->totL, 25, 25); + WMSetLabelRelief(panel->totL, WRSunken); + + panel->totB = WMCreateCommandButton(panel->totF); + WMResizeWidget(panel->totB, 86, 24); + WMMoveWidget(panel->totB, 105, 45); + WMSetButtonText(panel->totB, _("Download")); + WMSetButtonAction(panel->totB, downloadCallback, panel); + + WMMapSubwidgets(panel->totF); + + /**************** Bar of the day ****************/ + + panel->botF = WMCreateFrame(panel->frame); + WMResizeWidget(panel->botF, 315, 95); + WMMoveWidget(panel->botF, 190, 125); + WMSetFrameTitle(panel->botF, _("Bar of The Day")); + + panel->botL = WMCreateLabel(panel->botF); + WMResizeWidget(panel->botL, 285, 32); + WMMoveWidget(panel->botL, 15, 20); + WMSetLabelRelief(panel->botL, WRSunken); + + panel->botB = WMCreateCommandButton(panel->botF); + WMResizeWidget(panel->botB, 86, 24); + WMMoveWidget(panel->botB, 110, 60); + WMSetButtonText(panel->botB, _("Download")); + WMSetButtonAction(panel->botB, downloadCallback, panel); + + WMMapSubwidgets(panel->botF); + + WMRealizeWidget(panel->frame); + WMMapSubwidgets(panel->frame); + + showData(panel); +} + + +static void +storeData(_Panel *panel) +{ +} + + + +Panel* +InitThemes(WMScreen *scr, WMWindow *win) +{ + _Panel *panel; + + panel = wmalloc(sizeof(_Panel)); + memset(panel, 0, sizeof(_Panel)); + + panel->sectionName = _("Themes"); + + panel->win = win; + + panel->callbacks.createWidgets = createPanel; + panel->callbacks.updateDomain = storeData; + + AddSection(panel, ICON_FILE); + + return panel; +} diff --git a/WPrefs.app/WPrefs.c b/WPrefs.app/WPrefs.c index 553218be..68aa269b 100644 --- a/WPrefs.app/WPrefs.c +++ b/WPrefs.app/WPrefs.c @@ -39,8 +39,6 @@ extern Panel *InitFocus(WMScreen *scr, WMWindow *win); extern Panel *InitPreferences(WMScreen *scr, WMWindow *win); -extern Panel *InitTextureAndColor(WMScreen *scr, WMWindow *win); - extern Panel *InitText(WMScreen *scr, WMWindow *win); extern Panel *InitConfigurations(WMScreen *scr, WMWindow *win); @@ -55,6 +53,13 @@ extern Panel *InitMenuPreferences(WMScreen *scr, WMWindow *win); extern Panel *InitIcons(WMScreen *scr, WMWindow *win); +extern Panel *InitThemes(WMScreen *scr, WMWindow *win); + +extern Panel *InitTextureAndColor(WMScreen *scr, WMWindow *win); + +extern Panel *InitAppearance(WMScreen *scr, WMWindow *win); + + #define MAX_SECTIONS 16 @@ -506,15 +511,21 @@ Initialize(WMScreen *scr) #endif InitKeyboardShortcuts(scr, WPrefs.win); InitMouseSettings(scr, WPrefs.win); + #ifdef not_yet_fully_implemented - InitTextureAndColor(scr, WPrefs.win); + InitAppearance(scr, WPrefs.win); InitText(scr, WPrefs.win); + InitThemes(scr, WPrefs.win); #endif InitExpert(scr, WPrefs.win); WMRealizeWidget(WPrefs.scrollV); - WMSetLabelText(WPrefs.statusL, "This program is still under development. Backup your ~/GNUstep/Defaults directory, before using it."); + WMSetLabelText(WPrefs.statusL, + "WPrefs is free software and is distributed WITHOUT ANY " + "WARRANTY under the terms of the GNU General Public License." + "Redistribution of the icons in this program separately from the program itself is prohibited."); + } @@ -555,7 +566,7 @@ loadConfigurations(WMScreen *scr, WMWindow *mainw) file = popen("wmaker -version", "r"); if (!file || !fgets(buffer, 1023, file)) { wsyserror(_("could not extract version information from Window Maker")); - wfatal(_("Make sure Window Maker is in your search path.")); + wfatal(_("Make sure wmaker is in your search path.")); WMRunAlertPanel(scr, mainw, _("Error"), _("Could not extract version from Window Maker. Make sure it is correctly installed and is in your PATH environment variable."), diff --git a/WPrefs.app/WPrefs.h b/WPrefs.app/WPrefs.h index 6b014b9a..4a456584 100644 --- a/WPrefs.app/WPrefs.h +++ b/WPrefs.app/WPrefs.h @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -36,8 +37,12 @@ #include #include +/** some config options **/ +#undef EXTEND_WINDOWSHORTCUT -#define WVERSION "0.8" +/****/ + +#define WVERSION "0.9" #define WMVERSION "0.20.x" @@ -63,6 +68,7 @@ typedef struct PanelRec { } PanelRec; + void AddSection(Panel *panel, char *iconFile); char *LocateImage(char *name); @@ -93,6 +99,11 @@ void SetBoolForKey(Bool value, char *defaultName); void SetSpeedForKey(int speed, char *defaultName); + + +void AddDeadChildHandler(pid_t pid, void (*handler)(void*), void *data); + + #define FRAME_TOP 105 #define FRAME_LEFT -2 #define FRAME_WIDTH 524 diff --git a/WPrefs.app/main.c b/WPrefs.app/main.c index 493fc6de..a80b2b0b 100644 --- a/WPrefs.app/main.c +++ b/WPrefs.app/main.c @@ -21,11 +21,27 @@ #include "WPrefs.h" + +#include + #include +#include +#include extern void Initialize(WMScreen *scr); +#define MAX_DEATHS 64 + +struct { + pid_t pid; + void *data; + void (*handler)(void*); +} DeadHandlers[MAX_DEATHS]; + + +static pid_t DeadChildren[MAX_DEATHS]; +static int DeadChildrenCount = 0; void @@ -60,6 +76,38 @@ print_help(char *progname) } + +static RETSIGTYPE +handleDeadChild(int sig) +{ + pid_t pid; + int status; + + pid = waitpid(-1, &status, WNOHANG); + if (pid > 0) { + DeadChildren[DeadChildrenCount++] = pid; + } +} + + +void +AddDeadChildHandler(pid_t pid, void (*handler)(void*), void *data) +{ + int i; + + for (i = 0; i < MAX_DEATHS; i++) { + if (DeadHandlers[i].pid == 0) { + DeadHandlers[i].pid = pid; + DeadHandlers[i].handler = handler; + DeadHandlers[i].data = data; + break; + } + } + assert(i!=MAX_DEATHS); +} + + + int main(int argc, char **argv) { @@ -69,6 +117,8 @@ main(int argc, char **argv) int i; char *display_name=""; + memset(DeadHandlers, 0, sizeof(DeadHandlers)); + WMInitializeApplication("WPrefs", &argc, argv); if (argc>1) { @@ -128,8 +178,20 @@ main(int argc, char **argv) while (1) { XEvent event; - + WMNextEvent(dpy, &event); + + while (DeadChildrenCount-- > 0) { + int i; + + for (i=0; i, 1998. -# +# WPrefs 0.8 for WindowMaker 0.20.x +# Èt pro 3 20:38:36 CET 1998 David Sauer msgid "" msgstr "" -"Project-Id-Version: WPrefs 0.6 (WindowMaker 0.20.x)\n" -"POT-Creation-Date: 1998-10-24 12:35+0200\n" +"Project-Id-Version: WPrefs 0.8 (WindowMaker 0.20.x)\n" +"POT-Creation-Date: 1998-12-11 00:10+0100\n" "PO-Revision-Date: 1998-10-27 13:02+01:00\n" "Last-Translator: David Sauer \n" "Language-Team: czech \n" @@ -13,97 +14,13 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: unknown\n" -#: ../../WPrefs.app/Configurations.c:142 ../../WPrefs.app/Configurations.c:148 -#: ../../WPrefs.app/MouseSettings.c:510 ../../WPrefs.app/WindowHandling.c:270 -#: ../../WPrefs.app/WindowHandling.c:282 ../../WPrefs.app/Workspace.c:71 -#: ../../WPrefs.app/Workspace.c:77 -#, c-format -msgid "could not load icon %s" -msgstr "nelze naèíst ikonu %s" - -#: ../../WPrefs.app/Configurations.c:156 ../../WPrefs.app/Workspace.c:85 -#, c-format -msgid "could not process icon %s:" -msgstr "nelze zpracovat ikonu %s:" - -#: ../../WPrefs.app/Configurations.c:181 ../../WPrefs.app/Workspace.c:124 -#, c-format -msgid "could not load image file %s" -msgstr "ze souboru %s nelze naèíst obrázek" - -#: ../../WPrefs.app/Configurations.c:195 -msgid "Icon Slide Speed" -msgstr "Rychlost klouzání ikony" - -#: ../../WPrefs.app/Configurations.c:201 -msgid "Shade Animation Speed" -msgstr "Rychlost zmìny okna na titulek" - -#: ../../WPrefs.app/Configurations.c:234 ../../WPrefs.app/Configurations.c:246 -#: ../../WPrefs.app/Focus.c:310 ../../WPrefs.app/Focus.c:321 -#: ../../WPrefs.app/MenuPreferences.c:135 -#: ../../WPrefs.app/MenuPreferences.c:146 -#: ../../WPrefs.app/MenuPreferences.c:174 -#: ../../WPrefs.app/MenuPreferences.c:189 ../../WPrefs.app/MouseSettings.c:538 -#: ../../WPrefs.app/MouseSettings.c:549 ../../WPrefs.app/MouseSettings.c:604 -#: ../../WPrefs.app/MouseSettings.c:615 ../../WPrefs.app/MouseSettings.c:651 -#: ../../WPrefs.app/MouseSettings.c:666 ../../WPrefs.app/MouseSettings.c:682 -#: ../../WPrefs.app/WPrefs.c:398 ../../WPrefs.app/WPrefs.c:416 -#, c-format -msgid "could not load icon file %s" -msgstr "nelze naèíst soubor s ikonou %s" - -#: ../../WPrefs.app/Configurations.c:262 -msgid "Titlebar Style" -msgstr "Styl titulku" - -#: ../../WPrefs.app/Configurations.c:299 -msgid "Animations and Sound" -msgstr "Animace a Zvuky" - -#: ../../WPrefs.app/Configurations.c:305 -msgid "Animations" -msgstr "Animace" - -#: ../../WPrefs.app/Configurations.c:321 -msgid "Superfluous" -msgstr "Animace+" - -#: ../../WPrefs.app/Configurations.c:337 -msgid "Sounds" -msgstr "Zvuky" - -#: ../../WPrefs.app/Configurations.c:354 -msgid "Note: sound requires a module distributed separately" -msgstr "Poznámka: zvuk vy¾aduje samostatný modul" - -#: ../../WPrefs.app/Configurations.c:364 -msgid "Dithering colormap for 8bpp" -msgstr "Ditherovat na 8bpp" - -#: ../../WPrefs.app/Configurations.c:369 -msgid "Disable dithering in any visual/depth" -msgstr "Zaka¾ jakékoli ditherování" - -#: ../../WPrefs.app/Configurations.c:390 -msgid "More colors for applications" -msgstr "Barvy aplikacím" - -#: ../../WPrefs.app/Configurations.c:397 -msgid "More colors for WindowMaker" -msgstr "Barvy WindowMakeru" - -#: ../../WPrefs.app/Configurations.c:450 -msgid "Other Configurations" -msgstr "Dal¹í konfigurace" - #: ../../WPrefs.app/Expert.c:70 msgid "Do not set non-WindowMaker specific parameters (do not use xset)" msgstr "Nenastavovat parametry mimo WindowMaker (nepou¾ívat xset)" #: ../../WPrefs.app/Expert.c:71 msgid "Automatically save session when exiting WindowMaker" -msgstr "Pøi ukonèení WindowMakeru automaticky ulo¾it sezení" +msgstr "Pøi ukonèení Window Makeru automaticky ulo¾it sezení" #: ../../WPrefs.app/Expert.c:72 msgid "Use SaveUnder in window frames, icons, menus and other objects" @@ -132,8 +49,8 @@ msgid "" "Click on the window to set\n" "keyboard input focus." msgstr "" -"«uk my¹í v oknì zamìøí\n" -"vstup z klávesnice" +"Click on the window to set\n" +"keyboard input focus." #: ../../WPrefs.app/Focus.c:194 msgid "" @@ -187,6 +104,18 @@ msgstr "... kter msgid "Automatic Window Raise Delay" msgstr "Prodleva pøi vyzdvihnutí oken" +#: ../../WPrefs.app/Focus.c:310 ../../WPrefs.app/Focus.c:321 +#: ../../WPrefs.app/MenuPreferences.c:135 +#: ../../WPrefs.app/MenuPreferences.c:146 +#: ../../WPrefs.app/MenuPreferences.c:174 +#: ../../WPrefs.app/MenuPreferences.c:189 ../../WPrefs.app/MouseSettings.c:538 +#: ../../WPrefs.app/MouseSettings.c:549 ../../WPrefs.app/MouseSettings.c:604 +#: ../../WPrefs.app/MouseSettings.c:615 ../../WPrefs.app/MouseSettings.c:651 +#: ../../WPrefs.app/MouseSettings.c:666 ../../WPrefs.app/MouseSettings.c:682 +#, c-format +msgid "could not load icon file %s" +msgstr "nelze naèíst soubor s ikonou %s" + #: ../../WPrefs.app/Focus.c:341 msgid "msec" msgstr "ms" @@ -219,167 +148,187 @@ msgstr "Zkuste kl msgid "Keyboard Preferences" msgstr "Nastavení klávesnice" -#: ../../WPrefs.app/KeyboardShortcuts.c:161 ../../WPrefs.app/Menu.c:923 +#: ../../WPrefs.app/KeyboardShortcuts.c:170 ../../WPrefs.app/Menu.c:923 #: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/MenuGuru.c:263 msgid "Cancel" msgstr "Nic" -#: ../../WPrefs.app/KeyboardShortcuts.c:162 +#: ../../WPrefs.app/KeyboardShortcuts.c:171 msgid "Press the desired shortcut key(s) or click Cancel to stop capturing." msgstr "Stisknìte po¾adované klávesy nebo pou¾ijete \"Nic\"." -#: ../../WPrefs.app/KeyboardShortcuts.c:180 -#: ../../WPrefs.app/KeyboardShortcuts.c:374 ../../WPrefs.app/Menu.c:935 +#: ../../WPrefs.app/KeyboardShortcuts.c:189 +#: ../../WPrefs.app/KeyboardShortcuts.c:390 ../../WPrefs.app/Menu.c:935 #: ../../WPrefs.app/Menu.c:1157 msgid "Capture" msgstr "Snímat" -#: ../../WPrefs.app/KeyboardShortcuts.c:181 -#: ../../WPrefs.app/KeyboardShortcuts.c:381 +#: ../../WPrefs.app/KeyboardShortcuts.c:190 +#: ../../WPrefs.app/KeyboardShortcuts.c:397 msgid "Click Capture to interactively define the shortcut key." msgstr "Pou¾ijte \"Snímat\" k definici klávesy." -#: ../../WPrefs.app/KeyboardShortcuts.c:299 +#: ../../WPrefs.app/KeyboardShortcuts.c:308 msgid "Actions" msgstr "Akce" -#: ../../WPrefs.app/KeyboardShortcuts.c:313 +#: ../../WPrefs.app/KeyboardShortcuts.c:322 msgid "Open applications menu" msgstr "Otevøít menu aplikací" -#: ../../WPrefs.app/KeyboardShortcuts.c:314 +#: ../../WPrefs.app/KeyboardShortcuts.c:323 msgid "Open window list menu" msgstr "Otevøít menu s okny" -#: ../../WPrefs.app/KeyboardShortcuts.c:315 +#: ../../WPrefs.app/KeyboardShortcuts.c:324 msgid "Open window commands menu" msgstr "Otevøít menu s pøikazy pro okno" -#: ../../WPrefs.app/KeyboardShortcuts.c:316 +#: ../../WPrefs.app/KeyboardShortcuts.c:325 msgid "Hide active application" msgstr "Skrýt aplikaci" -#: ../../WPrefs.app/KeyboardShortcuts.c:317 +#: ../../WPrefs.app/KeyboardShortcuts.c:326 msgid "Miniaturize active window" msgstr "Miniaturizace" -#: ../../WPrefs.app/KeyboardShortcuts.c:318 +#: ../../WPrefs.app/KeyboardShortcuts.c:327 msgid "Close active window" msgstr "Uzavøít okno" -#: ../../WPrefs.app/KeyboardShortcuts.c:319 +#: ../../WPrefs.app/KeyboardShortcuts.c:328 msgid "Maximize active window" msgstr "Maximalizace okna" -#: ../../WPrefs.app/KeyboardShortcuts.c:320 +#: ../../WPrefs.app/KeyboardShortcuts.c:329 msgid "Maximize active window vertically" msgstr "Vertikální maximalizace" -#: ../../WPrefs.app/KeyboardShortcuts.c:321 +#: ../../WPrefs.app/KeyboardShortcuts.c:330 msgid "Raise active window" msgstr "Aktivní okno vý¹e" -#: ../../WPrefs.app/KeyboardShortcuts.c:322 +#: ../../WPrefs.app/KeyboardShortcuts.c:331 msgid "Lower active window" msgstr "Aktivní okno ní¾e" -#: ../../WPrefs.app/KeyboardShortcuts.c:323 +#: ../../WPrefs.app/KeyboardShortcuts.c:332 msgid "Raise/Lower window under mouse pointer" msgstr "Okno pod ukazatelem my¹i vý¹e/ní¾e" -#: ../../WPrefs.app/KeyboardShortcuts.c:324 +#: ../../WPrefs.app/KeyboardShortcuts.c:333 msgid "Shade active window" msgstr "Z okna jen titulek" -#: ../../WPrefs.app/KeyboardShortcuts.c:325 +#: ../../WPrefs.app/KeyboardShortcuts.c:334 msgid "Select active window" msgstr "Vyber okno" -#: ../../WPrefs.app/KeyboardShortcuts.c:326 +#: ../../WPrefs.app/KeyboardShortcuts.c:335 msgid "Focus next window" -msgstr "Zamìrit dal¹í oknp" +msgstr "Zamìøit dal¹í okno" -#: ../../WPrefs.app/KeyboardShortcuts.c:327 +#: ../../WPrefs.app/KeyboardShortcuts.c:336 msgid "Focus previous window" msgstr "Zamìøit pøedchozí okno" -#: ../../WPrefs.app/KeyboardShortcuts.c:328 +#: ../../WPrefs.app/KeyboardShortcuts.c:337 msgid "Switch to next workspace" msgstr "Dal¹í plocha" -#: ../../WPrefs.app/KeyboardShortcuts.c:329 +#: ../../WPrefs.app/KeyboardShortcuts.c:338 msgid "Switch to previous workspace" msgstr "Pøedchozí plocha" -#: ../../WPrefs.app/KeyboardShortcuts.c:330 +#: ../../WPrefs.app/KeyboardShortcuts.c:339 msgid "Switch to next ten workspaces" msgstr "Dal¹ích 10 ploch" -#: ../../WPrefs.app/KeyboardShortcuts.c:331 +#: ../../WPrefs.app/KeyboardShortcuts.c:340 msgid "Switch to previous ten workspaces" msgstr "Pøedchozích 10 ploch" -#: ../../WPrefs.app/KeyboardShortcuts.c:332 +#: ../../WPrefs.app/KeyboardShortcuts.c:341 msgid "Switch to workspace 1" msgstr "Pøepni na plochu 1" -#: ../../WPrefs.app/KeyboardShortcuts.c:333 +#: ../../WPrefs.app/KeyboardShortcuts.c:342 msgid "Switch to workspace 2" msgstr "Pøepni na plochu 2" -#: ../../WPrefs.app/KeyboardShortcuts.c:334 +#: ../../WPrefs.app/KeyboardShortcuts.c:343 msgid "Switch to workspace 3" msgstr "Pøepni na plochu 3" -#: ../../WPrefs.app/KeyboardShortcuts.c:335 +#: ../../WPrefs.app/KeyboardShortcuts.c:344 msgid "Switch to workspace 4" msgstr "Pøepni na plochu 4" -#: ../../WPrefs.app/KeyboardShortcuts.c:336 +#: ../../WPrefs.app/KeyboardShortcuts.c:345 msgid "Switch to workspace 5" msgstr "Pøepni na plochu 5" -#: ../../WPrefs.app/KeyboardShortcuts.c:337 +#: ../../WPrefs.app/KeyboardShortcuts.c:346 msgid "Switch to workspace 6" msgstr "Pøepni na plochu 6" -#: ../../WPrefs.app/KeyboardShortcuts.c:338 +#: ../../WPrefs.app/KeyboardShortcuts.c:347 msgid "Switch to workspace 7" msgstr "Pøepni na plochu 7" -#: ../../WPrefs.app/KeyboardShortcuts.c:339 +#: ../../WPrefs.app/KeyboardShortcuts.c:348 msgid "Switch to workspace 8" msgstr "Pøepni na plochu 8" -#: ../../WPrefs.app/KeyboardShortcuts.c:340 +#: ../../WPrefs.app/KeyboardShortcuts.c:349 msgid "Switch to workspace 9" msgstr "Pøepni na plochu 9" -#: ../../WPrefs.app/KeyboardShortcuts.c:341 +#: ../../WPrefs.app/KeyboardShortcuts.c:350 msgid "Switch to workspace 10" msgstr "Pøepni na plochu 10" -#: ../../WPrefs.app/KeyboardShortcuts.c:342 +#: ../../WPrefs.app/KeyboardShortcuts.c:351 +msgid "Shortcut for window 1" +msgstr "Zkratka pro okno 1" + +#: ../../WPrefs.app/KeyboardShortcuts.c:352 +msgid "Shortcut for window 2" +msgstr "Zkratka pro okno 2" + +#: ../../WPrefs.app/KeyboardShortcuts.c:353 +msgid "Shortcut for window 3" +msgstr "Zkratka pro okno 3" + +#: ../../WPrefs.app/KeyboardShortcuts.c:354 +msgid "Shortcut for window 4" +msgstr "Zkratka pro okno 4" + +#: ../../WPrefs.app/KeyboardShortcuts.c:355 msgid "Raise Clip" msgstr "Sponku vý¹e" -#: ../../WPrefs.app/KeyboardShortcuts.c:343 +#: ../../WPrefs.app/KeyboardShortcuts.c:356 msgid "Lower Clip" msgstr "Sponku ní¾e" -#: ../../WPrefs.app/KeyboardShortcuts.c:344 +#: ../../WPrefs.app/KeyboardShortcuts.c:357 msgid "Raise/Lower Clip" msgstr "Sponku vý¹e/ní¾e" -#: ../../WPrefs.app/KeyboardShortcuts.c:357 ../../WPrefs.app/Menu.c:1146 +#: ../../WPrefs.app/KeyboardShortcuts.c:359 +msgid "Toggle keyboard language" +msgstr "Nastavit jazyk pro klávesnici" + +#: ../../WPrefs.app/KeyboardShortcuts.c:373 ../../WPrefs.app/Menu.c:1146 msgid "Shortcut" msgstr "Zkratka" -#: ../../WPrefs.app/KeyboardShortcuts.c:368 +#: ../../WPrefs.app/KeyboardShortcuts.c:384 msgid "Clear" msgstr "Vyma¾" -#: ../../WPrefs.app/KeyboardShortcuts.c:429 +#: ../../WPrefs.app/KeyboardShortcuts.c:445 msgid "Keyboard Shortcut Preferences" msgstr "Nastavení klávesových zkratek" @@ -531,22 +480,18 @@ msgid "" "You can also replace ~/G/D/WMRootMenu with ~/G/L/W/plmenu to get the default " "menu." msgstr "" -"Aktuální formát menu v ~/G/D/WMRootMenu není podporován programem WPrefs. Bude vytvoøeno nové menu.\n" +"Aktuální formát menu v ~/G/D/WMRootMenu není podporován programem WPrefs. " +"Bude vytvoøeno nové menu.\n" "Standardní menu získáte pøíkazem \"cp ~/G/L/W/plmenu ~/G/D/WMRootMenu\"." #: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1295 -#: ../../WPrefs.app/WPrefs.c:585 msgid "Warning" msgstr "Varování" #: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1296 #: ../../WPrefs.app/MenuGuru.c:119 ../../WPrefs.app/MenuGuru.c:126 #: ../../WPrefs.app/MenuGuru.c:140 ../../WPrefs.app/MouseSettings.c:156 -#: ../../WPrefs.app/Text.c:181 ../../WPrefs.app/WPrefs.c:546 -#: ../../WPrefs.app/WPrefs.c:551 ../../WPrefs.app/WPrefs.c:562 -#: ../../WPrefs.app/WPrefs.c:572 ../../WPrefs.app/WPrefs.c:578 -#: ../../WPrefs.app/WPrefs.c:585 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 +#: ../../WPrefs.app/Text.c:181 msgid "OK" msgstr "OK" @@ -620,7 +565,10 @@ msgid "" "The menu file must contain a menu in the plain text menu file format. This " "format is described in the menu files included with WindowMaker, probably at " "~/GNUstep/Library/WindowMaker/menu" -msgstr "Soubor s menu musí obsahovat popis menu jako obyèejný text. Tento formát je zøejmý ze souboru s menu, který je distribuován s Window Makerem, pravdìpodobnì v souboru ~/GNUstep/Library/WindowMaker/menu" +msgstr "" +"Soubor s menu musí obsahovat popis menu jako obyèejný text. Tento formát je " +"zøejmý ze souboru s menu, který je distribuován s Window Makerem, " +"pravdìpodobnì v souboru ~/GNUstep/Library/WindowMaker/menu" #: ../../WPrefs.app/MenuGuru.c:328 msgid "Type the command that will generate the menu definition:" @@ -632,14 +580,19 @@ msgid "" "stdout. This definition should be in the plain text menu file format, " "described in the menu files included with WindowMaker, usually at " "~/GNUstep/Library/WindowMaker/menu" -msgstr "Pøíkaz musí generovat a standardní výstup zapsat správnou definici menu. Tato definice musí být ve formì neformátovaného textu, jak je ukázáno v distribuèním souboru s menu, obvykle v ~/GNUstep/Library/WindowMaker/menu" +msgstr "" +"Pøíkaz musí generovat a standardní výstup zapsat správnou definici menu. " +"Tato definice musí být ve formì neformátovaného textu, jak je ukázáno v " +"distribuèním souboru s menu, obvykle v ~/GNUstep/Library/WindowMaker/menu" #: ../../WPrefs.app/MenuGuru.c:350 ../../WPrefs.app/MenuGuru.c:372 #: ../../WPrefs.app/MenuGuru.c:394 msgid "" "Type the path for the directory. You can type more than one path by " "separating them with spaces." -msgstr "Zadejte cestu pro adresáø. Pokud chcete zadat více adresáøù, oddìlte je mezerami." +msgstr "" +"Zadejte cestu pro adresáø. Pokud chcete zadat více adresáøù, oddìlte je " +"mezerami." #: ../../WPrefs.app/MenuGuru.c:361 ../../WPrefs.app/MenuGuru.c:383 #: ../../WPrefs.app/MenuGuru.c:405 @@ -647,13 +600,17 @@ msgid "" "The menu generated will have an item for each file in the directory. The " "directories can contain program executables or data files (such as jpeg " "images)." -msgstr "Generované menu bude mít polo¾ku pro ka¾dý soubor v adresáøi. Adresáøe mohou obsahovat programy nebo datové soubory, napøíklad obrázky formátu jpeg." +msgstr "" +"Generované menu bude mít polo¾ku pro ka¾dý soubor v adresáøi. Adresáøe mohou " +"obsahovat programy nebo datové soubory, napøíklad obrázky formátu jpeg." #: ../../WPrefs.app/MenuGuru.c:415 msgid "" "If the directory contain data files, type the command used to open these " "files. Otherwise, leave it in blank." -msgstr "Pokud adresáø obsahuje datové soubory, zadejte pøíkaz pro jejich otevøení. Jinak ponechte prázdné." +msgstr "" +"Pokud adresáø obsahuje datové soubory, zadejte pøíkaz pro jejich otevøení. " +"Jinak ponechte prázdné." #: ../../WPrefs.app/MenuGuru.c:426 msgid "" @@ -661,7 +618,10 @@ msgid "" "the supplied command.For example, if the directory contains image files and " "the command is \"xv -root\", each file in the directory will have a menu " "item like \"xv -root imagefile\"." -msgstr "Ka¾dý soubor v adresáøi bude mít polo¾ku v menu a bude otevøen pomocí daného pøíkazu. Napøíklad, pokud adresáø obsahuje soubory s obrázky a pøíkaz je \"xv -root\", ka¾dý soubor bude mít polo¾ku \"xv -root soubor_s_obrázkem." +msgstr "" +"Ka¾dý soubor v adresáøi bude mít polo¾ku v menu a bude otevøen pomocí daného " +"pøíkazu. Napøíklad, pokud adresáø obsahuje soubory s obrázky a pøíkaz je " +"\"xv -root\", ka¾dý soubor bude mít polo¾ku \"xv -root soubor_s_obrázkem." #: ../../WPrefs.app/MenuPreferences.c:112 msgid "Menu Scrolling Speed" @@ -688,10 +648,6 @@ msgid "Menu Preferences" msgstr "Nastavení menu" #: ../../WPrefs.app/MouseSettings.c:154 ../../WPrefs.app/Text.c:181 -#: ../../WPrefs.app/WPrefs.c:546 ../../WPrefs.app/WPrefs.c:551 -#: ../../WPrefs.app/WPrefs.c:560 ../../WPrefs.app/WPrefs.c:570 -#: ../../WPrefs.app/WPrefs.c:578 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 msgid "Error" msgstr "Chyba" @@ -699,7 +655,9 @@ msgstr "Chyba" msgid "" "Invalid mouse acceleration threshold value. Must be the number of pixels to " "travel before accelerating." -msgstr "Chybná hodnota pro práh zrychlení my¹i. Zadejte èíslo oznaèující poèet pixelù pøed akcelarecí." +msgstr "" +"Chybná hodnota pro práh zrychlení my¹i. Zadejte èíslo oznaèující poèet " +"pixelù pøed akcelarecí." #: ../../WPrefs.app/MouseSettings.c:209 #, c-format @@ -728,6 +686,13 @@ msgstr "nelze p msgid "Mouse Speed" msgstr "Rychlost my¹i" +#: ../../WPrefs.app/MouseSettings.c:510 ../../WPrefs.app/WindowHandling.c:274 +#: ../../WPrefs.app/WindowHandling.c:286 ../../WPrefs.app/Workspace.c:71 +#: ../../WPrefs.app/Workspace.c:77 +#, c-format +msgid "could not load icon %s" +msgstr "nelze naèíst ikonu %s" + #: ../../WPrefs.app/MouseSettings.c:564 msgid "Threshold:" msgstr "Mez:" @@ -811,51 +776,55 @@ msgstr "Adres msgid "Search Path Configuration" msgstr "Konfigurace prohledávaných cest" -#: ../../WPrefs.app/Preferences.c:142 +#: ../../WPrefs.app/Preferences.c:151 msgid "Size Display" msgstr "Zobrazení velikosti" -#: ../../WPrefs.app/Preferences.c:147 ../../WPrefs.app/Preferences.c:163 +#: ../../WPrefs.app/Preferences.c:156 ../../WPrefs.app/Preferences.c:172 msgid "Corner of screen" msgstr "Roh obrazovky" -#: ../../WPrefs.app/Preferences.c:148 ../../WPrefs.app/Preferences.c:164 +#: ../../WPrefs.app/Preferences.c:157 ../../WPrefs.app/Preferences.c:173 msgid "Center of screen" msgstr "Støed obrazovky" -#: ../../WPrefs.app/Preferences.c:149 ../../WPrefs.app/Preferences.c:165 +#: ../../WPrefs.app/Preferences.c:158 ../../WPrefs.app/Preferences.c:174 msgid "Center of resized window" msgstr "Støed okna" -#: ../../WPrefs.app/Preferences.c:150 +#: ../../WPrefs.app/Preferences.c:159 msgid "Technical drawing-like" msgstr "Jako kóty výkresù" -#: ../../WPrefs.app/Preferences.c:158 +#: ../../WPrefs.app/Preferences.c:167 msgid "Position Display" msgstr "Zobrazení pozice" -#: ../../WPrefs.app/Preferences.c:173 +#: ../../WPrefs.app/Preferences.c:182 msgid "Show balloon text for..." msgstr "Balónová nápovìda pro..." -#: ../../WPrefs.app/Preferences.c:180 +#: ../../WPrefs.app/Preferences.c:189 msgid "incomplete window titles" msgstr "nekompletní titulky oken" -#: ../../WPrefs.app/Preferences.c:181 +#: ../../WPrefs.app/Preferences.c:190 msgid "miniwindow titles" msgstr "ikony" -#: ../../WPrefs.app/Preferences.c:182 +#: ../../WPrefs.app/Preferences.c:191 msgid "application/dock icons" msgstr "aplikaèní/ukotvené ikony" -#: ../../WPrefs.app/Preferences.c:195 +#: ../../WPrefs.app/Preferences.c:204 msgid "Raise window when switching focus with keyboard (CirculateRaise)." msgstr "Pøi zmìnì zamìøení pøes klávesnici zdvihnout okno." -#: ../../WPrefs.app/Preferences.c:215 +#: ../../WPrefs.app/Preferences.c:210 +msgid "Keep keyboard language status for each window." +msgstr "Pro ka¾dé okno pamatovat nastavení jazyka." + +#: ../../WPrefs.app/Preferences.c:231 msgid "Miscellaneous Ergonomic Preferences" msgstr "Rùzná nastavení ergonomie" @@ -1038,169 +1007,73 @@ msgstr "Pozad msgid "Texture and Color Preferences" msgstr "Nastavení textur a barev" -#: ../../WPrefs.app/WPrefs.c:196 -msgid "Window Maker Preferences" -msgstr "Nastavení Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:220 -msgid "Revert Page" -msgstr "Stránku zpìt" - -#: ../../WPrefs.app/WPrefs.c:226 -msgid "Revert All" -msgstr "V¹e zpìt" - -#: ../../WPrefs.app/WPrefs.c:232 -msgid "Save" -msgstr "Ulo¾" - -#: ../../WPrefs.app/WPrefs.c:238 -msgid "Close" -msgstr "Uzavøi" - -#: ../../WPrefs.app/WPrefs.c:262 -#, c-format -msgid "Version %s for Window Maker %s" -msgstr "Verze %s pro Window Maker %s" - -#: ../../WPrefs.app/WPrefs.c:269 -msgid "Starting..." -msgstr "Startuji..." - -#: ../../WPrefs.app/WPrefs.c:275 -msgid "" -"Programming/Design: Alfredo K. Kojima\n" -"Artwork: Marco van Hylckama Vlieg\n" -"More Programming: James Thompson" -msgstr "" -"Programoval/Návrh: Alfredo K. Kojima\n" -"Pøedloha: Marco van Hylckama Vlieg\n" -"Spolupracoval: James Thompson" - -#: ../../WPrefs.app/WPrefs.c:363 -#, c-format -msgid "could not locate image file %s\n" -msgstr "nelze najít soubor %s s obrázkem\n" - -#: ../../WPrefs.app/WPrefs.c:488 -msgid "Loading Window Maker configuration files..." -msgstr "Ètu konfiguraèní soubory Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:492 -msgid "Initializing configuration panels..." -msgstr "Inicializace konfiguraèních panelù..." - -#: ../../WPrefs.app/WPrefs.c:545 ../../WPrefs.app/WPrefs.c:601 -#, c-format -msgid "Window Maker domain (%s) is corrupted!" -msgstr "Doména Window Makeru (%s) je po¹kozena!" - -#: ../../WPrefs.app/WPrefs.c:549 -#, c-format -msgid "Could not load Window Maker domain (%s) from defaults database." -msgstr "z databáze standardù nelze naèíst doménu Window Makeru (%s)." - -#: ../../WPrefs.app/WPrefs.c:557 -msgid "could not extract version information from Window Maker" -msgstr "od Window Makeru nelze získat èíslo verze" - -#: ../../WPrefs.app/WPrefs.c:558 -msgid "Make sure Window Maker is in your search path." -msgstr "Zajistìte, aby byl Window Maker v prohledávaných adresáøích ($PATH)." - -#: ../../WPrefs.app/WPrefs.c:561 ../../WPrefs.app/WPrefs.c:571 -msgid "" -"Could not extract version from Window Maker. Make sure it is correctly " -"installed." -msgstr "Od Window Makeru nelze získat èíslo verze. Zjistìte, je-li správne instalován." - -#: ../../WPrefs.app/WPrefs.c:576 -#, c-format -msgid "" -"WPrefs only supports Window Maker 0.18.0 or newer.\n" -"The version installed is %i.%i.%i\n" -msgstr "" -"Program WPrefs podporuje Window Maker 0.18.0 a vy¹¹í.\n" -"Instalovaná verze je %i.%i.%i\n" - -#: ../../WPrefs.app/WPrefs.c:583 -#, c-format -msgid "" -"Window Maker %i.%i.%i, which is installed in your system, is not fully " -"supported by this version of WPrefs." -msgstr "Instalovaný Window Maker %i.%i.%i není plnì touto verzí programu WPrefs podporován." - -#: ../../WPrefs.app/WPrefs.c:590 -msgid "could not run \"wmaker -global_defaults_path\"." -msgstr "nelze provést \"wmaker -global_defaults_path\"" - -#: ../../WPrefs.app/WPrefs.c:605 -#, c-format -msgid "Could not load global Window Maker domain (%s)." -msgstr "Nelze naèíst globální doménu pro Window Maker (%s)." - -#: ../../WPrefs.app/WPrefs.c:851 -#, c-format -msgid "" -"bad speed value for option %s\n" -". Using default Medium" -msgstr "" -"pro volbu %s je chybnì urèená\n" -"ryclost. Pou¾ita 'Medium'" - -#: ../../WPrefs.app/WindowHandling.c:107 +#: ../../WPrefs.app/WindowHandling.c:108 #, c-format msgid "bad option value %s in WindowPlacement. Using default value" msgstr "chybná hodnota volby %s ve WindowPlacement. Pou¾ívám standardní" -#: ../../WPrefs.app/WindowHandling.c:129 +#: ../../WPrefs.app/WindowHandling.c:130 msgid "invalid data in option WindowPlaceOrigin. Using default (0,0)" msgstr "chybná data pro WindowPlaceOrigin. Pou¾ívám (0,0)" -#: ../../WPrefs.app/WindowHandling.c:188 +#: ../../WPrefs.app/WindowHandling.c:192 msgid "Window Placement" msgstr "Pokládání oken" -#: ../../WPrefs.app/WindowHandling.c:193 +#: ../../WPrefs.app/WindowHandling.c:197 msgid "Automatic" msgstr "Automatické" -#: ../../WPrefs.app/WindowHandling.c:194 +#: ../../WPrefs.app/WindowHandling.c:198 msgid "Random" msgstr "Náhodné" -#: ../../WPrefs.app/WindowHandling.c:195 +#: ../../WPrefs.app/WindowHandling.c:199 msgid "Manual" msgstr "Ruèní" -#: ../../WPrefs.app/WindowHandling.c:196 +#: ../../WPrefs.app/WindowHandling.c:200 msgid "Cascade" msgstr "Kaskádnì" -#: ../../WPrefs.app/WindowHandling.c:202 +#: ../../WPrefs.app/WindowHandling.c:206 msgid "Placement Origin" msgstr "Poèáteèní poloha" -#: ../../WPrefs.app/WindowHandling.c:256 +#: ../../WPrefs.app/WindowHandling.c:260 msgid "Opaque Move" msgstr "Pøesouvat plná okna" -#: ../../WPrefs.app/WindowHandling.c:292 +#: ../../WPrefs.app/WindowHandling.c:296 msgid "When maximizing..." msgstr "Pøi maximalizaci..." -#: ../../WPrefs.app/WindowHandling.c:297 +#: ../../WPrefs.app/WindowHandling.c:301 msgid "...do not resize over icons" msgstr "... nezvìt¹ovat pøes ikony" -#: ../../WPrefs.app/WindowHandling.c:310 +#: ../../WPrefs.app/WindowHandling.c:307 +msgid "...do not resize over dock" +msgstr "... nezvìt¹ovat pøes dok" + +#: ../../WPrefs.app/WindowHandling.c:320 msgid "Keep transients above their owners" msgstr "Dialogy dr¾et nad vlastníky" -#: ../../WPrefs.app/WindowHandling.c:337 +#: ../../WPrefs.app/WindowHandling.c:347 msgid "Window Handling Preferences" msgstr "Nastavení práce s okny" +#: ../../WPrefs.app/Workspace.c:85 +#, c-format +msgid "could not process icon %s:" +msgstr "nelze zpracovat ikonu %s:" + +#: ../../WPrefs.app/Workspace.c:124 +#, c-format +msgid "could not load image file %s" +msgstr "ze souboru %s nelze naèíst obrázek" + #: ../../WPrefs.app/Workspace.c:137 msgid "Workspace Navigation" msgstr "Orientace v plochách" @@ -1265,4 +1138,129 @@ msgstr "nelze otev #: ../../WPrefs.app/main.c:121 msgid "could not initialize application" msgstr "nelze inicializovat aplikaci" -\ No newline at end of file + +msgid "Icon Slide Speed" +msgstr "Rychlost klouzání ikony" + +msgid "Shade Animation Speed" +msgstr "Rychlost zmìny okna na titulek" + +msgid "Titlebar Style" +msgstr "Styl titulku" + +msgid "Animations and Sound" +msgstr "Animace a Zvuky" + +msgid "Animations" +msgstr "Animace" + +msgid "Superfluous" +msgstr "Animace++" + +msgid "Sounds" +msgstr "Zvuky" + +msgid "Note: sound requires a module distributed separately" +msgstr "Poznámka: zvuk vy¾aduje samostatný modul" + +msgid "Dithering colormap for 8bpp" +msgstr "Ditherovat na 8bpp" + +msgid "Disable dithering in any visual/depth" +msgstr "Zaka¾ jakékoli ditherování" + +msgid "More colors for applications" +msgstr "Barvy aplikacím" + +msgid "More colors for WindowMaker" +msgstr "Barvy WindowMakeru" + +msgid "Other Configurations" +msgstr "Dal¹í konfigurace" + +msgid "Window Maker Preferences" +msgstr "Nastavení Window Makeru" + +msgid "Revert Page" +msgstr "Stránku zpìt" + +msgid "Revert All" +msgstr "V¹e zpìt" + +msgid "Save" +msgstr "Ulo¾" + +msgid "Close" +msgstr "Uzavøi" + +msgid "Version %s for Window Maker %s" +msgstr "Verze %s pro Window Maker %s" + +msgid "Starting..." +msgstr "Startuji..." + +msgid "" +"Programming/Design: Alfredo K. Kojima\n" +"Artwork: Marco van Hylckama Vlieg\n" +"More Programming: James Thompson" +msgstr "" +"Programoval/Návrh: Alfredo K. Kojima\n" +"Pøedloha: Marco van Hylckama Vlieg\n" +"Spolupracoval: James Thompson" + +msgid "could not locate image file %s\n" +msgstr "nelze najít soubor %s s obrázkem\n" + +msgid "Loading Window Maker configuration files..." +msgstr "Ètu konfiguraèní soubory Window Makeru" + +msgid "Initializing configuration panels..." +msgstr "Inicializace konfiguraèních panelù..." + +msgid "Window Maker domain (%s) is corrupted!" +msgstr "Doména Window Makeru (%s) je po¹kozena!" + +msgid "Could not load Window Maker domain (%s) from defaults database." +msgstr "z databáze standardù nelze naèíst doménu Window Makeru (%s)." + +msgid "could not extract version information from Window Maker" +msgstr "od Window Makeru nelze získat èíslo verze" + +msgid "Make sure Window Maker is in your search path." +msgstr "" +"Zajistìte, aby byl Window Maker v prohledávaných adresáøích ($PATH)." + +msgid "" +"Could not extract version from Window Maker. Make sure it is correctly " +"installed." +msgstr "" +"Od Window Makeru nelze získat èíslo verze. Zjistìte, je-li správne " +"instalován." + +msgid "" +"WPrefs only supports Window Maker 0.18.0 or newer.\n" +"The version installed is %i.%i.%i\n" +msgstr "" +"Program WPrefs podporuje Window Maker 0.18.0 a vy¹¹í.\n" +"Instalovaná verze je %i.%i.%i\n" + +msgid "" +"Window Maker %i.%i.%i, which is installed in your system, is not fully " +"supported by this version of WPrefs." +msgstr "" +"Instalovaný Window Maker %i.%i.%i není plnì touto verzí programu WPrefs " +"podporován." + +msgid "could not run \"wmaker -global_defaults_path\"." +msgstr "nelze provést \"wmaker -global_defaults_path\"" + +msgid "Could not load global Window Maker domain (%s)." +msgstr "Nelze naèíst globální doménu pro Window Maker (%s)." + +msgid "" +"bad speed value for option %s\n" +". Using default Medium" +msgstr "" +"pro volbu %s je chybnì urèená\n" +"ryclost. Pou¾ita 'Medium'" + \ No newline at end of file diff --git a/WPrefs.app/po/hr.po b/WPrefs.app/po/hr.po dissimilarity index 73% index 6023b7d7..eceac5d2 100644 --- a/WPrefs.app/po/hr.po +++ b/WPrefs.app/po/hr.po @@ -1,1268 +1,1274 @@ -# Message catalog for WindowMaker -# Copyright (C) 1998 Free Software Foundation, Inc. -# David Sauer , 1998. -# -msgid "" -msgstr "" -"Project-Id-Version: WPrefs 0.6 (WindowMaker 0.20.x)\n" -"POT-Creation-Date: 1998-10-24 12:35+0200\n" -"PO-Revision-Date: 1998-10-27 13:02+01:00\n" -"Last-Translator: David Sauer \n" -"Language-Team: czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-2\n" -"Content-Transfer-Encoding: unknown\n" - -#: ../../WPrefs.app/Configurations.c:142 ../../WPrefs.app/Configurations.c:148 -#: ../../WPrefs.app/MouseSettings.c:510 ../../WPrefs.app/WindowHandling.c:270 -#: ../../WPrefs.app/WindowHandling.c:282 ../../WPrefs.app/Workspace.c:71 -#: ../../WPrefs.app/Workspace.c:77 -#, c-format -msgid "could not load icon %s" -msgstr "nelze naèíst ikonu %s" - -#: ../../WPrefs.app/Configurations.c:156 ../../WPrefs.app/Workspace.c:85 -#, c-format -msgid "could not process icon %s:" -msgstr "nelze zpracovat ikonu %s:" - -#: ../../WPrefs.app/Configurations.c:181 ../../WPrefs.app/Workspace.c:124 -#, c-format -msgid "could not load image file %s" -msgstr "ze souboru %s nelze naèíst obrázek" - -#: ../../WPrefs.app/Configurations.c:195 -msgid "Icon Slide Speed" -msgstr "Rychlost klouzání ikony" - -#: ../../WPrefs.app/Configurations.c:201 -msgid "Shade Animation Speed" -msgstr "Rychlost zmìny okna na titulek" - -#: ../../WPrefs.app/Configurations.c:234 ../../WPrefs.app/Configurations.c:246 -#: ../../WPrefs.app/Focus.c:310 ../../WPrefs.app/Focus.c:321 -#: ../../WPrefs.app/MenuPreferences.c:135 -#: ../../WPrefs.app/MenuPreferences.c:146 -#: ../../WPrefs.app/MenuPreferences.c:174 -#: ../../WPrefs.app/MenuPreferences.c:189 ../../WPrefs.app/MouseSettings.c:538 -#: ../../WPrefs.app/MouseSettings.c:549 ../../WPrefs.app/MouseSettings.c:604 -#: ../../WPrefs.app/MouseSettings.c:615 ../../WPrefs.app/MouseSettings.c:651 -#: ../../WPrefs.app/MouseSettings.c:666 ../../WPrefs.app/MouseSettings.c:682 -#: ../../WPrefs.app/WPrefs.c:398 ../../WPrefs.app/WPrefs.c:416 -#, c-format -msgid "could not load icon file %s" -msgstr "nelze naèíst soubor s ikonou %s" - -#: ../../WPrefs.app/Configurations.c:262 -msgid "Titlebar Style" -msgstr "Styl titulku" - -#: ../../WPrefs.app/Configurations.c:299 -msgid "Animations and Sound" -msgstr "Animace a Zvuky" - -#: ../../WPrefs.app/Configurations.c:305 -msgid "Animations" -msgstr "Animace" - -#: ../../WPrefs.app/Configurations.c:321 -msgid "Superfluous" -msgstr "Animace+" - -#: ../../WPrefs.app/Configurations.c:337 -msgid "Sounds" -msgstr "Zvuky" - -#: ../../WPrefs.app/Configurations.c:354 -msgid "Note: sound requires a module distributed separately" -msgstr "Poznámka: zvuk vy¾aduje samostatný modul" - -#: ../../WPrefs.app/Configurations.c:364 -msgid "Dithering colormap for 8bpp" -msgstr "Ditherovat na 8bpp" - -#: ../../WPrefs.app/Configurations.c:369 -msgid "Disable dithering in any visual/depth" -msgstr "Zaka¾ jakékoli ditherování" - -#: ../../WPrefs.app/Configurations.c:390 -msgid "More colors for applications" -msgstr "Barvy aplikacím" - -#: ../../WPrefs.app/Configurations.c:397 -msgid "More colors for WindowMaker" -msgstr "Barvy WindowMakeru" - -#: ../../WPrefs.app/Configurations.c:450 -msgid "Other Configurations" -msgstr "Dal¹í konfigurace" - -#: ../../WPrefs.app/Expert.c:70 -msgid "Do not set non-WindowMaker specific parameters (do not use xset)" -msgstr "Nenastavovat parametry mimo WindowMaker (nepou¾ívat xset)" - -#: ../../WPrefs.app/Expert.c:71 -msgid "Automatically save session when exiting WindowMaker" -msgstr "Pøi ukonèení WindowMakeru automaticky ulo¾it sezení" - -#: ../../WPrefs.app/Expert.c:72 -msgid "Use SaveUnder in window frames, icons, menus and other objects" -msgstr "Pou¾ívat SaveUnder pøi vykreslení rámeèkù, menu, ikon apod." - -#: ../../WPrefs.app/Expert.c:73 -msgid "Disable cycling color highlighting of icons." -msgstr "Zaka¾ rotaci barev pøi zvýraznìní ikon" - -#: ../../WPrefs.app/Expert.c:103 -msgid "Expert User Preferences" -msgstr "Nastavení pro experty" - -#: ../../WPrefs.app/Focus.c:79 -#, c-format -msgid "bad option value %s for option FocusMode. Using default Manual" -msgstr "chybná hodnota %s pro FocusMode. Pou¾ívám Manual" - -#: ../../WPrefs.app/Focus.c:92 -#, c-format -msgid "bad option value %s for option ColormapMode. Using default Manual" -msgstr "chybná hodnota %s pro ColormapMode. Pou¾ívám Manual" - -#: ../../WPrefs.app/Focus.c:190 -msgid "" -"Click on the window to set\n" -"keyboard input focus." -msgstr "" -"«uk my¹í v oknì zamìøí\n" -"vstup z klávesnice" - -#: ../../WPrefs.app/Focus.c:194 -msgid "" -"Set keyboard input focus to\n" -"the window under the mouse pointer,\n" -"including the root window." -msgstr "" -"Nastav zamìøení vstupu\n" -"na okno pod ukazatelem my¹i.\n" -"(vèetnì hlavního okna)" - -#: ../../WPrefs.app/Focus.c:199 -msgid "" -"Set keyboard input focus to\n" -"the window under the mouse pointer,\n" -"except the root window." -msgstr "" -"Nastav zamìøení vstupu\n" -"na okno pod ukazatelem my¹i.\n" -"(mimo hlavního okna)" - -#: ../../WPrefs.app/Focus.c:243 -msgid "Input Focus Mode" -msgstr "Zpùsob zamìøení okna" - -#: ../../WPrefs.app/Focus.c:248 -msgid "Click window to focus" -msgstr "«uk my¹í zamìøí" - -#: ../../WPrefs.app/Focus.c:249 -msgid "Focus follows mouse" -msgstr "Pohyb my¹í zamìøí" - -#: ../../WPrefs.app/Focus.c:250 -msgid "\"Sloppy\" focus" -msgstr "Re¾im \"Sloopy\"" - -#: ../../WPrefs.app/Focus.c:265 -msgid "Install colormap in the window..." -msgstr "Nastavit mapu barev v oknì.." - -#: ../../WPrefs.app/Focus.c:270 -msgid "...that has the input focus." -msgstr "... které má zamìøení." - -#: ../../WPrefs.app/Focus.c:275 -msgid "...that is under the mouse pointer." -msgstr "... které je pod my¹í." - -#: ../../WPrefs.app/Focus.c:284 -msgid "Automatic Window Raise Delay" -msgstr "Prodleva pøi vyzdvihnutí oken" - -#: ../../WPrefs.app/Focus.c:341 -msgid "msec" -msgstr "ms" - -#: ../../WPrefs.app/Focus.c:358 -msgid "Do not let aplications receive the click used to focus windows." -msgstr "Nepovolit aplikaci pøijmout »uk my¹í k zamìøení oken." - -#: ../../WPrefs.app/Focus.c:364 -msgid "Automatically focus new windows." -msgstr "Automaticky zamìøit nová okna." - -#: ../../WPrefs.app/Focus.c:385 -msgid "Window Focus Preferences" -msgstr "Nastavení zamìøení oken" - -#: ../../WPrefs.app/KeyboardSettings.c:72 -msgid "Initial Key Repeat" -msgstr "Zaèít opakovat po ..." - -#: ../../WPrefs.app/KeyboardSettings.c:113 -msgid "Key Repeat Rate" -msgstr "Rychlost opakování kláves" - -#: ../../WPrefs.app/KeyboardSettings.c:153 -msgid "Type here to test" -msgstr "Zkuste klávesnici zde" - -#: ../../WPrefs.app/KeyboardSettings.c:172 -msgid "Keyboard Preferences" -msgstr "Nastavení klávesnice" - -#: ../../WPrefs.app/KeyboardShortcuts.c:161 ../../WPrefs.app/Menu.c:923 -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/MenuGuru.c:263 -msgid "Cancel" -msgstr "Nic" - -#: ../../WPrefs.app/KeyboardShortcuts.c:162 -msgid "Press the desired shortcut key(s) or click Cancel to stop capturing." -msgstr "Stisknìte po¾adované klávesy nebo pou¾ijete \"Nic\"." - -#: ../../WPrefs.app/KeyboardShortcuts.c:180 -#: ../../WPrefs.app/KeyboardShortcuts.c:374 ../../WPrefs.app/Menu.c:935 -#: ../../WPrefs.app/Menu.c:1157 -msgid "Capture" -msgstr "Snímat" - -#: ../../WPrefs.app/KeyboardShortcuts.c:181 -#: ../../WPrefs.app/KeyboardShortcuts.c:381 -msgid "Click Capture to interactively define the shortcut key." -msgstr "Pou¾ijte \"Snímat\" k definici klávesy." - -#: ../../WPrefs.app/KeyboardShortcuts.c:299 -msgid "Actions" -msgstr "Akce" - -#: ../../WPrefs.app/KeyboardShortcuts.c:313 -msgid "Open applications menu" -msgstr "Otevøít menu aplikací" - -#: ../../WPrefs.app/KeyboardShortcuts.c:314 -msgid "Open window list menu" -msgstr "Otevøít menu s okny" - -#: ../../WPrefs.app/KeyboardShortcuts.c:315 -msgid "Open window commands menu" -msgstr "Otevøít menu s pøikazy pro okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:316 -msgid "Hide active application" -msgstr "Skrýt aplikaci" - -#: ../../WPrefs.app/KeyboardShortcuts.c:317 -msgid "Miniaturize active window" -msgstr "Miniaturizace" - -#: ../../WPrefs.app/KeyboardShortcuts.c:318 -msgid "Close active window" -msgstr "Uzavøít okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:319 -msgid "Maximize active window" -msgstr "Maximalizace okna" - -#: ../../WPrefs.app/KeyboardShortcuts.c:320 -msgid "Maximize active window vertically" -msgstr "Vertikální maximalizace" - -#: ../../WPrefs.app/KeyboardShortcuts.c:321 -msgid "Raise active window" -msgstr "Aktivní okno vý¹e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:322 -msgid "Lower active window" -msgstr "Aktivní okno ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:323 -msgid "Raise/Lower window under mouse pointer" -msgstr "Okno pod ukazatelem my¹i vý¹e/ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:324 -msgid "Shade active window" -msgstr "Z okna jen titulek" - -#: ../../WPrefs.app/KeyboardShortcuts.c:325 -msgid "Select active window" -msgstr "Vyber okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:326 -msgid "Focus next window" -msgstr "Zamìrit dal¹í oknp" - -#: ../../WPrefs.app/KeyboardShortcuts.c:327 -msgid "Focus previous window" -msgstr "Zamìøit pøedchozí okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:328 -msgid "Switch to next workspace" -msgstr "Dal¹í plocha" - -#: ../../WPrefs.app/KeyboardShortcuts.c:329 -msgid "Switch to previous workspace" -msgstr "Pøedchozí plocha" - -#: ../../WPrefs.app/KeyboardShortcuts.c:330 -msgid "Switch to next ten workspaces" -msgstr "Dal¹ích 10 ploch" - -#: ../../WPrefs.app/KeyboardShortcuts.c:331 -msgid "Switch to previous ten workspaces" -msgstr "Pøedchozích 10 ploch" - -#: ../../WPrefs.app/KeyboardShortcuts.c:332 -msgid "Switch to workspace 1" -msgstr "Pøepni na plochu 1" - -#: ../../WPrefs.app/KeyboardShortcuts.c:333 -msgid "Switch to workspace 2" -msgstr "Pøepni na plochu 2" - -#: ../../WPrefs.app/KeyboardShortcuts.c:334 -msgid "Switch to workspace 3" -msgstr "Pøepni na plochu 3" - -#: ../../WPrefs.app/KeyboardShortcuts.c:335 -msgid "Switch to workspace 4" -msgstr "Pøepni na plochu 4" - -#: ../../WPrefs.app/KeyboardShortcuts.c:336 -msgid "Switch to workspace 5" -msgstr "Pøepni na plochu 5" - -#: ../../WPrefs.app/KeyboardShortcuts.c:337 -msgid "Switch to workspace 6" -msgstr "Pøepni na plochu 6" - -#: ../../WPrefs.app/KeyboardShortcuts.c:338 -msgid "Switch to workspace 7" -msgstr "Pøepni na plochu 7" - -#: ../../WPrefs.app/KeyboardShortcuts.c:339 -msgid "Switch to workspace 8" -msgstr "Pøepni na plochu 8" - -#: ../../WPrefs.app/KeyboardShortcuts.c:340 -msgid "Switch to workspace 9" -msgstr "Pøepni na plochu 9" - -#: ../../WPrefs.app/KeyboardShortcuts.c:341 -msgid "Switch to workspace 10" -msgstr "Pøepni na plochu 10" - -#: ../../WPrefs.app/KeyboardShortcuts.c:342 -msgid "Raise Clip" -msgstr "Sponku vý¹e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:343 -msgid "Lower Clip" -msgstr "Sponku ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:344 -msgid "Raise/Lower Clip" -msgstr "Sponku vý¹e/ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:357 ../../WPrefs.app/Menu.c:1146 -msgid "Shortcut" -msgstr "Zkratka" - -#: ../../WPrefs.app/KeyboardShortcuts.c:368 -msgid "Clear" -msgstr "Vyma¾" - -#: ../../WPrefs.app/KeyboardShortcuts.c:429 -msgid "Keyboard Shortcut Preferences" -msgstr "Nastavení klávesových zkratek" - -#: ../../WPrefs.app/Menu.c:373 -msgid "Window Manager" -msgstr "Mana¾er oken" - -#: ../../WPrefs.app/Menu.c:375 -msgid "Program to open files" -msgstr "Program na otvírání souborù" - -#: ../../WPrefs.app/Menu.c:377 ../../WPrefs.app/Menu.c:1133 -msgid "Program to Run" -msgstr "Spustit program" - -#: ../../WPrefs.app/Menu.c:427 ../../WPrefs.app/Menu.c:428 -#, c-format -msgid "New Command %i" -msgstr "Nový pøíkaz %i" - -#: ../../WPrefs.app/Menu.c:435 -msgid "New Submenu" -msgstr "Nové podmenu" - -#: ../../WPrefs.app/Menu.c:440 -msgid "External Menu" -msgstr "Externí menu" - -#: ../../WPrefs.app/Menu.c:447 -msgid "Workspaces" -msgstr "Pracovní plochy" - -#: ../../WPrefs.app/Menu.c:1017 ../../WPrefs.app/Menu.c:1032 -msgid "Commands" -msgstr "Pøíkazy" - -#: ../../WPrefs.app/Menu.c:1018 ../../WPrefs.app/Menu.c:1033 -msgid "Add Command" -msgstr "Pøidat pøíkaz" - -#: ../../WPrefs.app/Menu.c:1019 ../../WPrefs.app/Menu.c:1034 -msgid "Add Submenu" -msgstr "Pøidat podmenu" - -#: ../../WPrefs.app/Menu.c:1020 ../../WPrefs.app/Menu.c:1035 -msgid "Add External Menu" -msgstr "Pøidat externí menu" - -#: ../../WPrefs.app/Menu.c:1021 ../../WPrefs.app/Menu.c:1036 -msgid "Add Workspace Menu" -msgstr "Pøidat menu ploch" - -#: ../../WPrefs.app/Menu.c:1022 ../../WPrefs.app/Menu.c:1037 -msgid "Remove Item" -msgstr "Odstraò polo¾ku" - -#: ../../WPrefs.app/Menu.c:1023 ../../WPrefs.app/Menu.c:1038 -msgid "Cut Item" -msgstr "Vyøízni polo¾ku" - -#: ../../WPrefs.app/Menu.c:1024 ../../WPrefs.app/Menu.c:1039 -msgid "Copy Item" -msgstr "Zkopíruj polo¾ku" - -#: ../../WPrefs.app/Menu.c:1025 ../../WPrefs.app/Menu.c:1040 -msgid "Paste Item" -msgstr "Vlo¾ polo¾ku" - -#: ../../WPrefs.app/Menu.c:1069 -msgid "Label" -msgstr "Oznaèení" - -#: ../../WPrefs.app/Menu.c:1082 -msgid "Command" -msgstr "Pøíkaz" - -#: ../../WPrefs.app/Menu.c:1087 -msgid "Run Program" -msgstr "Spus» program" - -#: ../../WPrefs.app/Menu.c:1088 -msgid "Arrange Icons" -msgstr "Srovnej ikony" - -#: ../../WPrefs.app/Menu.c:1089 -msgid "Hide Others" -msgstr "Skryj ostatní" - -#: ../../WPrefs.app/Menu.c:1090 -msgid "Show All Windows" -msgstr "Uka¾ v¹echna okna" - -#: ../../WPrefs.app/Menu.c:1091 -msgid "Exit WindowMaker" -msgstr "Ukonèit mana¾era oken" - -#: ../../WPrefs.app/Menu.c:1092 -msgid "Exit X Session" -msgstr "Ukonèit sezení X" - -#: ../../WPrefs.app/Menu.c:1093 -msgid "Start window manager" -msgstr "Odstartovat mana¾er oken" - -#: ../../WPrefs.app/Menu.c:1094 -msgid "Restart WindowMaker" -msgstr "RestartWindowMakeru" - -#: ../../WPrefs.app/Menu.c:1095 -msgid "Save Session" -msgstr "Ulo¾it stav sezení" - -#: ../../WPrefs.app/Menu.c:1096 -msgid "Clear Session" -msgstr "Vymazat sezení" - -#: ../../WPrefs.app/Menu.c:1097 -msgid "Refresh Screen" -msgstr "Obnovit obrazovku" - -#: ../../WPrefs.app/Menu.c:1098 -msgid "Info Panel" -msgstr "Informace" - -#: ../../WPrefs.app/Menu.c:1099 -msgid "Legal Panel" -msgstr "Copyright" - -#: ../../WPrefs.app/Menu.c:1107 -msgid "Open workspace menu" -msgstr "Otevøít menu ploch" - -#: ../../WPrefs.app/Menu.c:1114 -msgid "No confirmation panel" -msgstr "Bez ukonèovacího dialogu" - -#: ../../WPrefs.app/Menu.c:1120 -msgid "Menu Path/Directory List" -msgstr "Cesta k menu/adresáø" - -#: ../../WPrefs.app/Menu.c:1165 -msgid "Ask help to the Guru" -msgstr "Zeptat se Mistra" - -#: ../../WPrefs.app/Menu.c:1285 -msgid "" -"The format of the current menu in ~/G/D/WMRootMenu is not supported by " -"WPrefs. A new menu will be created.\n" -"You can also replace ~/G/D/WMRootMenu with ~/G/L/W/plmenu to get the default " -"menu." -msgstr "" -"Aktuální formát menu v ~/G/D/WMRootMenu není podporován programem WPrefs. Bude vytvoøeno nové menu.\n" -"Standardní menu získáte pøíkazem \"cp ~/G/L/W/plmenu ~/G/D/WMRootMenu\"." - -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1295 -#: ../../WPrefs.app/WPrefs.c:585 -msgid "Warning" -msgstr "Varování" - -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1296 -#: ../../WPrefs.app/MenuGuru.c:119 ../../WPrefs.app/MenuGuru.c:126 -#: ../../WPrefs.app/MenuGuru.c:140 ../../WPrefs.app/MouseSettings.c:156 -#: ../../WPrefs.app/Text.c:181 ../../WPrefs.app/WPrefs.c:546 -#: ../../WPrefs.app/WPrefs.c:551 ../../WPrefs.app/WPrefs.c:562 -#: ../../WPrefs.app/WPrefs.c:572 ../../WPrefs.app/WPrefs.c:578 -#: ../../WPrefs.app/WPrefs.c:585 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 -msgid "OK" -msgstr "OK" - -#: ../../WPrefs.app/Menu.c:1295 -msgid "Any changes made in this section will not be saved" -msgstr "Jakékoli zmìny v této sekci budou zru¹eny" - -#: ../../WPrefs.app/Menu.c:1360 -msgid "Applications Menu Definition" -msgstr "Definice menu aplikací" - -#: ../../WPrefs.app/MenuGuru.c:106 -msgid "Menu Guru - Select Type" -msgstr "Menu Mistra - Vyberte typ" - -#: ../../WPrefs.app/MenuGuru.c:111 ../../WPrefs.app/MenuGuru.c:133 -#: ../../WPrefs.app/MenuGuru.c:251 -msgid "Next" -msgstr "Dal¹í" - -#: ../../WPrefs.app/MenuGuru.c:114 -msgid "Menu Guru - Select Menu File" -msgstr "Mistrova nabídka - Vyberte soubor menu" - -#: ../../WPrefs.app/MenuGuru.c:122 -msgid "Menu Guru - Select Pipe Command" -msgstr "Mistrova nabídka - Vyberte pøíkaz roury" - -#: ../../WPrefs.app/MenuGuru.c:129 -msgid "Menu Guru - Select Directories" -msgstr "Mistrova nabídka - Vyberte adresáøe" - -#: ../../WPrefs.app/MenuGuru.c:136 -msgid "Menu Guru - Select Command" -msgstr "Mistrova nabídka - Vyberte pøíkaz" - -#: ../../WPrefs.app/MenuGuru.c:257 -msgid "Back" -msgstr "Zpìt" - -#: ../../WPrefs.app/MenuGuru.c:271 -msgid "" -"This process will help you create a submenu which definition is located in " -"another file or is created dynamically.\n" -"What do you want to use as the contents of the submenu?" -msgstr "" -"Mistr vám pomù¾e vytvoøit podmenu ze souboru nebo vytvoøené dynamicky.\n" -"Co chcete pou¾ít jako obsah podmenu?" - -#: ../../WPrefs.app/MenuGuru.c:279 -msgid "" -"A file containing the menu definition in the plain text (non-property list) " -"menu format." -msgstr "Soubor obsahující definici menu jako obyèejný text s daným formátem." - -#: ../../WPrefs.app/MenuGuru.c:285 -msgid "The menu definition generated by a script/program read through a pipe." -msgstr "" -"Definice menu generovaná sriptem nebo programem, definice bude ètena z roury." - -#: ../../WPrefs.app/MenuGuru.c:291 -msgid "The files in one or more directories." -msgstr "Soubory v jednom nebo více adresáøích." - -#: ../../WPrefs.app/MenuGuru.c:303 -msgid "Type the path for the menu file:" -msgstr "Zadejte cestu k souboru s menu:" - -#: ../../WPrefs.app/MenuGuru.c:318 -msgid "" -"The menu file must contain a menu in the plain text menu file format. This " -"format is described in the menu files included with WindowMaker, probably at " -"~/GNUstep/Library/WindowMaker/menu" -msgstr "Soubor s menu musí obsahovat popis menu jako obyèejný text. Tento formát je zøejmý ze souboru s menu, který je distribuován s Window Makerem, pravdìpodobnì v souboru ~/GNUstep/Library/WindowMaker/menu" - -#: ../../WPrefs.app/MenuGuru.c:328 -msgid "Type the command that will generate the menu definition:" -msgstr "Zadejte pøíkaz, který vygeneruje definici menu:" - -#: ../../WPrefs.app/MenuGuru.c:338 -msgid "" -"The command supplied must generate and output a valid menu definition to " -"stdout. This definition should be in the plain text menu file format, " -"described in the menu files included with WindowMaker, usually at " -"~/GNUstep/Library/WindowMaker/menu" -msgstr "Pøíkaz musí generovat a standardní výstup zapsat správnou definici menu. Tato definice musí být ve formì neformátovaného textu, jak je ukázáno v distribuèním souboru s menu, obvykle v ~/GNUstep/Library/WindowMaker/menu" - -#: ../../WPrefs.app/MenuGuru.c:350 ../../WPrefs.app/MenuGuru.c:372 -#: ../../WPrefs.app/MenuGuru.c:394 -msgid "" -"Type the path for the directory. You can type more than one path by " -"separating them with spaces." -msgstr "Zadejte cestu pro adresáø. Pokud chcete zadat více adresáøù, oddìlte je mezerami." - -#: ../../WPrefs.app/MenuGuru.c:361 ../../WPrefs.app/MenuGuru.c:383 -#: ../../WPrefs.app/MenuGuru.c:405 -msgid "" -"The menu generated will have an item for each file in the directory. The " -"directories can contain program executables or data files (such as jpeg " -"images)." -msgstr "Generované menu bude mít polo¾ku pro ka¾dý soubor v adresáøi. Adresáøe mohou obsahovat programy nebo datové soubory, napøíklad obrázky formátu jpeg." - -#: ../../WPrefs.app/MenuGuru.c:415 -msgid "" -"If the directory contain data files, type the command used to open these " -"files. Otherwise, leave it in blank." -msgstr "Pokud adresáø obsahuje datové soubory, zadejte pøíkaz pro jejich otevøení. Jinak ponechte prázdné." - -#: ../../WPrefs.app/MenuGuru.c:426 -msgid "" -"Each file in the directory will have an item and they will be opened with " -"the supplied command.For example, if the directory contains image files and " -"the command is \"xv -root\", each file in the directory will have a menu " -"item like \"xv -root imagefile\"." -msgstr "Ka¾dý soubor v adresáøi bude mít polo¾ku v menu a bude otevøen pomocí daného pøíkazu. Napøíklad, pokud adresáø obsahuje soubory s obrázky a pøíkaz je \"xv -root\", ka¾dý soubor bude mít polo¾ku \"xv -root soubor_s_obrázkem." - -#: ../../WPrefs.app/MenuPreferences.c:112 -msgid "Menu Scrolling Speed" -msgstr "Rychlost posunu menu" - -#: ../../WPrefs.app/MenuPreferences.c:161 -msgid "Submenu Alignment" -msgstr "Zarovnání submenu" - -#: ../../WPrefs.app/MenuPreferences.c:204 -msgid "" -"Always open submenus inside the screen, instead of scrolling.\n" -"Note: this can be an annoyance at some circumstances." -msgstr "" -"Menu otevøít v¾dy na plo¹e obrazovky (neposouvat).\n" -"Poznámka: nìkdy mù¾e zpùsobit problémy." - -#: ../../WPrefs.app/MenuPreferences.c:209 -msgid "Scroll off-screen menus when pointer is moved over them." -msgstr "Posouvat menu pøi pohybu ukazatele nad tímto menu." - -#: ../../WPrefs.app/MenuPreferences.c:229 -msgid "Menu Preferences" -msgstr "Nastavení menu" - -#: ../../WPrefs.app/MouseSettings.c:154 ../../WPrefs.app/Text.c:181 -#: ../../WPrefs.app/WPrefs.c:546 ../../WPrefs.app/WPrefs.c:551 -#: ../../WPrefs.app/WPrefs.c:560 ../../WPrefs.app/WPrefs.c:570 -#: ../../WPrefs.app/WPrefs.c:578 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 -msgid "Error" -msgstr "Chyba" - -#: ../../WPrefs.app/MouseSettings.c:155 -msgid "" -"Invalid mouse acceleration threshold value. Must be the number of pixels to " -"travel before accelerating." -msgstr "Chybná hodnota pro práh zrychlení my¹i. Zadejte èíslo oznaèující poèet pixelù pøed akcelarecí." - -#: ../../WPrefs.app/MouseSettings.c:209 -#, c-format -msgid "mouse button %s not supported by WPrefs." -msgstr "tlaèítko my¹i %s není podporováno." - -#: ../../WPrefs.app/MouseSettings.c:243 ../../WPrefs.app/MouseSettings.c:254 -#: ../../WPrefs.app/MouseSettings.c:265 -#, c-format -msgid "bad value %s for option %s" -msgstr "chybná hodnota %s pro volbu %s" - -#: ../../WPrefs.app/MouseSettings.c:325 -#, c-format -msgid "" -"modifier key %s for option ModifierKey was not recognized. Using %s as " -"default" -msgstr "" -"modifikátor klávesy %s pro volbu \"ModifierKey\" není znám. Pou¾ívám %s." - -#: ../../WPrefs.app/MouseSettings.c:350 -msgid "could not retrieve keyboard modifier mapping" -msgstr "nelze pøevzít mapování modifikátorù kláves" - -#: ../../WPrefs.app/MouseSettings.c:497 -msgid "Mouse Speed" -msgstr "Rychlost my¹i" - -#: ../../WPrefs.app/MouseSettings.c:564 -msgid "Threshold:" -msgstr "Mez:" - -#: ../../WPrefs.app/MouseSettings.c:579 -msgid "Double-Click Delay" -msgstr "Prodleva pro dvojité »uknutí" - -#: ../../WPrefs.app/MouseSettings.c:623 -msgid "Test" -msgstr "Test" - -#: ../../WPrefs.app/MouseSettings.c:633 -msgid "Workspace Mouse Actions" -msgstr "Akce my¹í" - -#: ../../WPrefs.app/MouseSettings.c:638 -msgid "Disable mouse actions" -msgstr "Zaka¾ akce my¹í" - -#: ../../WPrefs.app/MouseSettings.c:691 -msgid "Applications menu" -msgstr "Menu aplikací" - -#: ../../WPrefs.app/MouseSettings.c:697 -msgid "Window list menu" -msgstr "Seznam oken" - -#: ../../WPrefs.app/MouseSettings.c:703 -msgid "Select windows" -msgstr "Vyber okna" - -#: ../../WPrefs.app/MouseSettings.c:738 -msgid "Mouse Grab Modifier" -msgstr "Modifikátor pro my¹" - -#: ../../WPrefs.app/MouseSettings.c:772 -#, c-format -msgid "could not create %s" -msgstr "nelze vytvoøit \"%s\"" - -#: ../../WPrefs.app/MouseSettings.c:788 -#, c-format -msgid "could not create temporary file %s" -msgstr "nelze vytvoøit doèasný soubor %s" - -#: ../../WPrefs.app/MouseSettings.c:813 -#, c-format -msgid "could not rename file %s to %s\n" -msgstr "soubor %s nelze pøejmenovat na %s\n" - -#: ../../WPrefs.app/MouseSettings.c:896 -msgid "Mouse Preferences" -msgstr "Nastavení my¹i" - -#: ../../WPrefs.app/Paths.c:82 -msgid "bad value in option IconPath. Using default path list" -msgstr "ve volbì IconPath je nesprávná hodnota. Pou¾ívám standardní nastavení" - -#: ../../WPrefs.app/Paths.c:99 -msgid "bad value in option PixmapPath. Using default path list" -msgstr "ve volbì PixmapPath je chybná hodnota. Pou¾ívám standard." - -#: ../../WPrefs.app/Paths.c:301 -msgid "Icon Search Paths" -msgstr "Adresáøe ikon" - -#: ../../WPrefs.app/Paths.c:313 ../../WPrefs.app/Paths.c:349 -msgid "Add" -msgstr "Pøidat" - -#: ../../WPrefs.app/Paths.c:320 ../../WPrefs.app/Paths.c:356 -msgid "Remove" -msgstr "Odstranit" - -#: ../../WPrefs.app/Paths.c:337 -msgid "Pixmap Search Paths" -msgstr "Adresáøe pro obrázky" - -#: ../../WPrefs.app/Paths.c:385 -msgid "Search Path Configuration" -msgstr "Konfigurace prohledávaných cest" - -#: ../../WPrefs.app/Preferences.c:142 -msgid "Size Display" -msgstr "Zobrazení velikosti" - -#: ../../WPrefs.app/Preferences.c:147 ../../WPrefs.app/Preferences.c:163 -msgid "Corner of screen" -msgstr "Roh obrazovky" - -#: ../../WPrefs.app/Preferences.c:148 ../../WPrefs.app/Preferences.c:164 -msgid "Center of screen" -msgstr "Støed obrazovky" - -#: ../../WPrefs.app/Preferences.c:149 ../../WPrefs.app/Preferences.c:165 -msgid "Center of resized window" -msgstr "Støed okna" - -#: ../../WPrefs.app/Preferences.c:150 -msgid "Technical drawing-like" -msgstr "Jako kóty výkresù" - -#: ../../WPrefs.app/Preferences.c:158 -msgid "Position Display" -msgstr "Zobrazení pozice" - -#: ../../WPrefs.app/Preferences.c:173 -msgid "Show balloon text for..." -msgstr "Balónová nápovìda pro..." - -#: ../../WPrefs.app/Preferences.c:180 -msgid "incomplete window titles" -msgstr "nekompletní titulky oken" - -#: ../../WPrefs.app/Preferences.c:181 -msgid "miniwindow titles" -msgstr "ikony" - -#: ../../WPrefs.app/Preferences.c:182 -msgid "application/dock icons" -msgstr "aplikaèní/ukotvené ikony" - -#: ../../WPrefs.app/Preferences.c:195 -msgid "Raise window when switching focus with keyboard (CirculateRaise)." -msgstr "Pøi zmìnì zamìøení pøes klávesnici zdvihnout okno." - -#: ../../WPrefs.app/Preferences.c:215 -msgid "Miscellaneous Ergonomic Preferences" -msgstr "Rùzná nastavení ergonomie" - -#: ../../WPrefs.app/Text.c:179 -#, c-format -msgid "Invalid font %s." -msgstr "Chybný font %s." - -#: ../../WPrefs.app/Text.c:256 -msgid "Set Font..." -msgstr "Nastavit font..." - -#: ../../WPrefs.app/Text.c:262 -msgid "Window Title Font" -msgstr "Font titulku oken" - -#: ../../WPrefs.app/Text.c:263 -msgid "Menu Title Font" -msgstr "Font titulku menu" - -#: ../../WPrefs.app/Text.c:264 -msgid "Menu Item Font" -msgstr "Font polo¾ky menu" - -#: ../../WPrefs.app/Text.c:265 -msgid "Icon Title Font" -msgstr "Font titulkù ikon" - -#: ../../WPrefs.app/Text.c:266 -msgid "Clip Title Font" -msgstr "Font pro Sponku" - -#: ../../WPrefs.app/Text.c:267 -msgid "Geometry Display Font" -msgstr "Font zobrazení geometrie" - -#: ../../WPrefs.app/Text.c:280 -msgid "" -"Sample Text\n" -"abcdefghijklmnopqrstuvxywz\n" -"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" -"0123456789" -msgstr "" -"Pøíklad textu\n" -"abcdefghijklmnopqrstuvxywz\n" -"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" -"0123456789" - -#: ../../WPrefs.app/Text.c:285 -msgid "Alignment" -msgstr "Zarovnání" - -#: ../../WPrefs.app/Text.c:290 -msgid "Left" -msgstr "Vlevo" - -#: ../../WPrefs.app/Text.c:296 -msgid "Center" -msgstr "Centrovat" - -#: ../../WPrefs.app/Text.c:303 -msgid "Right" -msgstr "Vpravo" - -#: ../../WPrefs.app/Text.c:325 -msgid "Text Preferences" -msgstr "Nastavení textù" - -#: ../../WPrefs.app/TextureAndColor.c:384 -msgid "Window Title Bar" -msgstr "Titulek okna" - -#: ../../WPrefs.app/TextureAndColor.c:385 -msgid "Menu Title Bar" -msgstr "Menu titulku" - -#: ../../WPrefs.app/TextureAndColor.c:386 -msgid "Menu Items" -msgstr "Polo¾ky men" - -#: ../../WPrefs.app/TextureAndColor.c:387 -msgid "Workspace/Clip" -msgstr "Plocha/Sponka" - -#: ../../WPrefs.app/TextureAndColor.c:388 -msgid "Icons" -msgstr "Ikony" - -#: ../../WPrefs.app/TextureAndColor.c:399 -msgid "Focused Window" -msgstr "Zamìøené okno" - -#: ../../WPrefs.app/TextureAndColor.c:412 -#: ../../WPrefs.app/TextureAndColor.c:443 -#: ../../WPrefs.app/TextureAndColor.c:474 -msgid "Texture" -msgstr "Textura" - -#: ../../WPrefs.app/TextureAndColor.c:418 -#: ../../WPrefs.app/TextureAndColor.c:449 -#: ../../WPrefs.app/TextureAndColor.c:480 -msgid "Text Color" -msgstr "Barva textu" - -#: ../../WPrefs.app/TextureAndColor.c:423 -#: ../../WPrefs.app/TextureAndColor.c:454 -#: ../../WPrefs.app/TextureAndColor.c:485 -#: ../../WPrefs.app/TextureAndColor.c:509 -#: ../../WPrefs.app/TextureAndColor.c:575 -#: ../../WPrefs.app/TextureAndColor.c:652 -msgid "Set..." -msgstr "Nastavit..." - -#: ../../WPrefs.app/TextureAndColor.c:430 -msgid "Unfocused Window" -msgstr "Nezamìøená okna" - -#: ../../WPrefs.app/TextureAndColor.c:461 -msgid "Owner of Focused Window" -msgstr "Vlastník zamìøeného okna" - -#: ../../WPrefs.app/TextureAndColor.c:494 -msgid "Unselected Items" -msgstr "Nevybrané polo¾ky" - -#: ../../WPrefs.app/TextureAndColor.c:504 -#: ../../WPrefs.app/TextureAndColor.c:558 -msgid "Background" -msgstr "Pozadí" - -#: ../../WPrefs.app/TextureAndColor.c:519 -msgid "Normal Text" -msgstr "Normální text" - -#: ../../WPrefs.app/TextureAndColor.c:529 -msgid "Disabled Text" -msgstr "Zakazaný text" - -#: ../../WPrefs.app/TextureAndColor.c:538 -msgid "Selected Items" -msgstr "Vybrané polo¾ky" - -#: ../../WPrefs.app/TextureAndColor.c:548 -msgid "Text" -msgstr "Text" - -#: ../../WPrefs.app/TextureAndColor.c:566 -msgid "Menu Title Background" -msgstr "Pozadí pro titulek menu" - -#: ../../WPrefs.app/TextureAndColor.c:584 -msgid "Menu Title Text" -msgstr "Barva textu v menu" - -#: ../../WPrefs.app/TextureAndColor.c:596 -msgid "Workspace Background" -msgstr "Pozadí plochy" - -#: ../../WPrefs.app/TextureAndColor.c:605 -msgid "Change" -msgstr "Zmìnit" - -#: ../../WPrefs.app/TextureAndColor.c:611 -msgid "Clip Title Text" -msgstr "Barva pro text Sponky" - -#: ../../WPrefs.app/TextureAndColor.c:621 -msgid "Normal" -msgstr "Normální" - -#: ../../WPrefs.app/TextureAndColor.c:631 -msgid "Collapsed" -msgstr "Svinuto" - -#: ../../WPrefs.app/TextureAndColor.c:643 -msgid "Icon Background" -msgstr "Pozadí ikon" - -#: ../../WPrefs.app/TextureAndColor.c:677 -msgid "Texture and Color Preferences" -msgstr "Nastavení textur a barev" - -#: ../../WPrefs.app/WPrefs.c:196 -msgid "Window Maker Preferences" -msgstr "Nastavení Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:220 -msgid "Revert Page" -msgstr "Stránku zpìt" - -#: ../../WPrefs.app/WPrefs.c:226 -msgid "Revert All" -msgstr "V¹e zpìt" - -#: ../../WPrefs.app/WPrefs.c:232 -msgid "Save" -msgstr "Ulo¾" - -#: ../../WPrefs.app/WPrefs.c:238 -msgid "Close" -msgstr "Uzavøi" - -#: ../../WPrefs.app/WPrefs.c:262 -#, c-format -msgid "Version %s for Window Maker %s" -msgstr "Verze %s pro Window Maker %s" - -#: ../../WPrefs.app/WPrefs.c:269 -msgid "Starting..." -msgstr "Startuji..." - -#: ../../WPrefs.app/WPrefs.c:275 -msgid "" -"Programming/Design: Alfredo K. Kojima\n" -"Artwork: Marco van Hylckama Vlieg\n" -"More Programming: James Thompson" -msgstr "" -"Programoval/Návrh: Alfredo K. Kojima\n" -"Pøedloha: Marco van Hylckama Vlieg\n" -"Spolupracoval: James Thompson" - -#: ../../WPrefs.app/WPrefs.c:363 -#, c-format -msgid "could not locate image file %s\n" -msgstr "nelze najít soubor %s s obrázkem\n" - -#: ../../WPrefs.app/WPrefs.c:488 -msgid "Loading Window Maker configuration files..." -msgstr "Ètu konfiguraèní soubory Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:492 -msgid "Initializing configuration panels..." -msgstr "Inicializace konfiguraèních panelù..." - -#: ../../WPrefs.app/WPrefs.c:545 ../../WPrefs.app/WPrefs.c:601 -#, c-format -msgid "Window Maker domain (%s) is corrupted!" -msgstr "Doména Window Makeru (%s) je po¹kozena!" - -#: ../../WPrefs.app/WPrefs.c:549 -#, c-format -msgid "Could not load Window Maker domain (%s) from defaults database." -msgstr "z databáze standardù nelze naèíst doménu Window Makeru (%s)." - -#: ../../WPrefs.app/WPrefs.c:557 -msgid "could not extract version information from Window Maker" -msgstr "od Window Makeru nelze získat èíslo verze" - -#: ../../WPrefs.app/WPrefs.c:558 -msgid "Make sure Window Maker is in your search path." -msgstr "Zajistìte, aby byl Window Maker v prohledávaných adresáøích ($PATH)." - -#: ../../WPrefs.app/WPrefs.c:561 ../../WPrefs.app/WPrefs.c:571 -msgid "" -"Could not extract version from Window Maker. Make sure it is correctly " -"installed." -msgstr "Od Window Makeru nelze získat èíslo verze. Zjistìte, je-li správne instalován." - -#: ../../WPrefs.app/WPrefs.c:576 -#, c-format -msgid "" -"WPrefs only supports Window Maker 0.18.0 or newer.\n" -"The version installed is %i.%i.%i\n" -msgstr "" -"Program WPrefs podporuje Window Maker 0.18.0 a vy¹¹í.\n" -"Instalovaná verze je %i.%i.%i\n" - -#: ../../WPrefs.app/WPrefs.c:583 -#, c-format -msgid "" -"Window Maker %i.%i.%i, which is installed in your system, is not fully " -"supported by this version of WPrefs." -msgstr "Instalovaný Window Maker %i.%i.%i není plnì touto verzí programu WPrefs podporován." - -#: ../../WPrefs.app/WPrefs.c:590 -msgid "could not run \"wmaker -global_defaults_path\"." -msgstr "nelze provést \"wmaker -global_defaults_path\"" - -#: ../../WPrefs.app/WPrefs.c:605 -#, c-format -msgid "Could not load global Window Maker domain (%s)." -msgstr "Nelze naèíst globální doménu pro Window Maker (%s)." - -#: ../../WPrefs.app/WPrefs.c:851 -#, c-format -msgid "" -"bad speed value for option %s\n" -". Using default Medium" -msgstr "" -"pro volbu %s je chybnì urèená\n" -"ryclost. Pou¾ita 'Medium'" - -#: ../../WPrefs.app/WindowHandling.c:107 -#, c-format -msgid "bad option value %s in WindowPlacement. Using default value" -msgstr "chybná hodnota volby %s ve WindowPlacement. Pou¾ívám standardní" - -#: ../../WPrefs.app/WindowHandling.c:129 -msgid "invalid data in option WindowPlaceOrigin. Using default (0,0)" -msgstr "chybná data pro WindowPlaceOrigin. Pou¾ívám (0,0)" - -#: ../../WPrefs.app/WindowHandling.c:188 -msgid "Window Placement" -msgstr "Pokládání oken" - -#: ../../WPrefs.app/WindowHandling.c:193 -msgid "Automatic" -msgstr "Automatické" - -#: ../../WPrefs.app/WindowHandling.c:194 -msgid "Random" -msgstr "Náhodné" - -#: ../../WPrefs.app/WindowHandling.c:195 -msgid "Manual" -msgstr "Ruèní" - -#: ../../WPrefs.app/WindowHandling.c:196 -msgid "Cascade" -msgstr "Kaskádnì" - -#: ../../WPrefs.app/WindowHandling.c:202 -msgid "Placement Origin" -msgstr "Poèáteèní poloha" - -#: ../../WPrefs.app/WindowHandling.c:256 -msgid "Opaque Move" -msgstr "Pøesouvat plná okna" - -#: ../../WPrefs.app/WindowHandling.c:292 -msgid "When maximizing..." -msgstr "Pøi maximalizaci..." - -#: ../../WPrefs.app/WindowHandling.c:297 -msgid "...do not resize over icons" -msgstr "... nezvìt¹ovat pøes ikony" - -#: ../../WPrefs.app/WindowHandling.c:310 -msgid "Keep transients above their owners" -msgstr "Dialogy dr¾et nad vlastníky" - -#: ../../WPrefs.app/WindowHandling.c:337 -msgid "Window Handling Preferences" -msgstr "Nastavení práce s okny" - -#: ../../WPrefs.app/Workspace.c:137 -msgid "Workspace Navigation" -msgstr "Orientace v plochách" - -#: ../../WPrefs.app/Workspace.c:161 -msgid "drag windows between workspaces." -msgstr "táhnout okna mezi pracovními plochami." - -#: ../../WPrefs.app/Workspace.c:186 -msgid "" -"switch to first workspace when switching past the last workspace and " -"vice-versa" -msgstr "za poslední plochou pøepni opìt na první a opaènì" - -#: ../../WPrefs.app/Workspace.c:210 -msgid "create a new workspace when switching past the last workspace." -msgstr "za poslední plochou vytvoø pøi pøepnutí novou." - -#: ../../WPrefs.app/Workspace.c:218 -msgid "Dock/Clip" -msgstr "Dok/Sponka" - -#: ../../WPrefs.app/Workspace.c:287 -msgid "Workspace Preferences" -msgstr "Nastavení pracovní plochy " - -#: ../../WPrefs.app/main.c:56 -#, c-format -msgid "usage: %s [options]\n" -msgstr "pou¾ití: %s [volby]\n" - -#: ../../WPrefs.app/main.c:57 -msgid "options:" -msgstr "volby:" - -#: ../../WPrefs.app/main.c:58 -msgid " -display \tdisplay to be used" -msgstr " -display \tkterý display pou¾ít" - -#: ../../WPrefs.app/main.c:59 -msgid " -version\t\tprint version number and exit" -msgstr " -version\t\tzobraz verzi a konec" - -#: ../../WPrefs.app/main.c:82 -#, c-format -msgid "too few arguments for %s" -msgstr "nedostatek argumetù pro %s" - -#: ../../WPrefs.app/main.c:104 -msgid "X server does not support locale" -msgstr "X server nepodporuje nastavení místních zvyklostí" - -#: ../../WPrefs.app/main.c:107 -msgid "cannot set locale modifiers" -msgstr "nelze nastavit modifikátory místních zvyklostí" - -#: ../../WPrefs.app/main.c:113 -#, c-format -msgid "could not open display %s" -msgstr "nelze otevøít displej %s" - -#: ../../WPrefs.app/main.c:121 -msgid "could not initialize application" -msgstr "nelze inicializovat aplikaci" -\ No newline at end of file +msgid "" +msgstr "" +"Date: 1998-08-24 14:36:41-0300\n" +"From: Toni Biliæ tbilic@oliver.efos.hr \n" +"Language-Team: Croatian \n" +"Content-Type: text/plain; charset=ISO8859-2\n" +"Xgettext-Options: --default-domain=WPrefs --add-comments --keyword=_\n" +"Files: ../../WPrefs/Configurations.c ../../WPrefs/Expert.c ../../WPrefs/Focus.c ../../WPrefs/KeyboardSettings.c ../../WPrefs/KeyboardShortcuts.c ../../WPrefs/Menu.c ../../WPrefs/MenuGuru.c ../../WPrefs/MenuPreferences.c ../../WPrefs/MouseSettings.c ../../WPrefs/Paths.c ../../WPrefs/Preferences.c ../../WPrefs/Text.c ../../WPrefs/TextureAndColor.c ../../WPrefs/WPrefs.c ../../WPrefs/WindowHandling.c ../../WPrefs/Workspace.c ../../WPrefs/main.c ../../WPrefs/xmodifier.c\n" + +#: ../../WPrefs/Configurations.c:142 ../../WPrefs/Configurations.c:148 ../../WPrefs/MouseSettings.c:510 ../../WPrefs/WindowHandling.c:270 ../../WPrefs/WindowHandling.c:282 ../../WPrefs/Workspace.c:71 ../../WPrefs/Workspace.c:77 +msgid "could not load icon %s" +msgstr "ne mogu uèitati ikonu %s" + +#: ../../WPrefs/Configurations.c:156 ../../WPrefs/Workspace.c:85 +msgid "could not process icon %s:" +msgstr "ne mogu procesirati ikonu %s" + +#: ../../WPrefs/Configurations.c:181 ../../WPrefs/Workspace.c:124 +msgid "could not load image file %s" +msgstr "ne mogu uèitati image datoteku %s" + +#: ../../WPrefs/Configurations.c:195 +msgid "Icon Slide Speed" +msgstr "Brzina klizanja ikone" + +#: ../../WPrefs/Configurations.c:201 +msgid "Shade Animation Speed" +msgstr "Brzina Shade animacije" + +#: ../../WPrefs/Configurations.c:234 ../../WPrefs/Configurations.c:246 ../../WPrefs/Focus.c:310 ../../WPrefs/Focus.c:321 ../../WPrefs/MenuPreferences.c:135 ../../WPrefs/MenuPreferences.c:146 ../../WPrefs/MenuPreferences.c:174 ../../WPrefs/MenuPreferences.c:189 ../../WPrefs/MouseSettings.c:538 ../../WPrefs/MouseSettings.c:549 ../../WPrefs/MouseSettings.c:604 ../../WPrefs/MouseSettings.c:615 ../../WPrefs/MouseSettings.c:651 ../../WPrefs/MouseSettings.c:666 ../../WPrefs/MouseSettings.c:682 ../../WPrefs/WPrefs.c:398 ../../WPrefs/WPrefs.c:416 +msgid "could not load icon file %s" +msgstr "ne mogu uèitati ikonu %s" + +#: ../../WPrefs/Configurations.c:262 +msgid "Titlebar Style" +msgstr "Stil Titlebar-a" + +#: ../../WPrefs/Configurations.c:299 +msgid "Animations and Sound" +msgstr "Animacije i zvuk" + +#: ../../WPrefs/Configurations.c:305 +msgid "Animations" +msgstr "Animacije" + +#: ../../WPrefs/Configurations.c:321 +msgid "Superfluous" +msgstr "Superfluous" + +#: ../../WPrefs/Configurations.c:337 +msgid "Sounds" +msgstr "Zvukovi" + +#: ../../WPrefs/Configurations.c:354 +msgid "Note: sound requires a module distributed separately" +msgstr "Upozorenje: zvuk ovisi o zasebnom modulu" + +#: ../../WPrefs/Configurations.c:364 +msgid "Dithering colormap for 8bpp" +msgstr "Dithering colormap for 8bpp" + +#: ../../WPrefs/Configurations.c:369 +msgid "Disable dithering in any visual/depth" +msgstr "Onemoguæi dithering za bilo koji visual/dubinu" + +#: ../../WPrefs/Configurations.c:390 +msgid "More colors for applications" +msgstr "Jo¹ boja za aplikacije" + +#: ../../WPrefs/Configurations.c:397 +msgid "More colors for WindowMaker" +msgstr "Jo¹ boja za WindowMaker" + +#: ../../WPrefs/Configurations.c:450 +msgid "Other Configurations" +msgstr "Ostale konfiguracije" + +#: ../../WPrefs/Expert.c:70 +msgid "Do not set non-WindowMaker specific parameters (do not use xset)" +msgstr "Ne postavljaj ne-WindowMaker parametre (ne koristi xset)" + +#: ../../WPrefs/Expert.c:71 +msgid "Automatically save session when exiting WindowMaker" +msgstr "Automatski snimi sessoin pri izlazu iz WindowMakera" + +#: ../../WPrefs/Expert.c:72 +msgid "Use SaveUnder in window frames, icons, menus and other objects" +msgstr "Koristi SaveUnder u okvirima prozora, ikona, izbornika i drugih objekata" + +#: ../../WPrefs/Expert.c:73 +msgid "Disable cycling color highlighting of icons." +msgstr "Onemuguæi cycling color highlighting of icons." + +#: ../../WPrefs/Expert.c:103 +msgid "Expert User Preferences" +msgstr "Struène postavke" + +#: ../../WPrefs/Focus.c:79 +msgid "bad option value %s for option FocusMode. Using default Manual" +msgstr "kriva vrijednost opcije %s za FokusMod. Koristim Manual" + +#: ../../WPrefs/Focus.c:92 +msgid "bad option value %s for option ColormapMode. Using default Manual" +msgstr "kriva vrijednost opcije %s za ColormapMod. Koristim Manual" + +#: ../../WPrefs/Focus.c:190 +msgid "" +"Click on the window to set\n" +"keyboard input focus." +msgstr "" +"Kliknite na prozor da\n" +"postavite fokus" + +#: ../../WPrefs/Focus.c:194 +msgid "" +"Set keyboard input focus to\n" +"the window under the mouse pointer,\n" +"including the root window." +msgstr "" +"Postavljanje fokusa na prozor\n" +"ispod pokazivaèa mi¹a,\n" +"ukljuèujuæi i root prozor." + +#: ../../WPrefs/Focus.c:199 +msgid "" +"Set keyboard input focus to\n" +"the window under the mouse pointer,\n" +"except the root window." +msgstr "" +"Postavljanje fokusa na prozor ispod\n" +"pokazivaèa mi¹a, osim root prozora." + +#: ../../WPrefs/Focus.c:243 +msgid "Input Focus Mode" +msgstr "Naèin fokusiranja" + +#: ../../WPrefs/Focus.c:248 +msgid "Click window to focus" +msgstr "Klikni prozor za fokus" + +#: ../../WPrefs/Focus.c:249 +msgid "Focus follows mouse" +msgstr "Fokus prati mi¹a" + +#: ../../WPrefs/Focus.c:250 +msgid "\"Sloppy\" focus" +msgstr "\"Sloppy\" fokus" + +#: ../../WPrefs/Focus.c:265 +msgid "Install colormap in the window..." +msgstr "Instaliraj colormap u prozor..." + +#: ../../WPrefs/Focus.c:270 +msgid "...that has the input focus." +msgstr "¹to ima fokus." + +#: ../../WPrefs/Focus.c:275 +msgid "...that is under the mouse pointer." +msgstr "¹to je ispod kursora" + +#: ../../WPrefs/Focus.c:284 +msgid "Automatic Window Raise Delay" +msgstr "Automatsko zadr¾avanje podizanja prozora" + +#: ../../WPrefs/Focus.c:341 +msgid "msec" +msgstr "msec" + +#: ../../WPrefs/Focus.c:358 +msgid "Do not let aplications receive the click used to focus windows." +msgstr "Ne daj da aplikacije prime klik za fokusiranje prozora." + +#: ../../WPrefs/Focus.c:364 +msgid "Automatically focus new windows." +msgstr "Automatski fokusiraj nove prozore" + +#: ../../WPrefs/Focus.c:385 +msgid "Window Focus Preferences" +msgstr "Postavke fokusiranja prozora" + +#: ../../WPrefs/KeyboardSettings.c:72 +msgid "Initial Key Repeat" +msgstr "Prvotno ponavljanje kljuèa" + +#: ../../WPrefs/KeyboardSettings.c:113 +msgid "Key Repeat Rate" +msgstr "Razmak izmeðu ponavljanja kljuèa" + +#: ../../WPrefs/KeyboardSettings.c:153 +msgid "Type here to test" +msgstr "Ukucajte ovdje da testirate" + +#: ../../WPrefs/KeyboardSettings.c:172 +msgid "Keyboard Preferences" +msgstr "Postavke tastature" + +#: ../../WPrefs/KeyboardShortcuts.c:170 ../../WPrefs/Menu.c:923 ../../WPrefs/Menu.c:1290 ../../WPrefs/MenuGuru.c:263 +msgid "Cancel" +msgstr "Otka¾i" + +#: ../../WPrefs/KeyboardShortcuts.c:171 +msgid "Press the desired shortcut key(s) or click Cancel to stop capturing." +msgstr "Pritisnite ¾eljenu kraticu ili kliknite Otka¾i za prekid hvatanja." + +#: ../../WPrefs/KeyboardShortcuts.c:189 ../../WPrefs/KeyboardShortcuts.c:390 ../../WPrefs/Menu.c:935 ../../WPrefs/Menu.c:1157 +msgid "Capture" +msgstr "Uhvati" + +#: ../../WPrefs/KeyboardShortcuts.c:190 ../../WPrefs/KeyboardShortcuts.c:397 +msgid "Click Capture to interactively define the shortcut key." +msgstr "Kliknite \"Uhvati\" da interaktivno definirate kraticu." + +#: ../../WPrefs/KeyboardShortcuts.c:308 +msgid "Actions" +msgstr "Akcije" + +#: ../../WPrefs/KeyboardShortcuts.c:322 +msgid "Open applications menu" +msgstr "Otvori izbornik aplikacija" + +#: ../../WPrefs/KeyboardShortcuts.c:323 +msgid "Open window list menu" +msgstr "Otvori izbornik liste prozora" + +#: ../../WPrefs/KeyboardShortcuts.c:324 +msgid "Open window commands menu" +msgstr "Otvori izbornik prozorskih naredbi" + +#: ../../WPrefs/KeyboardShortcuts.c:325 +msgid "Hide active application" +msgstr "Sakrij aktivnu aplikaciju" + +#: ../../WPrefs/KeyboardShortcuts.c:326 +msgid "Miniaturize active window" +msgstr "Minimiziraj aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:327 +msgid "Close active window" +msgstr "Zatvori aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:328 +msgid "Maximize active window" +msgstr "Maksimiziraj aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:329 +msgid "Maximize active window vertically" +msgstr "Maksimiziraj aktivni prozor vertikalno" + +#: ../../WPrefs/KeyboardShortcuts.c:330 +msgid "Raise active window" +msgstr "Podigni aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:331 +msgid "Lower active window" +msgstr "Spusti aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:332 +msgid "Raise/Lower window under mouse pointer" +msgstr "Podigni/Spusti prozor ispod pokazivaèa mi¹a" + +#: ../../WPrefs/KeyboardShortcuts.c:333 +msgid "Shade active window" +msgstr "Shade-iraj aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:334 +msgid "Select active window" +msgstr "Selektiraj aktivni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:335 +msgid "Focus next window" +msgstr "Fokusiraj sljedeæi prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:336 +msgid "Focus previous window" +msgstr "Fokusiraj prethodni prozor" + +#: ../../WPrefs/KeyboardShortcuts.c:337 +msgid "Switch to next workspace" +msgstr "Prebacivanje na sljedeæi radni prostor" + +#: ../../WPrefs/KeyboardShortcuts.c:338 +msgid "Switch to previous workspace" +msgstr "Prebacivanje na prethodni radni prostor" + +#: ../../WPrefs/KeyboardShortcuts.c:339 +msgid "Switch to next ten workspaces" +msgstr "Prebacivanje na sljedeæih 10 radnih prostora" + +#: ../../WPrefs/KeyboardShortcuts.c:340 +msgid "Switch to previous ten workspaces" +msgstr "Prebacivanje na predhodnih 10 radnih prostora" + +#: ../../WPrefs/KeyboardShortcuts.c:341 +msgid "Switch to workspace 1" +msgstr "Prebacivanje na radni prostor 1" + +#: ../../WPrefs/KeyboardShortcuts.c:342 +msgid "Switch to workspace 2" +msgstr "Prebacivanje na radni prostor 2" + +#: ../../WPrefs/KeyboardShortcuts.c:343 +msgid "Switch to workspace 3" +msgstr "Prebacivanje na radni prostor 3" + +#: ../../WPrefs/KeyboardShortcuts.c:344 +msgid "Switch to workspace 4" +msgstr "Prebacivanje na radni prostor 4" + +#: ../../WPrefs/KeyboardShortcuts.c:345 +msgid "Switch to workspace 5" +msgstr "Prebacivanje na radni prostor 5" + +#: ../../WPrefs/KeyboardShortcuts.c:346 +msgid "Switch to workspace 6" +msgstr "Prebacivanje na radni prostor 6" + +#: ../../WPrefs/KeyboardShortcuts.c:347 +msgid "Switch to workspace 7" +msgstr "Prebacivanje na radni prostor 7" + +#: ../../WPrefs/KeyboardShortcuts.c:348 +msgid "Switch to workspace 8" +msgstr "Prebacivanje na radni prostor 8" + +#: ../../WPrefs/KeyboardShortcuts.c:349 +msgid "Switch to workspace 9" +msgstr "Prebacivanje na radni prostor 9" + +#: ../../WPrefs/KeyboardShortcuts.c:350 +msgid "Switch to workspace 10" +msgstr "Prebacivanje na radni prostor 10" + +#: ../../WPrefs/KeyboardShortcuts.c:351 +msgid "Shortcut for window 1" +msgstr "Kratica za prozor 1" + +#: ../../WPrefs/KeyboardShortcuts.c:352 +msgid "Shortcut for window 2" +msgstr "Kratica za prozor 2" + +#: ../../WPrefs/KeyboardShortcuts.c:353 +msgid "Shortcut for window 3" +msgstr "Kratica za prozor 3" + +#: ../../WPrefs/KeyboardShortcuts.c:354 +msgid "Shortcut for window 4" +msgstr "Kratica za prozor 4" + +#: ../../WPrefs/KeyboardShortcuts.c:355 +msgid "Raise Clip" +msgstr "Podigni Clip" + +#: ../../WPrefs/KeyboardShortcuts.c:356 +msgid "Lower Clip" +msgstr "Spusti Clip" + +#: ../../WPrefs/KeyboardShortcuts.c:357 +msgid "Raise/Lower Clip" +msgstr "Podigni/Spusti Clip" + +#: ../../WPrefs/KeyboardShortcuts.c:359 +msgid "Toggle keyboard language" +msgstr "Promjeni raspored tastature" + +#: ../../WPrefs/KeyboardShortcuts.c:373 ../../WPrefs/Menu.c:1146 +msgid "Shortcut" +msgstr "Kratica" + +#: ../../WPrefs/KeyboardShortcuts.c:384 +msgid "Clear" +msgstr "Oèisti" + +#: ../../WPrefs/KeyboardShortcuts.c:445 +msgid "Keyboard Shortcut Preferences" +msgstr "Postavke tastaturnih kratica" + +#: ../../WPrefs/Menu.c:373 +msgid "Window Manager" +msgstr "Window Manager" + +#: ../../WPrefs/Menu.c:375 +msgid "Program to open files" +msgstr "Program za otvaranje datoteka" + +#: ../../WPrefs/Menu.c:377 ../../WPrefs/Menu.c:1133 +msgid "Program to Run" +msgstr "Program za pokrenuti" + +#: ../../WPrefs/Menu.c:427 ../../WPrefs/Menu.c:428 +msgid "New Command %i" +msgstr "Nova naredba %i" + +#: ../../WPrefs/Menu.c:435 +msgid "New Submenu" +msgstr "Novi podizbornik" + +#: ../../WPrefs/Menu.c:440 +msgid "External Menu" +msgstr "Eksterni izbornik" + +#: ../../WPrefs/Menu.c:447 +msgid "Workspaces" +msgstr "Radni prostori" + +#: ../../WPrefs/Menu.c:1017 ../../WPrefs/Menu.c:1032 +msgid "Commands" +msgstr "Naredbe" + +#: ../../WPrefs/Menu.c:1018 ../../WPrefs/Menu.c:1033 +msgid "Add Command" +msgstr "Naredba" + +#: ../../WPrefs/Menu.c:1019 ../../WPrefs/Menu.c:1034 +msgid "Add Submenu" +msgstr "Podizbornik" + +#: ../../WPrefs/Menu.c:1020 ../../WPrefs/Menu.c:1035 +msgid "Add External Menu" +msgstr "Eksterni izbornik" + +#: ../../WPrefs/Menu.c:1021 ../../WPrefs/Menu.c:1036 +msgid "Add Workspace Menu" +msgstr "Izbornih r. prostora" + +#: ../../WPrefs/Menu.c:1022 ../../WPrefs/Menu.c:1037 +msgid "Remove Item" +msgstr "Obrisati stavku" + +#: ../../WPrefs/Menu.c:1023 ../../WPrefs/Menu.c:1038 +msgid "Cut Item" +msgstr "Izrezati stavku" + +#: ../../WPrefs/Menu.c:1024 ../../WPrefs/Menu.c:1039 +msgid "Copy Item" +msgstr "Kopirati stavku" + +#: ../../WPrefs/Menu.c:1025 ../../WPrefs/Menu.c:1040 +msgid "Paste Item" +msgstr "Naljepiti stavku" + +#: ../../WPrefs/Menu.c:1069 +msgid "Label" +msgstr "Oznaka" + +#: ../../WPrefs/Menu.c:1082 +msgid "Command" +msgstr "Naredba" + +#: ../../WPrefs/Menu.c:1087 +msgid "Run Program" +msgstr "Pokrenuti program" + +#: ../../WPrefs/Menu.c:1088 +msgid "Arrange Icons" +msgstr "Pospremiti ikone" + +#: ../../WPrefs/Menu.c:1089 +msgid "Hide Others" +msgstr "Sakriti ostale" + +#: ../../WPrefs/Menu.c:1090 +msgid "Show All Windows" +msgstr "Poka¾i sve prozore" + +#: ../../WPrefs/Menu.c:1091 +msgid "Exit WindowMaker" +msgstr "Izaæi iz Window Maker-a" + +#: ../../WPrefs/Menu.c:1092 +msgid "Exit X Session" +msgstr "Izaæi is X sessiona" + +#: ../../WPrefs/Menu.c:1093 +msgid "Start window manager" +msgstr "Pokrenuti window manager" + +#: ../../WPrefs/Menu.c:1094 +msgid "Restart WindowMaker" +msgstr "Restartati Window Maker" + +#: ../../WPrefs/Menu.c:1095 +msgid "Save Session" +msgstr "Snimiti session" + +#: ../../WPrefs/Menu.c:1096 +msgid "Clear Session" +msgstr "Oèistiti session" + +#: ../../WPrefs/Menu.c:1097 +msgid "Refresh Screen" +msgstr "Osvje¾iti ekran" + +#: ../../WPrefs/Menu.c:1098 +msgid "Info Panel" +msgstr "Info panel" + +#: ../../WPrefs/Menu.c:1099 +msgid "Legal Panel" +msgstr "Legal panel" + +#: ../../WPrefs/Menu.c:1107 +msgid "Open workspace menu" +msgstr "Otvoriti izbornik radnih prostora" + +#: ../../WPrefs/Menu.c:1114 +msgid "No confirmation panel" +msgstr "Nema panela potvrde" + +#: ../../WPrefs/Menu.c:1120 +msgid "Menu Path/Directory List" +msgstr "Menu lista Staza/Direktorij" + +#: ../../WPrefs/Menu.c:1165 +msgid "Ask help to the Guru" +msgstr "Tra¾i pomoæ od Gurua" + +#: ../../WPrefs/Menu.c:1285 +msgid "" +"The format of the current menu in ~/G/D/WMRootMenu is not supported by WPrefs. A new menu will be created.\n" +"You can also replace ~/G/D/WMRootMenu with ~/G/L/W/plmenu to get the default menu." +msgstr "" +"Format trenutnog izbornika u ~/G/D/WMRootMenu nije podr¾an od WPrefs-a. Napravit æu novi izbornik.\n" +"Mo¾ete zamjeniti ~/G/D/WMRootMenu da ~/G/L/W/plmenu da dobijete poèetni izbornik." + +#: ../../WPrefs/Menu.c:1290 ../../WPrefs/Menu.c:1295 ../../WPrefs/WPrefs.c:585 +msgid "Warning" +msgstr "Upozorenje" + +#. WMMapWidget(panel->pathB); +#: ../../WPrefs/Menu.c:1290 ../../WPrefs/Menu.c:1296 ../../WPrefs/MenuGuru.c:119 ../../WPrefs/MenuGuru.c:126 ../../WPrefs/MenuGuru.c:140 ../../WPrefs/MouseSettings.c:156 ../../WPrefs/Text.c:181 ../../WPrefs/WPrefs.c:546 ../../WPrefs/WPrefs.c:551 ../../WPrefs/WPrefs.c:562 ../../WPrefs/WPrefs.c:572 ../../WPrefs/WPrefs.c:578 ../../WPrefs/WPrefs.c:585 ../../WPrefs/WPrefs.c:602 ../../WPrefs/WPrefs.c:607 +msgid "OK" +msgstr "U redu" + +#: ../../WPrefs/Menu.c:1295 +msgid "Any changes made in this section will not be saved" +msgstr "Promjene uèinjene u ovom dijelu neæe biti snimljene" + +#: ../../WPrefs/Menu.c:1360 +msgid "Applications Menu Definition" +msgstr "Defincija izbornika aplikacija" + +#: ../../WPrefs/MenuGuru.c:106 +msgid "Menu Guru - Select Type" +msgstr "Izbornik guru - odabrati tip" + +#: ../../WPrefs/MenuGuru.c:111 ../../WPrefs/MenuGuru.c:133 ../../WPrefs/MenuGuru.c:251 +msgid "Next" +msgstr "Sljedeæi" + +#: ../../WPrefs/MenuGuru.c:114 +msgid "Menu Guru - Select Menu File" +msgstr "Izbornik guru - Odabrati izbornik datoteku" + +#: ../../WPrefs/MenuGuru.c:122 +msgid "Menu Guru - Select Pipe Command" +msgstr "Izbornik guru - Odabrati pipe naredbu" + +#: ../../WPrefs/MenuGuru.c:129 +msgid "Menu Guru - Select Directories" +msgstr "Izbornik guru- Odabrati direktorije" + +#: ../../WPrefs/MenuGuru.c:136 +msgid "Menu Guru - Select Command" +msgstr "Izbornik guru - Odabrati naredbu" + +#: ../../WPrefs/MenuGuru.c:257 +msgid "Back" +msgstr "Natrag" + +#: ../../WPrefs/MenuGuru.c:271 +msgid "" +"This process will help you create a submenu which definition is located in another file or is created dynamically.\n" +"What do you want to use as the contents of the submenu?" +msgstr "" +"Ovaj postupak æe vam pomoæi u kreiranju podizbornika èija se definicija nalazi u drugoj datoteci ili se stvara dinamièki.\n" +"©to ¾elite koristiti kao sadr¾aj podizbornika?" + +#: ../../WPrefs/MenuGuru.c:279 +msgid "A file containing the menu definition in the plain text (non-property list) menu format." +msgstr "Datoteka koja sadr¾i definiciju izbornika u èistom tekst formatu." + +#: ../../WPrefs/MenuGuru.c:285 +msgid "The menu definition generated by a script/program read through a pipe." +msgstr "Definicja izbornika generirana pomoæu skripte/programa proèitanog kroz pipe." + +#: ../../WPrefs/MenuGuru.c:291 +msgid "The files in one or more directories." +msgstr "Datoteke u jednom ili vi¹e direktorija." + +#: ../../WPrefs/MenuGuru.c:303 +msgid "Type the path for the menu file:" +msgstr "Upi¹i stazu za izbornik datoteku:" + +#: ../../WPrefs/MenuGuru.c:318 +msgid "The menu file must contain a menu in the plain text menu file format. This format is described in the menu files included with WindowMaker, probably at ~/GNUstep/Library/WindowMaker/menu" +msgstr "Menu datoteka mora sadr¾avati izbornik u èistom tekst formatu. Ovaj format je opisan u menu datotekama u distribuciji, vjerojatno u ~/GNUstep/Library/WindowMaker/menu" + +#: ../../WPrefs/MenuGuru.c:328 +msgid "Type the command that will generate the menu definition:" +msgstr "Upi¹i naredbu koja æe generirati definiciju izbornika:" + +#: ../../WPrefs/MenuGuru.c:338 +msgid "The command supplied must generate and output a valid menu definition to stdout. This definition should be in the plain text menu file format, described in the menu files included with WindowMaker, usually at ~/GNUstep/Library/WindowMaker/menu" +msgstr "Navedana naredba mora stvoriti i ispisati va¾eæu definiciju izbornika na stdout. Ova definicija mora biti u formatu opisanom u ~/GNUstep/Library/WindowMaker/menu" + +#: ../../WPrefs/MenuGuru.c:350 ../../WPrefs/MenuGuru.c:372 ../../WPrefs/MenuGuru.c:394 +msgid "Type the path for the directory. You can type more than one path by separating them with spaces." +msgstr "Upi¹ite stazu za direktorij. Mo¾ete upisati vi¹e od jedne staze odvajajuæi ih razmacima." + +#: ../../WPrefs/MenuGuru.c:361 ../../WPrefs/MenuGuru.c:383 ../../WPrefs/MenuGuru.c:405 +msgid "The menu generated will have an item for each file in the directory. The directories can contain program executables or data files (such as jpeg images)." +msgstr "Generirani izbornik æe imati stavku za svaku datoteku u direktoriju. Direktoriji mogu sadr¾avati izvr¹ne programe ili podatke (kao jpeg slike)." + +#: ../../WPrefs/MenuGuru.c:415 +msgid "If the directory contain data files, type the command used to open these files. Otherwise, leave it in blank." +msgstr "Ako direktorij sadr¾i podatkovne datoteke, upi¹ite naredbu kori¹tenu za otvaranje tih datoteka, ili ostavit prazno." + +#: ../../WPrefs/MenuGuru.c:426 +msgid "Each file in the directory will have an item and they will be opened with the supplied command.For example, if the directory contains image files and the command is \"xv -root\", each file in the directory will have a menu item like \"xv -root imagefile\"." +msgstr "Svaka datoteka u direktoriju æe imati stavku i bit æe otvorene sa navedenom naredbom. Na primjer ako direktorij sadr¾i image datoteke i naredba je \"xv -root\", svaka datoteka u direktoriju æe imati stavku \"xv -root image_datoteka\"." + +#: ../../WPrefs/MenuPreferences.c:112 +msgid "Menu Scrolling Speed" +msgstr "Brzina pomicanja izbornika" + +#: ../../WPrefs/MenuPreferences.c:161 +msgid "Submenu Alignment" +msgstr "Poravnanje podizbornika" + +#: ../../WPrefs/MenuPreferences.c:204 +msgid "" +"Always open submenus inside the screen, instead of scrolling.\n" +"Note: this can be an annoyance at some circumstances." +msgstr "" +"Uvijek otvori podizbornik unutar ekrana umjesto pomicanja.\n" +"Upozorenje: ovo zna biti vrlo frustrirajuæe u nekim okolnostima." + +#: ../../WPrefs/MenuPreferences.c:209 +msgid "Scroll off-screen menus when pointer is moved over them." +msgstr "Izbornike izvan ekrana pomakni unutra kada se pokazivaè mièe iznad njih" + +#: ../../WPrefs/MenuPreferences.c:229 +msgid "Menu Preferences" +msgstr "Postavke izbornika" + +#: ../../WPrefs/MouseSettings.c:154 ../../WPrefs/Text.c:181 ../../WPrefs/WPrefs.c:546 ../../WPrefs/WPrefs.c:551 ../../WPrefs/WPrefs.c:560 ../../WPrefs/WPrefs.c:570 ../../WPrefs/WPrefs.c:578 ../../WPrefs/WPrefs.c:602 ../../WPrefs/WPrefs.c:607 +msgid "Error" +msgstr "Gre¹ka" + +#: ../../WPrefs/MouseSettings.c:155 +msgid "Invalid mouse acceleration threshold value. Must be the number of pixels to travel before accelerating." +msgstr "Kriva vrijednost ubrzavanja mi¹a. Mora biti broj pixela putovanja prije ubrzavanja." + +#: ../../WPrefs/MouseSettings.c:209 +msgid "mouse button %s not supported by WPrefs." +msgstr "tipka mi¹e %s nije podr¾ana od WPrefs-a." + +#: ../../WPrefs/MouseSettings.c:243 ../../WPrefs/MouseSettings.c:254 ../../WPrefs/MouseSettings.c:265 +msgid "bad value %s for option %s" +msgstr "kriva vrijednost %s za opciju %s" + +#: ../../WPrefs/MouseSettings.c:325 +msgid "modifier key %s for option ModifierKey was not recognized. Using %s as default" +msgstr "modifier kljuè %s za opciju ModifierKey nije prepoznat. Koristim %s." + +#: ../../WPrefs/MouseSettings.c:350 +msgid "could not retrieve keyboard modifier mapping" +msgstr "ne mogu povuæi keyboard modifier mapping" + +#: ../../WPrefs/MouseSettings.c:497 +msgid "Mouse Speed" +msgstr "Brzina mi¹a" + +#: ../../WPrefs/MouseSettings.c:564 +msgid "Threshold:" +msgstr "Prag:" + +#: ../../WPrefs/MouseSettings.c:579 +msgid "Double-Click Delay" +msgstr "Razmak izmeðu dvostrukog klika" + +#: ../../WPrefs/MouseSettings.c:623 +msgid "Test" +msgstr "Test" + +#: ../../WPrefs/MouseSettings.c:633 +msgid "Workspace Mouse Actions" +msgstr "Akcije mi¹a na radnom prostoru" + +#: ../../WPrefs/MouseSettings.c:638 +msgid "Disable mouse actions" +msgstr "Onemoguæi akcije mi¹a" + +#: ../../WPrefs/MouseSettings.c:691 +msgid "Applications menu" +msgstr "Izbornik Aplikacija" + +#: ../../WPrefs/MouseSettings.c:697 +msgid "Window list menu" +msgstr "Izbornik Liste prozora" + +#: ../../WPrefs/MouseSettings.c:703 +msgid "Select windows" +msgstr "Odaberi prozore" + +#: ../../WPrefs/MouseSettings.c:738 +msgid "Mouse Grab Modifier" +msgstr "Modifier za \"hvatanje\" prozora mi¹om" + +#: ../../WPrefs/MouseSettings.c:772 +msgid "could not create %s" +msgstr "ne mogu kreirati %s" + +#: ../../WPrefs/MouseSettings.c:788 +msgid "could not create temporary file %s" +msgstr "ne mogu kreirati privremenu datoteku %s" + +#: ../../WPrefs/MouseSettings.c:813 +msgid "could not rename file %s to %s\n" +msgstr "ne mogu preimenovati datoteku %s u %s\n" + +#: ../../WPrefs/MouseSettings.c:896 +msgid "Mouse Preferences" +msgstr "Postavke mi¹a" + +#: ../../WPrefs/Paths.c:82 +msgid "bad value in option IconPath. Using default path list" +msgstr "kriva vrijednost IconPath opciji. Koristim poèetnu listu staza" + +#: ../../WPrefs/Paths.c:99 +msgid "bad value in option PixmapPath. Using default path list" +msgstr "kriva vrijednost u PixmapPath opciji. Koristim poèetnu listu staza" + +#: ../../WPrefs/Paths.c:301 +msgid "Icon Search Paths" +msgstr "Staze za ikone" + +#: ../../WPrefs/Paths.c:313 ../../WPrefs/Paths.c:349 +msgid "Add" +msgstr "Dodaj" + +#: ../../WPrefs/Paths.c:320 ../../WPrefs/Paths.c:356 +msgid "Remove" +msgstr "Obri¹i" + +#: ../../WPrefs/Paths.c:337 +msgid "Pixmap Search Paths" +msgstr "Staze za pixmape" + +#: ../../WPrefs/Paths.c:385 +msgid "Search Path Configuration" +msgstr "Konfiguracija staza" + +#: ../../WPrefs/Preferences.c:151 +msgid "Size Display" +msgstr "Prikaz velièine" + +#: ../../WPrefs/Preferences.c:156 ../../WPrefs/Preferences.c:172 +msgid "Corner of screen" +msgstr "Kut ekrana" + +#: ../../WPrefs/Preferences.c:157 ../../WPrefs/Preferences.c:173 +msgid "Center of screen" +msgstr "Sredi¹te ekrana" + +#: ../../WPrefs/Preferences.c:158 ../../WPrefs/Preferences.c:174 +msgid "Center of resized window" +msgstr "Sredi¹te prozora" + +#: ../../WPrefs/Preferences.c:159 +msgid "Technical drawing-like" +msgstr "Poput tehnièkog crtanja" + +#: ../../WPrefs/Preferences.c:167 +msgid "Position Display" +msgstr "Prikaz pozicije" + +#: ../../WPrefs/Preferences.c:182 +msgid "Show balloon text for..." +msgstr "Poka¾i tekst u balonu za..." + +#: ../../WPrefs/Preferences.c:189 +msgid "incomplete window titles" +msgstr "nepotpune naslove prozora" + +#: ../../WPrefs/Preferences.c:190 +msgid "miniwindow titles" +msgstr "nalsove miniprozora" + +#: ../../WPrefs/Preferences.c:191 +msgid "application/dock icons" +msgstr "aplikacijske/dock ikone" + +#: ../../WPrefs/Preferences.c:204 +msgid "Raise window when switching focus with keyboard (CirculateRaise)." +msgstr "Podigni prozor pri mjenjanju fokusa tastaturom." + +#: ../../WPrefs/Preferences.c:210 +msgid "Keep keyboard language status for each window." +msgstr "Zadr¾i raspored tastature za svaki prozor" + +#: ../../WPrefs/Preferences.c:231 +msgid "Miscellaneous Ergonomic Preferences" +msgstr "Razne ergonomske postavke" + +#: ../../WPrefs/Text.c:179 +msgid "Invalid font %s." +msgstr "Krivi font %s." + +#: ../../WPrefs/Text.c:256 +msgid "Set Font..." +msgstr "Postavi font..." + +#: ../../WPrefs/Text.c:262 +msgid "Window Title Font" +msgstr "Font naslova prozora" + +#: ../../WPrefs/Text.c:263 +msgid "Menu Title Font" +msgstr "Font naslova izbornika" + +#: ../../WPrefs/Text.c:264 +msgid "Menu Item Font" +msgstr "Font stavke u izborniku" + +#: ../../WPrefs/Text.c:265 +msgid "Icon Title Font" +msgstr "Font naslova ikone" + +#: ../../WPrefs/Text.c:266 +msgid "Clip Title Font" +msgstr "Font naslova clipa" + +#: ../../WPrefs/Text.c:267 +msgid "Geometry Display Font" +msgstr "Font prikaza geometry" + +#: ../../WPrefs/Text.c:280 +msgid "" +"Sample Text\n" +"abcdefghijklmnopqrstuvxywz\n" +"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" +"0123456789" +msgstr "" +"Primjer texta\n" +"abcdefghijklmnopqrstuvxywz\n" +"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" +"0123456789" + +#: ../../WPrefs/Text.c:285 +msgid "Alignment" +msgstr "Poravnanje" + +#: ../../WPrefs/Text.c:290 +msgid "Left" +msgstr "Lijevo" + +#: ../../WPrefs/Text.c:296 +msgid "Center" +msgstr "Sredina" + +#: ../../WPrefs/Text.c:303 +msgid "Right" +msgstr "Desno" + +#: ../../WPrefs/Text.c:325 +msgid "Text Preferences" +msgstr "Postavke teksta" + +#: ../../WPrefs/TextureAndColor.c:384 +msgid "Window Title Bar" +msgstr "Title Bar prozora" + +#: ../../WPrefs/TextureAndColor.c:385 +msgid "Menu Title Bar" +msgstr "Title Bar izbornika" + +#: ../../WPrefs/TextureAndColor.c:386 +msgid "Menu Items" +msgstr "Stavke izbornika" + +#: ../../WPrefs/TextureAndColor.c:387 +msgid "Workspace/Clip" +msgstr "Radni prostor/Clip" + +#: ../../WPrefs/TextureAndColor.c:388 +msgid "Icons" +msgstr "Ikone" + +#: ../../WPrefs/TextureAndColor.c:399 +msgid "Focused Window" +msgstr "Fokusirani prozor" + +#: ../../WPrefs/TextureAndColor.c:412 ../../WPrefs/TextureAndColor.c:443 ../../WPrefs/TextureAndColor.c:474 +msgid "Texture" +msgstr "Tekstura" + +#: ../../WPrefs/TextureAndColor.c:418 ../../WPrefs/TextureAndColor.c:449 ../../WPrefs/TextureAndColor.c:480 +msgid "Text Color" +msgstr "Boja teksta" + +#: ../../WPrefs/TextureAndColor.c:423 ../../WPrefs/TextureAndColor.c:454 ../../WPrefs/TextureAndColor.c:485 ../../WPrefs/TextureAndColor.c:509 ../../WPrefs/TextureAndColor.c:575 ../../WPrefs/TextureAndColor.c:652 +msgid "Set..." +msgstr "Postavi..." + +#: ../../WPrefs/TextureAndColor.c:430 +msgid "Unfocused Window" +msgstr "Nefokusirani prozor" + +#: ../../WPrefs/TextureAndColor.c:461 +msgid "Owner of Focused Window" +msgstr "Vlasnik fokusiranog prozora" + +#: ../../WPrefs/TextureAndColor.c:494 +msgid "Unselected Items" +msgstr "Neselktirne stvari" + +#: ../../WPrefs/TextureAndColor.c:504 ../../WPrefs/TextureAndColor.c:558 +msgid "Background" +msgstr "Pozadina" + +#: ../../WPrefs/TextureAndColor.c:519 +msgid "Normal Text" +msgstr "Normalni tekst" + +#: ../../WPrefs/TextureAndColor.c:529 +msgid "Disabled Text" +msgstr "Onemoguæeni tekst" + +#: ../../WPrefs/TextureAndColor.c:538 +msgid "Selected Items" +msgstr "Selektirani tekst" + +#: ../../WPrefs/TextureAndColor.c:548 +msgid "Text" +msgstr "Tekst" + +#: ../../WPrefs/TextureAndColor.c:566 +msgid "Menu Title Background" +msgstr "Pozadina naslova izbornika" + +#: ../../WPrefs/TextureAndColor.c:584 +msgid "Menu Title Text" +msgstr "Tekst naslova izbornika" + +#: ../../WPrefs/TextureAndColor.c:596 +msgid "Workspace Background" +msgstr "Pozadina radnog prostora" + +#: ../../WPrefs/TextureAndColor.c:605 +msgid "Change" +msgstr "Promjeni" + +#: ../../WPrefs/TextureAndColor.c:611 +msgid "Clip Title Text" +msgstr "Tekst naslova clipa" + +#: ../../WPrefs/TextureAndColor.c:621 +msgid "Normal" +msgstr "Normalan" + +#: ../../WPrefs/TextureAndColor.c:631 +msgid "Collapsed" +msgstr "Sru¹en" + +#: ../../WPrefs/TextureAndColor.c:643 +msgid "Icon Background" +msgstr "Pozadina ikone" + +#: ../../WPrefs/TextureAndColor.c:677 +msgid "Texture and Color Preferences" +msgstr "Postavke tekstura i boja" + +#: ../../WPrefs/WPrefs.c:196 +msgid "Window Maker Preferences" +msgstr "Postavke Window Maker-a" + +#: ../../WPrefs/WPrefs.c:220 +msgid "Revert Page" +msgstr "Povrati stranicu" + +#: ../../WPrefs/WPrefs.c:226 +msgid "Revert All" +msgstr "Povrati sve" + +#: ../../WPrefs/WPrefs.c:232 +msgid "Save" +msgstr "Snimi" + +#: ../../WPrefs/WPrefs.c:238 +msgid "Close" +msgstr "Zatvori" + +#: ../../WPrefs/WPrefs.c:262 +msgid "Version %s for Window Maker %s" +msgstr "Verzija %s za Window Maker %s" + +#: ../../WPrefs/WPrefs.c:269 +msgid "Starting..." +msgstr "Pokreæem..." + +#: ../../WPrefs/WPrefs.c:275 +msgid "" +"Programming/Design: Alfredo K. Kojima\n" +"Artwork: Marco van Hylckama Vlieg\n" +"More Programming: James Thompson" +msgstr "" + +#: ../../WPrefs/WPrefs.c:363 +msgid "could not locate image file %s\n" +msgstr "ne mogu naæi image daoteku %s\n" + +#: ../../WPrefs/WPrefs.c:488 +msgid "Loading Window Maker configuration files..." +msgstr "Uèitavam konfiguracijske datoteke..." + +#: ../../WPrefs/WPrefs.c:492 +msgid "Initializing configuration panels..." +msgstr "Inicijaliziram konfiguracijske panele..." + +#: ../../WPrefs/WPrefs.c:545 ../../WPrefs/WPrefs.c:601 +msgid "Window Maker domain (%s) is corrupted!" +msgstr "Window Maker domena (%s) je o¹teæena!" + +#: ../../WPrefs/WPrefs.c:549 +msgid "Could not load Window Maker domain (%s) from defaults database." +msgstr "Ne mogu uèitati Window Maker domenu (%s) iz baze postavki." + +#: ../../WPrefs/WPrefs.c:557 +msgid "could not extract version information from Window Maker" +msgstr "ne mogu naæi informaciju o verziji Window Maker-a" + +#: ../../WPrefs/WPrefs.c:558 +msgid "Make sure Window Maker is in your search path." +msgstr "Provjerite da li je Window Maker u va¹em PATH-u." + +#: ../../WPrefs/WPrefs.c:561 +msgid "Could not extract version from Window Maker. Make sure it is correctly installed and is in your PATH environment variable." +msgstr "Ne mogu utvrditi verziju Window Makera. Provjerite da li je pravilno i da li je u PATH-u." + +#: ../../WPrefs/WPrefs.c:571 +msgid "Could not extract version from Window Maker. Make sure it is correctly installed." +msgstr "Ne mogu utvrditi verziju Window Maker-a. Provjerite da li pravlno instaliran." + +#: ../../WPrefs/WPrefs.c:576 +msgid "" +"WPrefs only supports Window Maker 0.18.0 or newer.\n" +"The version installed is %i.%i.%i\n" +msgstr "" +"WPrefs podr¾ava Window Maker 0.18.0 ili noviji.\n" +"Instalirana verzija je %i.%i.%i\n" + +#: ../../WPrefs/WPrefs.c:583 +msgid "Window Maker %i.%i.%i, which is installed in your system, is not fully supported by this version of WPrefs." +msgstr "Window Maker %i.%i.%i, koji je instaliran, nije potpuno podr¾an ovom verzijom WPrefs-a." + +#: ../../WPrefs/WPrefs.c:590 +msgid "could not run \"wmaker -global_defaults_path\"." +msgstr "ne mogu pokrenuti \"wmaker -global_defaults_path\"." + +#: ../../WPrefs/WPrefs.c:605 +msgid "Could not load global Window Maker domain (%s)." +msgstr "Ne mogu uèitati Window Maker globalnu domenu (%s)." + +#: ../../WPrefs/WPrefs.c:851 +msgid "" +"bad speed value for option %s\n" +". Using default Medium" +msgstr "" +"Kriva brzina za opciju %s\n" +". Koristim Medium" + +#: ../../WPrefs/WindowHandling.c:107 +msgid "bad option value %s in WindowPlacement. Using default value" +msgstr "kriva vrijednost opcije %s za WindowPlacement. Koristim poèetnu vrijednost" + +#: ../../WPrefs/WindowHandling.c:129 +msgid "invalid data in option WindowPlaceOrigin. Using default (0,0)" +msgstr "krivi podaci u opciji WindowPlaceOrigin. Koristim poèetno (0,0)" + +#: ../../WPrefs/WindowHandling.c:188 +msgid "Window Placement" +msgstr "Polo¾aj prozora" + +#: ../../WPrefs/WindowHandling.c:193 +msgid "Automatic" +msgstr "Automatski" + +#: ../../WPrefs/WindowHandling.c:194 +msgid "Random" +msgstr "Sluèajno" + +#: ../../WPrefs/WindowHandling.c:195 +msgid "Manual" +msgstr "Ruèno" + +#: ../../WPrefs/WindowHandling.c:196 +msgid "Cascade" +msgstr "Cascade" + +#: ../../WPrefs/WindowHandling.c:202 +msgid "Placement Origin" +msgstr "Poèetni polo¾aj" + +#: ../../WPrefs/WindowHandling.c:256 +msgid "Opaque Move" +msgstr "Micanje punog prozora" + +#: ../../WPrefs/WindowHandling.c:292 +msgid "When maximizing..." +msgstr "Pri maksimiziranju..." + +#: ../../WPrefs/WindowHandling.c:297 +msgid "...do not resize over icons" +msgstr "ne pokrivati ikone" + +#: ../../WPrefs/WindowHandling.c:310 +msgid "Keep transients above their owners" +msgstr "Transient-i iznad svojih vlasnika" + +#: ../../WPrefs/WindowHandling.c:337 +msgid "Window Handling Preferences" +msgstr "Postavke postupanja prozorima" + +#: ../../WPrefs/Workspace.c:137 +msgid "Workspace Navigation" +msgstr "Navigacija radnim prostorima" + +#: ../../WPrefs/Workspace.c:161 +msgid "drag windows between workspaces." +msgstr "povlaèenje prozora izmeðu radnih prostora." + +#: ../../WPrefs/Workspace.c:186 +msgid "switch to first workspace when switching past the last workspace and vice-versa" +msgstr "prebacivanje na prvi radni prostor pri prela¾enju sa zadnjeg i obrnuto." + +#: ../../WPrefs/Workspace.c:210 +msgid "create a new workspace when switching past the last workspace." +msgstr "stvaranje novog radnog prostora pri prela¾enju sa zadnjeg." + +#: ../../WPrefs/Workspace.c:218 +msgid "Dock/Clip" +msgstr "Dock/Clip" + +#: ../../WPrefs/Workspace.c:287 +msgid "Workspace Preferences" +msgstr "Postavke radnog prostora" + +#: ../../WPrefs/main.c:56 +msgid "usage: %s [options]\n" +msgstr "uporaba: %s [opcije]\n" + +#: ../../WPrefs/main.c:57 +msgid "options:" +msgstr "opcije:" + +#: ../../WPrefs/main.c:58 +msgid " -display \tdisplay to be used" +msgstr " -display \tdisplay za kori¹tenje" + +#: ../../WPrefs/main.c:59 +msgid " -version\t\tprint version number and exit" +msgstr " -version\t\tispi¹i verziju u izaði" + +#: ../../WPrefs/main.c:82 +msgid "too few arguments for %s" +msgstr "premalo argumenata za %s" + +#: ../../WPrefs/main.c:104 +msgid "X server does not support locale" +msgstr "X server ne podr¾ava locale" + +#: ../../WPrefs/main.c:107 +msgid "cannot set locale modifiers" +msgstr "ne mogu postaviti locale modifiere" + +#: ../../WPrefs/main.c:113 +msgid "could not open display %s" +msgstr "ne mogu otvoriti display %s" + +#: ../../WPrefs/main.c:121 +msgid "could not initialize application" +msgstr "ne mogu inicijalizirati aplikaciju" +# msgid "could not extract version information from WindowMaker" +# msgstr "ne mogu izvuèi informaciju o verziji WindowMaker-a" +# +# msgid "Could not load WindowMaker domain (%s) from defaults database." +# msgstr "Ne mogu uèitati WindowMaker domenu (%s) iz poèetne baze." +# +# msgid "Version %s for WindowMaker %s" +# msgstr "Verzija %s za WindowMaker %s" +# +# msgid "Could not extract version from WindowMaker. Make sure it is correctly installed." +# msgstr "Ne mogu izvuèi verziju WindowMakera. Provjerite da je ispravno instaliran." +# +# msgid "" +# "Programming/Design: Alfredo K. Kojima\n" +# "Artwork: Marco van Hylckama Vlieg" +# msgstr "" +# "Programiranje/Dizajn: Alfredo K. Kojima\n" +# "Artwork: Marco van Hylckama Vlieg" +# +# msgid "WindowMaker domain (%s) is corrupted!" +# msgstr "WindowMaker domena (%s) je o¹teæena!" +# +# msgid "Raise window when switching focus with keyboard." +# msgstr "Podiæi prozor pri mjenjanju fokusa tastaturom." +# +# msgid "WindowMaker %i.%i.%i, which is installed in your system, is not fully supported by this version of WPrefs." +# msgstr "WindowMaker %i.%i.%i, koji je instaliran na va¹em sistemu, nije potpuno podr¾an ovom verzijom WPrefs-a." +# +# msgid "WindowMaker Preferences" +# msgstr "Postavke WindowMaker-a" +# +# msgid "Make sure WindowMaker is in your search path." +# msgstr "Provjerite da je WindowMaker u va¹oj search stazi." +# +# msgid "...do not resize over dock" +# msgstr "ne pokrivati dock" +# +# msgid "" +# "WPrefs only supports WindowMaker 0.18.0 or newer.\n" +# "The version installed is %i.%i.%i\n" +# msgstr "" +# "WPrefs podr¾ava samo WindowMaker 0.18.0 ili noviji.\n" +# "Instalirana je verzija %i.%i.%i\n" +# +# msgid "Could not load global WindowMaker domain (%s)." +# msgstr "Ne mogu uèitati globlanu WindowMaker domenu (%s)." +# +# msgid "Loading WindowMaker configuration files..." +# msgstr "Uèitavam WindowMaker konfiguracijske datoteke..." +# +# msgid "Aplications Menu Definition" +# msgstr "Definiranje izbornika Aplikacije" +# +# msgid "The command supplied must generate and output a valid menu definition to stdout. This definition should be in the plain text menu file format, described in the menu files included with WindowMaker, probably at ~/GNUstep/Library/WindowMaker/menu" +# msgstr "Ponuðena naredba mora generirati i ispisati va¾eæu definicuju izbornika na stdout. Ova bi definicja trebala biti u èistom tekst menu formatu koji je opisan u menu datotekama iz distribucije, vjerojatno u ~/GNUstep/Library/WindowMaker/menu" +# +# msgid "" +# "bad speed value for option %s.\n" +# "Using default Medium" +# msgstr "" +# "kriva vrijednost za brzinu za opciju %s.\n" +# "Koristm Medium" +# +# msgid "The format of the current menu file (%s) is not supported by WPrefs. A new menu will be created." +# msgstr "Format trenutne datoteke izbornika (%s) nije podr¾an od strane WPrefs-a. Kreirat æu novi izbornik." +# +# msgid "Omnipresent miniwindows" +# msgstr "SvugdjePrisutni mini prozori" +# +# msgid "Error extracting version from WindowMaker. Make sure it is correctly installed." +# msgstr "Gre¹ka pri izvlaèenju verzije WindowMakera. Provjerite da je ispravno instaliran." +# +# msgid "Auto-arrange icons" +# msgstr "Auto-pospremanje ikona" +# +# msgid "Open submenus to the left if they don't fit inside the screen." +# msgstr "Otvoriti podizbornike na lijevo ako ne stanu unutar ekrana." +# +# msgid "Use SaveUnders in icons, menus and other objects" +# msgstr "Koristi SnimiIspod u ikonama, izbornicima i drugim objektima" +# +# msgid "Type the path for the directory. You can type more than one path by separating them with spaces." +# msgstr "Upi¹ite stazu za direktorij. Mo¾ete upisati vi¹e od jedne staze odvajajuæi ih razmacima." +# +# msgid "invalid data in option WindowPlacementOrigin. Using default (0,0)" +# msgstr "krivi podaci u opciji WindowPlacementOrigin. Koristim (0,0)" +# +# msgid "Icon Size" +# msgstr "Velièina ikone" +# + \ No newline at end of file diff --git a/WPrefs.app/po/hr.po b/WPrefs.app/po/ko.po similarity index 59% copy from WPrefs.app/po/hr.po copy to WPrefs.app/po/ko.po index 6023b7d7..bd35d163 100644 --- a/WPrefs.app/po/hr.po +++ b/WPrefs.app/po/ko.po @@ -1,1268 +1,1370 @@ -# Message catalog for WindowMaker -# Copyright (C) 1998 Free Software Foundation, Inc. -# David Sauer , 1998. -# -msgid "" -msgstr "" -"Project-Id-Version: WPrefs 0.6 (WindowMaker 0.20.x)\n" -"POT-Creation-Date: 1998-10-24 12:35+0200\n" -"PO-Revision-Date: 1998-10-27 13:02+01:00\n" -"Last-Translator: David Sauer \n" -"Language-Team: czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-2\n" -"Content-Transfer-Encoding: unknown\n" - -#: ../../WPrefs.app/Configurations.c:142 ../../WPrefs.app/Configurations.c:148 -#: ../../WPrefs.app/MouseSettings.c:510 ../../WPrefs.app/WindowHandling.c:270 -#: ../../WPrefs.app/WindowHandling.c:282 ../../WPrefs.app/Workspace.c:71 -#: ../../WPrefs.app/Workspace.c:77 -#, c-format -msgid "could not load icon %s" -msgstr "nelze naèíst ikonu %s" - -#: ../../WPrefs.app/Configurations.c:156 ../../WPrefs.app/Workspace.c:85 -#, c-format -msgid "could not process icon %s:" -msgstr "nelze zpracovat ikonu %s:" - -#: ../../WPrefs.app/Configurations.c:181 ../../WPrefs.app/Workspace.c:124 -#, c-format -msgid "could not load image file %s" -msgstr "ze souboru %s nelze naèíst obrázek" - -#: ../../WPrefs.app/Configurations.c:195 -msgid "Icon Slide Speed" -msgstr "Rychlost klouzání ikony" - -#: ../../WPrefs.app/Configurations.c:201 -msgid "Shade Animation Speed" -msgstr "Rychlost zmìny okna na titulek" - -#: ../../WPrefs.app/Configurations.c:234 ../../WPrefs.app/Configurations.c:246 -#: ../../WPrefs.app/Focus.c:310 ../../WPrefs.app/Focus.c:321 -#: ../../WPrefs.app/MenuPreferences.c:135 -#: ../../WPrefs.app/MenuPreferences.c:146 -#: ../../WPrefs.app/MenuPreferences.c:174 -#: ../../WPrefs.app/MenuPreferences.c:189 ../../WPrefs.app/MouseSettings.c:538 -#: ../../WPrefs.app/MouseSettings.c:549 ../../WPrefs.app/MouseSettings.c:604 -#: ../../WPrefs.app/MouseSettings.c:615 ../../WPrefs.app/MouseSettings.c:651 -#: ../../WPrefs.app/MouseSettings.c:666 ../../WPrefs.app/MouseSettings.c:682 -#: ../../WPrefs.app/WPrefs.c:398 ../../WPrefs.app/WPrefs.c:416 -#, c-format -msgid "could not load icon file %s" -msgstr "nelze naèíst soubor s ikonou %s" - -#: ../../WPrefs.app/Configurations.c:262 -msgid "Titlebar Style" -msgstr "Styl titulku" - -#: ../../WPrefs.app/Configurations.c:299 -msgid "Animations and Sound" -msgstr "Animace a Zvuky" - -#: ../../WPrefs.app/Configurations.c:305 -msgid "Animations" -msgstr "Animace" - -#: ../../WPrefs.app/Configurations.c:321 -msgid "Superfluous" -msgstr "Animace+" - -#: ../../WPrefs.app/Configurations.c:337 -msgid "Sounds" -msgstr "Zvuky" - -#: ../../WPrefs.app/Configurations.c:354 -msgid "Note: sound requires a module distributed separately" -msgstr "Poznámka: zvuk vy¾aduje samostatný modul" - -#: ../../WPrefs.app/Configurations.c:364 -msgid "Dithering colormap for 8bpp" -msgstr "Ditherovat na 8bpp" - -#: ../../WPrefs.app/Configurations.c:369 -msgid "Disable dithering in any visual/depth" -msgstr "Zaka¾ jakékoli ditherování" - -#: ../../WPrefs.app/Configurations.c:390 -msgid "More colors for applications" -msgstr "Barvy aplikacím" - -#: ../../WPrefs.app/Configurations.c:397 -msgid "More colors for WindowMaker" -msgstr "Barvy WindowMakeru" - -#: ../../WPrefs.app/Configurations.c:450 -msgid "Other Configurations" -msgstr "Dal¹í konfigurace" - -#: ../../WPrefs.app/Expert.c:70 -msgid "Do not set non-WindowMaker specific parameters (do not use xset)" -msgstr "Nenastavovat parametry mimo WindowMaker (nepou¾ívat xset)" - -#: ../../WPrefs.app/Expert.c:71 -msgid "Automatically save session when exiting WindowMaker" -msgstr "Pøi ukonèení WindowMakeru automaticky ulo¾it sezení" - -#: ../../WPrefs.app/Expert.c:72 -msgid "Use SaveUnder in window frames, icons, menus and other objects" -msgstr "Pou¾ívat SaveUnder pøi vykreslení rámeèkù, menu, ikon apod." - -#: ../../WPrefs.app/Expert.c:73 -msgid "Disable cycling color highlighting of icons." -msgstr "Zaka¾ rotaci barev pøi zvýraznìní ikon" - -#: ../../WPrefs.app/Expert.c:103 -msgid "Expert User Preferences" -msgstr "Nastavení pro experty" - -#: ../../WPrefs.app/Focus.c:79 -#, c-format -msgid "bad option value %s for option FocusMode. Using default Manual" -msgstr "chybná hodnota %s pro FocusMode. Pou¾ívám Manual" - -#: ../../WPrefs.app/Focus.c:92 -#, c-format -msgid "bad option value %s for option ColormapMode. Using default Manual" -msgstr "chybná hodnota %s pro ColormapMode. Pou¾ívám Manual" - -#: ../../WPrefs.app/Focus.c:190 -msgid "" -"Click on the window to set\n" -"keyboard input focus." -msgstr "" -"«uk my¹í v oknì zamìøí\n" -"vstup z klávesnice" - -#: ../../WPrefs.app/Focus.c:194 -msgid "" -"Set keyboard input focus to\n" -"the window under the mouse pointer,\n" -"including the root window." -msgstr "" -"Nastav zamìøení vstupu\n" -"na okno pod ukazatelem my¹i.\n" -"(vèetnì hlavního okna)" - -#: ../../WPrefs.app/Focus.c:199 -msgid "" -"Set keyboard input focus to\n" -"the window under the mouse pointer,\n" -"except the root window." -msgstr "" -"Nastav zamìøení vstupu\n" -"na okno pod ukazatelem my¹i.\n" -"(mimo hlavního okna)" - -#: ../../WPrefs.app/Focus.c:243 -msgid "Input Focus Mode" -msgstr "Zpùsob zamìøení okna" - -#: ../../WPrefs.app/Focus.c:248 -msgid "Click window to focus" -msgstr "«uk my¹í zamìøí" - -#: ../../WPrefs.app/Focus.c:249 -msgid "Focus follows mouse" -msgstr "Pohyb my¹í zamìøí" - -#: ../../WPrefs.app/Focus.c:250 -msgid "\"Sloppy\" focus" -msgstr "Re¾im \"Sloopy\"" - -#: ../../WPrefs.app/Focus.c:265 -msgid "Install colormap in the window..." -msgstr "Nastavit mapu barev v oknì.." - -#: ../../WPrefs.app/Focus.c:270 -msgid "...that has the input focus." -msgstr "... které má zamìøení." - -#: ../../WPrefs.app/Focus.c:275 -msgid "...that is under the mouse pointer." -msgstr "... které je pod my¹í." - -#: ../../WPrefs.app/Focus.c:284 -msgid "Automatic Window Raise Delay" -msgstr "Prodleva pøi vyzdvihnutí oken" - -#: ../../WPrefs.app/Focus.c:341 -msgid "msec" -msgstr "ms" - -#: ../../WPrefs.app/Focus.c:358 -msgid "Do not let aplications receive the click used to focus windows." -msgstr "Nepovolit aplikaci pøijmout »uk my¹í k zamìøení oken." - -#: ../../WPrefs.app/Focus.c:364 -msgid "Automatically focus new windows." -msgstr "Automaticky zamìøit nová okna." - -#: ../../WPrefs.app/Focus.c:385 -msgid "Window Focus Preferences" -msgstr "Nastavení zamìøení oken" - -#: ../../WPrefs.app/KeyboardSettings.c:72 -msgid "Initial Key Repeat" -msgstr "Zaèít opakovat po ..." - -#: ../../WPrefs.app/KeyboardSettings.c:113 -msgid "Key Repeat Rate" -msgstr "Rychlost opakování kláves" - -#: ../../WPrefs.app/KeyboardSettings.c:153 -msgid "Type here to test" -msgstr "Zkuste klávesnici zde" - -#: ../../WPrefs.app/KeyboardSettings.c:172 -msgid "Keyboard Preferences" -msgstr "Nastavení klávesnice" - -#: ../../WPrefs.app/KeyboardShortcuts.c:161 ../../WPrefs.app/Menu.c:923 -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/MenuGuru.c:263 -msgid "Cancel" -msgstr "Nic" - -#: ../../WPrefs.app/KeyboardShortcuts.c:162 -msgid "Press the desired shortcut key(s) or click Cancel to stop capturing." -msgstr "Stisknìte po¾adované klávesy nebo pou¾ijete \"Nic\"." - -#: ../../WPrefs.app/KeyboardShortcuts.c:180 -#: ../../WPrefs.app/KeyboardShortcuts.c:374 ../../WPrefs.app/Menu.c:935 -#: ../../WPrefs.app/Menu.c:1157 -msgid "Capture" -msgstr "Snímat" - -#: ../../WPrefs.app/KeyboardShortcuts.c:181 -#: ../../WPrefs.app/KeyboardShortcuts.c:381 -msgid "Click Capture to interactively define the shortcut key." -msgstr "Pou¾ijte \"Snímat\" k definici klávesy." - -#: ../../WPrefs.app/KeyboardShortcuts.c:299 -msgid "Actions" -msgstr "Akce" - -#: ../../WPrefs.app/KeyboardShortcuts.c:313 -msgid "Open applications menu" -msgstr "Otevøít menu aplikací" - -#: ../../WPrefs.app/KeyboardShortcuts.c:314 -msgid "Open window list menu" -msgstr "Otevøít menu s okny" - -#: ../../WPrefs.app/KeyboardShortcuts.c:315 -msgid "Open window commands menu" -msgstr "Otevøít menu s pøikazy pro okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:316 -msgid "Hide active application" -msgstr "Skrýt aplikaci" - -#: ../../WPrefs.app/KeyboardShortcuts.c:317 -msgid "Miniaturize active window" -msgstr "Miniaturizace" - -#: ../../WPrefs.app/KeyboardShortcuts.c:318 -msgid "Close active window" -msgstr "Uzavøít okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:319 -msgid "Maximize active window" -msgstr "Maximalizace okna" - -#: ../../WPrefs.app/KeyboardShortcuts.c:320 -msgid "Maximize active window vertically" -msgstr "Vertikální maximalizace" - -#: ../../WPrefs.app/KeyboardShortcuts.c:321 -msgid "Raise active window" -msgstr "Aktivní okno vý¹e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:322 -msgid "Lower active window" -msgstr "Aktivní okno ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:323 -msgid "Raise/Lower window under mouse pointer" -msgstr "Okno pod ukazatelem my¹i vý¹e/ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:324 -msgid "Shade active window" -msgstr "Z okna jen titulek" - -#: ../../WPrefs.app/KeyboardShortcuts.c:325 -msgid "Select active window" -msgstr "Vyber okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:326 -msgid "Focus next window" -msgstr "Zamìrit dal¹í oknp" - -#: ../../WPrefs.app/KeyboardShortcuts.c:327 -msgid "Focus previous window" -msgstr "Zamìøit pøedchozí okno" - -#: ../../WPrefs.app/KeyboardShortcuts.c:328 -msgid "Switch to next workspace" -msgstr "Dal¹í plocha" - -#: ../../WPrefs.app/KeyboardShortcuts.c:329 -msgid "Switch to previous workspace" -msgstr "Pøedchozí plocha" - -#: ../../WPrefs.app/KeyboardShortcuts.c:330 -msgid "Switch to next ten workspaces" -msgstr "Dal¹ích 10 ploch" - -#: ../../WPrefs.app/KeyboardShortcuts.c:331 -msgid "Switch to previous ten workspaces" -msgstr "Pøedchozích 10 ploch" - -#: ../../WPrefs.app/KeyboardShortcuts.c:332 -msgid "Switch to workspace 1" -msgstr "Pøepni na plochu 1" - -#: ../../WPrefs.app/KeyboardShortcuts.c:333 -msgid "Switch to workspace 2" -msgstr "Pøepni na plochu 2" - -#: ../../WPrefs.app/KeyboardShortcuts.c:334 -msgid "Switch to workspace 3" -msgstr "Pøepni na plochu 3" - -#: ../../WPrefs.app/KeyboardShortcuts.c:335 -msgid "Switch to workspace 4" -msgstr "Pøepni na plochu 4" - -#: ../../WPrefs.app/KeyboardShortcuts.c:336 -msgid "Switch to workspace 5" -msgstr "Pøepni na plochu 5" - -#: ../../WPrefs.app/KeyboardShortcuts.c:337 -msgid "Switch to workspace 6" -msgstr "Pøepni na plochu 6" - -#: ../../WPrefs.app/KeyboardShortcuts.c:338 -msgid "Switch to workspace 7" -msgstr "Pøepni na plochu 7" - -#: ../../WPrefs.app/KeyboardShortcuts.c:339 -msgid "Switch to workspace 8" -msgstr "Pøepni na plochu 8" - -#: ../../WPrefs.app/KeyboardShortcuts.c:340 -msgid "Switch to workspace 9" -msgstr "Pøepni na plochu 9" - -#: ../../WPrefs.app/KeyboardShortcuts.c:341 -msgid "Switch to workspace 10" -msgstr "Pøepni na plochu 10" - -#: ../../WPrefs.app/KeyboardShortcuts.c:342 -msgid "Raise Clip" -msgstr "Sponku vý¹e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:343 -msgid "Lower Clip" -msgstr "Sponku ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:344 -msgid "Raise/Lower Clip" -msgstr "Sponku vý¹e/ní¾e" - -#: ../../WPrefs.app/KeyboardShortcuts.c:357 ../../WPrefs.app/Menu.c:1146 -msgid "Shortcut" -msgstr "Zkratka" - -#: ../../WPrefs.app/KeyboardShortcuts.c:368 -msgid "Clear" -msgstr "Vyma¾" - -#: ../../WPrefs.app/KeyboardShortcuts.c:429 -msgid "Keyboard Shortcut Preferences" -msgstr "Nastavení klávesových zkratek" - -#: ../../WPrefs.app/Menu.c:373 -msgid "Window Manager" -msgstr "Mana¾er oken" - -#: ../../WPrefs.app/Menu.c:375 -msgid "Program to open files" -msgstr "Program na otvírání souborù" - -#: ../../WPrefs.app/Menu.c:377 ../../WPrefs.app/Menu.c:1133 -msgid "Program to Run" -msgstr "Spustit program" - -#: ../../WPrefs.app/Menu.c:427 ../../WPrefs.app/Menu.c:428 -#, c-format -msgid "New Command %i" -msgstr "Nový pøíkaz %i" - -#: ../../WPrefs.app/Menu.c:435 -msgid "New Submenu" -msgstr "Nové podmenu" - -#: ../../WPrefs.app/Menu.c:440 -msgid "External Menu" -msgstr "Externí menu" - -#: ../../WPrefs.app/Menu.c:447 -msgid "Workspaces" -msgstr "Pracovní plochy" - -#: ../../WPrefs.app/Menu.c:1017 ../../WPrefs.app/Menu.c:1032 -msgid "Commands" -msgstr "Pøíkazy" - -#: ../../WPrefs.app/Menu.c:1018 ../../WPrefs.app/Menu.c:1033 -msgid "Add Command" -msgstr "Pøidat pøíkaz" - -#: ../../WPrefs.app/Menu.c:1019 ../../WPrefs.app/Menu.c:1034 -msgid "Add Submenu" -msgstr "Pøidat podmenu" - -#: ../../WPrefs.app/Menu.c:1020 ../../WPrefs.app/Menu.c:1035 -msgid "Add External Menu" -msgstr "Pøidat externí menu" - -#: ../../WPrefs.app/Menu.c:1021 ../../WPrefs.app/Menu.c:1036 -msgid "Add Workspace Menu" -msgstr "Pøidat menu ploch" - -#: ../../WPrefs.app/Menu.c:1022 ../../WPrefs.app/Menu.c:1037 -msgid "Remove Item" -msgstr "Odstraò polo¾ku" - -#: ../../WPrefs.app/Menu.c:1023 ../../WPrefs.app/Menu.c:1038 -msgid "Cut Item" -msgstr "Vyøízni polo¾ku" - -#: ../../WPrefs.app/Menu.c:1024 ../../WPrefs.app/Menu.c:1039 -msgid "Copy Item" -msgstr "Zkopíruj polo¾ku" - -#: ../../WPrefs.app/Menu.c:1025 ../../WPrefs.app/Menu.c:1040 -msgid "Paste Item" -msgstr "Vlo¾ polo¾ku" - -#: ../../WPrefs.app/Menu.c:1069 -msgid "Label" -msgstr "Oznaèení" - -#: ../../WPrefs.app/Menu.c:1082 -msgid "Command" -msgstr "Pøíkaz" - -#: ../../WPrefs.app/Menu.c:1087 -msgid "Run Program" -msgstr "Spus» program" - -#: ../../WPrefs.app/Menu.c:1088 -msgid "Arrange Icons" -msgstr "Srovnej ikony" - -#: ../../WPrefs.app/Menu.c:1089 -msgid "Hide Others" -msgstr "Skryj ostatní" - -#: ../../WPrefs.app/Menu.c:1090 -msgid "Show All Windows" -msgstr "Uka¾ v¹echna okna" - -#: ../../WPrefs.app/Menu.c:1091 -msgid "Exit WindowMaker" -msgstr "Ukonèit mana¾era oken" - -#: ../../WPrefs.app/Menu.c:1092 -msgid "Exit X Session" -msgstr "Ukonèit sezení X" - -#: ../../WPrefs.app/Menu.c:1093 -msgid "Start window manager" -msgstr "Odstartovat mana¾er oken" - -#: ../../WPrefs.app/Menu.c:1094 -msgid "Restart WindowMaker" -msgstr "RestartWindowMakeru" - -#: ../../WPrefs.app/Menu.c:1095 -msgid "Save Session" -msgstr "Ulo¾it stav sezení" - -#: ../../WPrefs.app/Menu.c:1096 -msgid "Clear Session" -msgstr "Vymazat sezení" - -#: ../../WPrefs.app/Menu.c:1097 -msgid "Refresh Screen" -msgstr "Obnovit obrazovku" - -#: ../../WPrefs.app/Menu.c:1098 -msgid "Info Panel" -msgstr "Informace" - -#: ../../WPrefs.app/Menu.c:1099 -msgid "Legal Panel" -msgstr "Copyright" - -#: ../../WPrefs.app/Menu.c:1107 -msgid "Open workspace menu" -msgstr "Otevøít menu ploch" - -#: ../../WPrefs.app/Menu.c:1114 -msgid "No confirmation panel" -msgstr "Bez ukonèovacího dialogu" - -#: ../../WPrefs.app/Menu.c:1120 -msgid "Menu Path/Directory List" -msgstr "Cesta k menu/adresáø" - -#: ../../WPrefs.app/Menu.c:1165 -msgid "Ask help to the Guru" -msgstr "Zeptat se Mistra" - -#: ../../WPrefs.app/Menu.c:1285 -msgid "" -"The format of the current menu in ~/G/D/WMRootMenu is not supported by " -"WPrefs. A new menu will be created.\n" -"You can also replace ~/G/D/WMRootMenu with ~/G/L/W/plmenu to get the default " -"menu." -msgstr "" -"Aktuální formát menu v ~/G/D/WMRootMenu není podporován programem WPrefs. Bude vytvoøeno nové menu.\n" -"Standardní menu získáte pøíkazem \"cp ~/G/L/W/plmenu ~/G/D/WMRootMenu\"." - -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1295 -#: ../../WPrefs.app/WPrefs.c:585 -msgid "Warning" -msgstr "Varování" - -#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1296 -#: ../../WPrefs.app/MenuGuru.c:119 ../../WPrefs.app/MenuGuru.c:126 -#: ../../WPrefs.app/MenuGuru.c:140 ../../WPrefs.app/MouseSettings.c:156 -#: ../../WPrefs.app/Text.c:181 ../../WPrefs.app/WPrefs.c:546 -#: ../../WPrefs.app/WPrefs.c:551 ../../WPrefs.app/WPrefs.c:562 -#: ../../WPrefs.app/WPrefs.c:572 ../../WPrefs.app/WPrefs.c:578 -#: ../../WPrefs.app/WPrefs.c:585 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 -msgid "OK" -msgstr "OK" - -#: ../../WPrefs.app/Menu.c:1295 -msgid "Any changes made in this section will not be saved" -msgstr "Jakékoli zmìny v této sekci budou zru¹eny" - -#: ../../WPrefs.app/Menu.c:1360 -msgid "Applications Menu Definition" -msgstr "Definice menu aplikací" - -#: ../../WPrefs.app/MenuGuru.c:106 -msgid "Menu Guru - Select Type" -msgstr "Menu Mistra - Vyberte typ" - -#: ../../WPrefs.app/MenuGuru.c:111 ../../WPrefs.app/MenuGuru.c:133 -#: ../../WPrefs.app/MenuGuru.c:251 -msgid "Next" -msgstr "Dal¹í" - -#: ../../WPrefs.app/MenuGuru.c:114 -msgid "Menu Guru - Select Menu File" -msgstr "Mistrova nabídka - Vyberte soubor menu" - -#: ../../WPrefs.app/MenuGuru.c:122 -msgid "Menu Guru - Select Pipe Command" -msgstr "Mistrova nabídka - Vyberte pøíkaz roury" - -#: ../../WPrefs.app/MenuGuru.c:129 -msgid "Menu Guru - Select Directories" -msgstr "Mistrova nabídka - Vyberte adresáøe" - -#: ../../WPrefs.app/MenuGuru.c:136 -msgid "Menu Guru - Select Command" -msgstr "Mistrova nabídka - Vyberte pøíkaz" - -#: ../../WPrefs.app/MenuGuru.c:257 -msgid "Back" -msgstr "Zpìt" - -#: ../../WPrefs.app/MenuGuru.c:271 -msgid "" -"This process will help you create a submenu which definition is located in " -"another file or is created dynamically.\n" -"What do you want to use as the contents of the submenu?" -msgstr "" -"Mistr vám pomù¾e vytvoøit podmenu ze souboru nebo vytvoøené dynamicky.\n" -"Co chcete pou¾ít jako obsah podmenu?" - -#: ../../WPrefs.app/MenuGuru.c:279 -msgid "" -"A file containing the menu definition in the plain text (non-property list) " -"menu format." -msgstr "Soubor obsahující definici menu jako obyèejný text s daným formátem." - -#: ../../WPrefs.app/MenuGuru.c:285 -msgid "The menu definition generated by a script/program read through a pipe." -msgstr "" -"Definice menu generovaná sriptem nebo programem, definice bude ètena z roury." - -#: ../../WPrefs.app/MenuGuru.c:291 -msgid "The files in one or more directories." -msgstr "Soubory v jednom nebo více adresáøích." - -#: ../../WPrefs.app/MenuGuru.c:303 -msgid "Type the path for the menu file:" -msgstr "Zadejte cestu k souboru s menu:" - -#: ../../WPrefs.app/MenuGuru.c:318 -msgid "" -"The menu file must contain a menu in the plain text menu file format. This " -"format is described in the menu files included with WindowMaker, probably at " -"~/GNUstep/Library/WindowMaker/menu" -msgstr "Soubor s menu musí obsahovat popis menu jako obyèejný text. Tento formát je zøejmý ze souboru s menu, který je distribuován s Window Makerem, pravdìpodobnì v souboru ~/GNUstep/Library/WindowMaker/menu" - -#: ../../WPrefs.app/MenuGuru.c:328 -msgid "Type the command that will generate the menu definition:" -msgstr "Zadejte pøíkaz, který vygeneruje definici menu:" - -#: ../../WPrefs.app/MenuGuru.c:338 -msgid "" -"The command supplied must generate and output a valid menu definition to " -"stdout. This definition should be in the plain text menu file format, " -"described in the menu files included with WindowMaker, usually at " -"~/GNUstep/Library/WindowMaker/menu" -msgstr "Pøíkaz musí generovat a standardní výstup zapsat správnou definici menu. Tato definice musí být ve formì neformátovaného textu, jak je ukázáno v distribuèním souboru s menu, obvykle v ~/GNUstep/Library/WindowMaker/menu" - -#: ../../WPrefs.app/MenuGuru.c:350 ../../WPrefs.app/MenuGuru.c:372 -#: ../../WPrefs.app/MenuGuru.c:394 -msgid "" -"Type the path for the directory. You can type more than one path by " -"separating them with spaces." -msgstr "Zadejte cestu pro adresáø. Pokud chcete zadat více adresáøù, oddìlte je mezerami." - -#: ../../WPrefs.app/MenuGuru.c:361 ../../WPrefs.app/MenuGuru.c:383 -#: ../../WPrefs.app/MenuGuru.c:405 -msgid "" -"The menu generated will have an item for each file in the directory. The " -"directories can contain program executables or data files (such as jpeg " -"images)." -msgstr "Generované menu bude mít polo¾ku pro ka¾dý soubor v adresáøi. Adresáøe mohou obsahovat programy nebo datové soubory, napøíklad obrázky formátu jpeg." - -#: ../../WPrefs.app/MenuGuru.c:415 -msgid "" -"If the directory contain data files, type the command used to open these " -"files. Otherwise, leave it in blank." -msgstr "Pokud adresáø obsahuje datové soubory, zadejte pøíkaz pro jejich otevøení. Jinak ponechte prázdné." - -#: ../../WPrefs.app/MenuGuru.c:426 -msgid "" -"Each file in the directory will have an item and they will be opened with " -"the supplied command.For example, if the directory contains image files and " -"the command is \"xv -root\", each file in the directory will have a menu " -"item like \"xv -root imagefile\"." -msgstr "Ka¾dý soubor v adresáøi bude mít polo¾ku v menu a bude otevøen pomocí daného pøíkazu. Napøíklad, pokud adresáø obsahuje soubory s obrázky a pøíkaz je \"xv -root\", ka¾dý soubor bude mít polo¾ku \"xv -root soubor_s_obrázkem." - -#: ../../WPrefs.app/MenuPreferences.c:112 -msgid "Menu Scrolling Speed" -msgstr "Rychlost posunu menu" - -#: ../../WPrefs.app/MenuPreferences.c:161 -msgid "Submenu Alignment" -msgstr "Zarovnání submenu" - -#: ../../WPrefs.app/MenuPreferences.c:204 -msgid "" -"Always open submenus inside the screen, instead of scrolling.\n" -"Note: this can be an annoyance at some circumstances." -msgstr "" -"Menu otevøít v¾dy na plo¹e obrazovky (neposouvat).\n" -"Poznámka: nìkdy mù¾e zpùsobit problémy." - -#: ../../WPrefs.app/MenuPreferences.c:209 -msgid "Scroll off-screen menus when pointer is moved over them." -msgstr "Posouvat menu pøi pohybu ukazatele nad tímto menu." - -#: ../../WPrefs.app/MenuPreferences.c:229 -msgid "Menu Preferences" -msgstr "Nastavení menu" - -#: ../../WPrefs.app/MouseSettings.c:154 ../../WPrefs.app/Text.c:181 -#: ../../WPrefs.app/WPrefs.c:546 ../../WPrefs.app/WPrefs.c:551 -#: ../../WPrefs.app/WPrefs.c:560 ../../WPrefs.app/WPrefs.c:570 -#: ../../WPrefs.app/WPrefs.c:578 ../../WPrefs.app/WPrefs.c:602 -#: ../../WPrefs.app/WPrefs.c:607 -msgid "Error" -msgstr "Chyba" - -#: ../../WPrefs.app/MouseSettings.c:155 -msgid "" -"Invalid mouse acceleration threshold value. Must be the number of pixels to " -"travel before accelerating." -msgstr "Chybná hodnota pro práh zrychlení my¹i. Zadejte èíslo oznaèující poèet pixelù pøed akcelarecí." - -#: ../../WPrefs.app/MouseSettings.c:209 -#, c-format -msgid "mouse button %s not supported by WPrefs." -msgstr "tlaèítko my¹i %s není podporováno." - -#: ../../WPrefs.app/MouseSettings.c:243 ../../WPrefs.app/MouseSettings.c:254 -#: ../../WPrefs.app/MouseSettings.c:265 -#, c-format -msgid "bad value %s for option %s" -msgstr "chybná hodnota %s pro volbu %s" - -#: ../../WPrefs.app/MouseSettings.c:325 -#, c-format -msgid "" -"modifier key %s for option ModifierKey was not recognized. Using %s as " -"default" -msgstr "" -"modifikátor klávesy %s pro volbu \"ModifierKey\" není znám. Pou¾ívám %s." - -#: ../../WPrefs.app/MouseSettings.c:350 -msgid "could not retrieve keyboard modifier mapping" -msgstr "nelze pøevzít mapování modifikátorù kláves" - -#: ../../WPrefs.app/MouseSettings.c:497 -msgid "Mouse Speed" -msgstr "Rychlost my¹i" - -#: ../../WPrefs.app/MouseSettings.c:564 -msgid "Threshold:" -msgstr "Mez:" - -#: ../../WPrefs.app/MouseSettings.c:579 -msgid "Double-Click Delay" -msgstr "Prodleva pro dvojité »uknutí" - -#: ../../WPrefs.app/MouseSettings.c:623 -msgid "Test" -msgstr "Test" - -#: ../../WPrefs.app/MouseSettings.c:633 -msgid "Workspace Mouse Actions" -msgstr "Akce my¹í" - -#: ../../WPrefs.app/MouseSettings.c:638 -msgid "Disable mouse actions" -msgstr "Zaka¾ akce my¹í" - -#: ../../WPrefs.app/MouseSettings.c:691 -msgid "Applications menu" -msgstr "Menu aplikací" - -#: ../../WPrefs.app/MouseSettings.c:697 -msgid "Window list menu" -msgstr "Seznam oken" - -#: ../../WPrefs.app/MouseSettings.c:703 -msgid "Select windows" -msgstr "Vyber okna" - -#: ../../WPrefs.app/MouseSettings.c:738 -msgid "Mouse Grab Modifier" -msgstr "Modifikátor pro my¹" - -#: ../../WPrefs.app/MouseSettings.c:772 -#, c-format -msgid "could not create %s" -msgstr "nelze vytvoøit \"%s\"" - -#: ../../WPrefs.app/MouseSettings.c:788 -#, c-format -msgid "could not create temporary file %s" -msgstr "nelze vytvoøit doèasný soubor %s" - -#: ../../WPrefs.app/MouseSettings.c:813 -#, c-format -msgid "could not rename file %s to %s\n" -msgstr "soubor %s nelze pøejmenovat na %s\n" - -#: ../../WPrefs.app/MouseSettings.c:896 -msgid "Mouse Preferences" -msgstr "Nastavení my¹i" - -#: ../../WPrefs.app/Paths.c:82 -msgid "bad value in option IconPath. Using default path list" -msgstr "ve volbì IconPath je nesprávná hodnota. Pou¾ívám standardní nastavení" - -#: ../../WPrefs.app/Paths.c:99 -msgid "bad value in option PixmapPath. Using default path list" -msgstr "ve volbì PixmapPath je chybná hodnota. Pou¾ívám standard." - -#: ../../WPrefs.app/Paths.c:301 -msgid "Icon Search Paths" -msgstr "Adresáøe ikon" - -#: ../../WPrefs.app/Paths.c:313 ../../WPrefs.app/Paths.c:349 -msgid "Add" -msgstr "Pøidat" - -#: ../../WPrefs.app/Paths.c:320 ../../WPrefs.app/Paths.c:356 -msgid "Remove" -msgstr "Odstranit" - -#: ../../WPrefs.app/Paths.c:337 -msgid "Pixmap Search Paths" -msgstr "Adresáøe pro obrázky" - -#: ../../WPrefs.app/Paths.c:385 -msgid "Search Path Configuration" -msgstr "Konfigurace prohledávaných cest" - -#: ../../WPrefs.app/Preferences.c:142 -msgid "Size Display" -msgstr "Zobrazení velikosti" - -#: ../../WPrefs.app/Preferences.c:147 ../../WPrefs.app/Preferences.c:163 -msgid "Corner of screen" -msgstr "Roh obrazovky" - -#: ../../WPrefs.app/Preferences.c:148 ../../WPrefs.app/Preferences.c:164 -msgid "Center of screen" -msgstr "Støed obrazovky" - -#: ../../WPrefs.app/Preferences.c:149 ../../WPrefs.app/Preferences.c:165 -msgid "Center of resized window" -msgstr "Støed okna" - -#: ../../WPrefs.app/Preferences.c:150 -msgid "Technical drawing-like" -msgstr "Jako kóty výkresù" - -#: ../../WPrefs.app/Preferences.c:158 -msgid "Position Display" -msgstr "Zobrazení pozice" - -#: ../../WPrefs.app/Preferences.c:173 -msgid "Show balloon text for..." -msgstr "Balónová nápovìda pro..." - -#: ../../WPrefs.app/Preferences.c:180 -msgid "incomplete window titles" -msgstr "nekompletní titulky oken" - -#: ../../WPrefs.app/Preferences.c:181 -msgid "miniwindow titles" -msgstr "ikony" - -#: ../../WPrefs.app/Preferences.c:182 -msgid "application/dock icons" -msgstr "aplikaèní/ukotvené ikony" - -#: ../../WPrefs.app/Preferences.c:195 -msgid "Raise window when switching focus with keyboard (CirculateRaise)." -msgstr "Pøi zmìnì zamìøení pøes klávesnici zdvihnout okno." - -#: ../../WPrefs.app/Preferences.c:215 -msgid "Miscellaneous Ergonomic Preferences" -msgstr "Rùzná nastavení ergonomie" - -#: ../../WPrefs.app/Text.c:179 -#, c-format -msgid "Invalid font %s." -msgstr "Chybný font %s." - -#: ../../WPrefs.app/Text.c:256 -msgid "Set Font..." -msgstr "Nastavit font..." - -#: ../../WPrefs.app/Text.c:262 -msgid "Window Title Font" -msgstr "Font titulku oken" - -#: ../../WPrefs.app/Text.c:263 -msgid "Menu Title Font" -msgstr "Font titulku menu" - -#: ../../WPrefs.app/Text.c:264 -msgid "Menu Item Font" -msgstr "Font polo¾ky menu" - -#: ../../WPrefs.app/Text.c:265 -msgid "Icon Title Font" -msgstr "Font titulkù ikon" - -#: ../../WPrefs.app/Text.c:266 -msgid "Clip Title Font" -msgstr "Font pro Sponku" - -#: ../../WPrefs.app/Text.c:267 -msgid "Geometry Display Font" -msgstr "Font zobrazení geometrie" - -#: ../../WPrefs.app/Text.c:280 -msgid "" -"Sample Text\n" -"abcdefghijklmnopqrstuvxywz\n" -"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" -"0123456789" -msgstr "" -"Pøíklad textu\n" -"abcdefghijklmnopqrstuvxywz\n" -"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" -"0123456789" - -#: ../../WPrefs.app/Text.c:285 -msgid "Alignment" -msgstr "Zarovnání" - -#: ../../WPrefs.app/Text.c:290 -msgid "Left" -msgstr "Vlevo" - -#: ../../WPrefs.app/Text.c:296 -msgid "Center" -msgstr "Centrovat" - -#: ../../WPrefs.app/Text.c:303 -msgid "Right" -msgstr "Vpravo" - -#: ../../WPrefs.app/Text.c:325 -msgid "Text Preferences" -msgstr "Nastavení textù" - -#: ../../WPrefs.app/TextureAndColor.c:384 -msgid "Window Title Bar" -msgstr "Titulek okna" - -#: ../../WPrefs.app/TextureAndColor.c:385 -msgid "Menu Title Bar" -msgstr "Menu titulku" - -#: ../../WPrefs.app/TextureAndColor.c:386 -msgid "Menu Items" -msgstr "Polo¾ky men" - -#: ../../WPrefs.app/TextureAndColor.c:387 -msgid "Workspace/Clip" -msgstr "Plocha/Sponka" - -#: ../../WPrefs.app/TextureAndColor.c:388 -msgid "Icons" -msgstr "Ikony" - -#: ../../WPrefs.app/TextureAndColor.c:399 -msgid "Focused Window" -msgstr "Zamìøené okno" - -#: ../../WPrefs.app/TextureAndColor.c:412 -#: ../../WPrefs.app/TextureAndColor.c:443 -#: ../../WPrefs.app/TextureAndColor.c:474 -msgid "Texture" -msgstr "Textura" - -#: ../../WPrefs.app/TextureAndColor.c:418 -#: ../../WPrefs.app/TextureAndColor.c:449 -#: ../../WPrefs.app/TextureAndColor.c:480 -msgid "Text Color" -msgstr "Barva textu" - -#: ../../WPrefs.app/TextureAndColor.c:423 -#: ../../WPrefs.app/TextureAndColor.c:454 -#: ../../WPrefs.app/TextureAndColor.c:485 -#: ../../WPrefs.app/TextureAndColor.c:509 -#: ../../WPrefs.app/TextureAndColor.c:575 -#: ../../WPrefs.app/TextureAndColor.c:652 -msgid "Set..." -msgstr "Nastavit..." - -#: ../../WPrefs.app/TextureAndColor.c:430 -msgid "Unfocused Window" -msgstr "Nezamìøená okna" - -#: ../../WPrefs.app/TextureAndColor.c:461 -msgid "Owner of Focused Window" -msgstr "Vlastník zamìøeného okna" - -#: ../../WPrefs.app/TextureAndColor.c:494 -msgid "Unselected Items" -msgstr "Nevybrané polo¾ky" - -#: ../../WPrefs.app/TextureAndColor.c:504 -#: ../../WPrefs.app/TextureAndColor.c:558 -msgid "Background" -msgstr "Pozadí" - -#: ../../WPrefs.app/TextureAndColor.c:519 -msgid "Normal Text" -msgstr "Normální text" - -#: ../../WPrefs.app/TextureAndColor.c:529 -msgid "Disabled Text" -msgstr "Zakazaný text" - -#: ../../WPrefs.app/TextureAndColor.c:538 -msgid "Selected Items" -msgstr "Vybrané polo¾ky" - -#: ../../WPrefs.app/TextureAndColor.c:548 -msgid "Text" -msgstr "Text" - -#: ../../WPrefs.app/TextureAndColor.c:566 -msgid "Menu Title Background" -msgstr "Pozadí pro titulek menu" - -#: ../../WPrefs.app/TextureAndColor.c:584 -msgid "Menu Title Text" -msgstr "Barva textu v menu" - -#: ../../WPrefs.app/TextureAndColor.c:596 -msgid "Workspace Background" -msgstr "Pozadí plochy" - -#: ../../WPrefs.app/TextureAndColor.c:605 -msgid "Change" -msgstr "Zmìnit" - -#: ../../WPrefs.app/TextureAndColor.c:611 -msgid "Clip Title Text" -msgstr "Barva pro text Sponky" - -#: ../../WPrefs.app/TextureAndColor.c:621 -msgid "Normal" -msgstr "Normální" - -#: ../../WPrefs.app/TextureAndColor.c:631 -msgid "Collapsed" -msgstr "Svinuto" - -#: ../../WPrefs.app/TextureAndColor.c:643 -msgid "Icon Background" -msgstr "Pozadí ikon" - -#: ../../WPrefs.app/TextureAndColor.c:677 -msgid "Texture and Color Preferences" -msgstr "Nastavení textur a barev" - -#: ../../WPrefs.app/WPrefs.c:196 -msgid "Window Maker Preferences" -msgstr "Nastavení Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:220 -msgid "Revert Page" -msgstr "Stránku zpìt" - -#: ../../WPrefs.app/WPrefs.c:226 -msgid "Revert All" -msgstr "V¹e zpìt" - -#: ../../WPrefs.app/WPrefs.c:232 -msgid "Save" -msgstr "Ulo¾" - -#: ../../WPrefs.app/WPrefs.c:238 -msgid "Close" -msgstr "Uzavøi" - -#: ../../WPrefs.app/WPrefs.c:262 -#, c-format -msgid "Version %s for Window Maker %s" -msgstr "Verze %s pro Window Maker %s" - -#: ../../WPrefs.app/WPrefs.c:269 -msgid "Starting..." -msgstr "Startuji..." - -#: ../../WPrefs.app/WPrefs.c:275 -msgid "" -"Programming/Design: Alfredo K. Kojima\n" -"Artwork: Marco van Hylckama Vlieg\n" -"More Programming: James Thompson" -msgstr "" -"Programoval/Návrh: Alfredo K. Kojima\n" -"Pøedloha: Marco van Hylckama Vlieg\n" -"Spolupracoval: James Thompson" - -#: ../../WPrefs.app/WPrefs.c:363 -#, c-format -msgid "could not locate image file %s\n" -msgstr "nelze najít soubor %s s obrázkem\n" - -#: ../../WPrefs.app/WPrefs.c:488 -msgid "Loading Window Maker configuration files..." -msgstr "Ètu konfiguraèní soubory Window Makeru" - -#: ../../WPrefs.app/WPrefs.c:492 -msgid "Initializing configuration panels..." -msgstr "Inicializace konfiguraèních panelù..." - -#: ../../WPrefs.app/WPrefs.c:545 ../../WPrefs.app/WPrefs.c:601 -#, c-format -msgid "Window Maker domain (%s) is corrupted!" -msgstr "Doména Window Makeru (%s) je po¹kozena!" - -#: ../../WPrefs.app/WPrefs.c:549 -#, c-format -msgid "Could not load Window Maker domain (%s) from defaults database." -msgstr "z databáze standardù nelze naèíst doménu Window Makeru (%s)." - -#: ../../WPrefs.app/WPrefs.c:557 -msgid "could not extract version information from Window Maker" -msgstr "od Window Makeru nelze získat èíslo verze" - -#: ../../WPrefs.app/WPrefs.c:558 -msgid "Make sure Window Maker is in your search path." -msgstr "Zajistìte, aby byl Window Maker v prohledávaných adresáøích ($PATH)." - -#: ../../WPrefs.app/WPrefs.c:561 ../../WPrefs.app/WPrefs.c:571 -msgid "" -"Could not extract version from Window Maker. Make sure it is correctly " -"installed." -msgstr "Od Window Makeru nelze získat èíslo verze. Zjistìte, je-li správne instalován." - -#: ../../WPrefs.app/WPrefs.c:576 -#, c-format -msgid "" -"WPrefs only supports Window Maker 0.18.0 or newer.\n" -"The version installed is %i.%i.%i\n" -msgstr "" -"Program WPrefs podporuje Window Maker 0.18.0 a vy¹¹í.\n" -"Instalovaná verze je %i.%i.%i\n" - -#: ../../WPrefs.app/WPrefs.c:583 -#, c-format -msgid "" -"Window Maker %i.%i.%i, which is installed in your system, is not fully " -"supported by this version of WPrefs." -msgstr "Instalovaný Window Maker %i.%i.%i není plnì touto verzí programu WPrefs podporován." - -#: ../../WPrefs.app/WPrefs.c:590 -msgid "could not run \"wmaker -global_defaults_path\"." -msgstr "nelze provést \"wmaker -global_defaults_path\"" - -#: ../../WPrefs.app/WPrefs.c:605 -#, c-format -msgid "Could not load global Window Maker domain (%s)." -msgstr "Nelze naèíst globální doménu pro Window Maker (%s)." - -#: ../../WPrefs.app/WPrefs.c:851 -#, c-format -msgid "" -"bad speed value for option %s\n" -". Using default Medium" -msgstr "" -"pro volbu %s je chybnì urèená\n" -"ryclost. Pou¾ita 'Medium'" - -#: ../../WPrefs.app/WindowHandling.c:107 -#, c-format -msgid "bad option value %s in WindowPlacement. Using default value" -msgstr "chybná hodnota volby %s ve WindowPlacement. Pou¾ívám standardní" - -#: ../../WPrefs.app/WindowHandling.c:129 -msgid "invalid data in option WindowPlaceOrigin. Using default (0,0)" -msgstr "chybná data pro WindowPlaceOrigin. Pou¾ívám (0,0)" - -#: ../../WPrefs.app/WindowHandling.c:188 -msgid "Window Placement" -msgstr "Pokládání oken" - -#: ../../WPrefs.app/WindowHandling.c:193 -msgid "Automatic" -msgstr "Automatické" - -#: ../../WPrefs.app/WindowHandling.c:194 -msgid "Random" -msgstr "Náhodné" - -#: ../../WPrefs.app/WindowHandling.c:195 -msgid "Manual" -msgstr "Ruèní" - -#: ../../WPrefs.app/WindowHandling.c:196 -msgid "Cascade" -msgstr "Kaskádnì" - -#: ../../WPrefs.app/WindowHandling.c:202 -msgid "Placement Origin" -msgstr "Poèáteèní poloha" - -#: ../../WPrefs.app/WindowHandling.c:256 -msgid "Opaque Move" -msgstr "Pøesouvat plná okna" - -#: ../../WPrefs.app/WindowHandling.c:292 -msgid "When maximizing..." -msgstr "Pøi maximalizaci..." - -#: ../../WPrefs.app/WindowHandling.c:297 -msgid "...do not resize over icons" -msgstr "... nezvìt¹ovat pøes ikony" - -#: ../../WPrefs.app/WindowHandling.c:310 -msgid "Keep transients above their owners" -msgstr "Dialogy dr¾et nad vlastníky" - -#: ../../WPrefs.app/WindowHandling.c:337 -msgid "Window Handling Preferences" -msgstr "Nastavení práce s okny" - -#: ../../WPrefs.app/Workspace.c:137 -msgid "Workspace Navigation" -msgstr "Orientace v plochách" - -#: ../../WPrefs.app/Workspace.c:161 -msgid "drag windows between workspaces." -msgstr "táhnout okna mezi pracovními plochami." - -#: ../../WPrefs.app/Workspace.c:186 -msgid "" -"switch to first workspace when switching past the last workspace and " -"vice-versa" -msgstr "za poslední plochou pøepni opìt na první a opaènì" - -#: ../../WPrefs.app/Workspace.c:210 -msgid "create a new workspace when switching past the last workspace." -msgstr "za poslední plochou vytvoø pøi pøepnutí novou." - -#: ../../WPrefs.app/Workspace.c:218 -msgid "Dock/Clip" -msgstr "Dok/Sponka" - -#: ../../WPrefs.app/Workspace.c:287 -msgid "Workspace Preferences" -msgstr "Nastavení pracovní plochy " - -#: ../../WPrefs.app/main.c:56 -#, c-format -msgid "usage: %s [options]\n" -msgstr "pou¾ití: %s [volby]\n" - -#: ../../WPrefs.app/main.c:57 -msgid "options:" -msgstr "volby:" - -#: ../../WPrefs.app/main.c:58 -msgid " -display \tdisplay to be used" -msgstr " -display \tkterý display pou¾ít" - -#: ../../WPrefs.app/main.c:59 -msgid " -version\t\tprint version number and exit" -msgstr " -version\t\tzobraz verzi a konec" - -#: ../../WPrefs.app/main.c:82 -#, c-format -msgid "too few arguments for %s" -msgstr "nedostatek argumetù pro %s" - -#: ../../WPrefs.app/main.c:104 -msgid "X server does not support locale" -msgstr "X server nepodporuje nastavení místních zvyklostí" - -#: ../../WPrefs.app/main.c:107 -msgid "cannot set locale modifiers" -msgstr "nelze nastavit modifikátory místních zvyklostí" - -#: ../../WPrefs.app/main.c:113 -#, c-format -msgid "could not open display %s" -msgstr "nelze otevøít displej %s" - -#: ../../WPrefs.app/main.c:121 -msgid "could not initialize application" -msgstr "nelze inicializovat aplikaci" -\ No newline at end of file +# WindowMaker-0.20.3 WPrefs.app po file. +# Copyright (C) 1998 Free Software Foundation, Inc. +# Byeong-Chan, Kim , 1998. +# Update: CHOI Junho , 1998/12. +# +msgid "" +msgstr "" +"POT-Creation-Date: 1998-12-04 08:08+0900\n" +"Language-Team: Korean\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8-bit\n" +"Date: 1998-09-02 04:43:35+0900\n" +"From: Byeong-Chan, Kim \n" +"Xgettext-Options: --default-domain=WPrefs --add-comments --keyword=_\n" + +#: ../../WPrefs.app/Configurations.c:142 ../../WPrefs.app/Configurations.c:148 +#: ../../WPrefs.app/MouseSettings.c:510 ../../WPrefs.app/WindowHandling.c:274 +#: ../../WPrefs.app/WindowHandling.c:286 ../../WPrefs.app/Workspace.c:71 +#: ../../WPrefs.app/Workspace.c:77 +#, c-format +msgid "could not load icon %s" +msgstr "¾ÆÀÌÄÜ %s¸¦ ÀоîµéÀÏ ¼ö ¾øÀ½" + +#: ../../WPrefs.app/Configurations.c:156 ../../WPrefs.app/Workspace.c:85 +#, c-format +msgid "could not process icon %s:" +msgstr "¾ÆÀÌÄÜ %s¸¦ ó¸®ÇÒ ¼ö ¾øÀ½:" + +#: ../../WPrefs.app/Configurations.c:181 ../../WPrefs.app/Workspace.c:124 +#, c-format +msgid "could not load image file %s" +msgstr "À̹ÌÁö ÆÄÀÏ %s¸¦ ÀÐÀ» ¼ö ¾øÀ½" + +#: ../../WPrefs.app/Configurations.c:195 +msgid "Icon Slide Speed" +msgstr "¾ÆÀÌÄÜ ½½¶óÀÌµå ¼Óµµ" + +#: ../../WPrefs.app/Configurations.c:201 +msgid "Shade Animation Speed" +msgstr "½¦ÀÌµå ¾Ö´Ï¸ÞÀÌ¼Ç ¼Óµµ" + +#: ../../WPrefs.app/Configurations.c:234 ../../WPrefs.app/Configurations.c:246 +#: ../../WPrefs.app/Focus.c:310 ../../WPrefs.app/Focus.c:321 +#: ../../WPrefs.app/MenuPreferences.c:135 +#: ../../WPrefs.app/MenuPreferences.c:146 +#: ../../WPrefs.app/MenuPreferences.c:174 +#: ../../WPrefs.app/MenuPreferences.c:189 ../../WPrefs.app/MouseSettings.c:538 +#: ../../WPrefs.app/MouseSettings.c:549 ../../WPrefs.app/MouseSettings.c:604 +#: ../../WPrefs.app/MouseSettings.c:615 ../../WPrefs.app/MouseSettings.c:651 +#: ../../WPrefs.app/MouseSettings.c:666 ../../WPrefs.app/MouseSettings.c:682 +#: ../../WPrefs.app/WPrefs.c:398 ../../WPrefs.app/WPrefs.c:416 +#, c-format +msgid "could not load icon file %s" +msgstr "¾ÆÀÌÄÜ ÆÄÀÏ %s¸¦ ÀÐÀ» ¼ö ¾øÀ½" + +#: ../../WPrefs.app/Configurations.c:262 +msgid "Titlebar Style" +msgstr "ŸÀÌƲ¹Ù ½ºÅ¸ÀÏ" + +#: ../../WPrefs.app/Configurations.c:299 +msgid "Animations and Sound" +msgstr "¾Ö´Ï¸ÞÀ̼ǰú À½ÇâÈ¿°ú" + +#: ../../WPrefs.app/Configurations.c:305 +msgid "Animations" +msgstr "¾Ö´Ï¸ÞÀ̼Ç" + +#: ../../WPrefs.app/Configurations.c:321 +msgid "Superfluous" +msgstr "Superfluous" + +#: ../../WPrefs.app/Configurations.c:337 +msgid "Sounds" +msgstr "À½ÇâÈ¿°ú" + +#: ../../WPrefs.app/Configurations.c:354 +msgid "Note: sound requires a module distributed separately" +msgstr "ÁÖÀÇ: À½ÇâÈ¿°ú´Â µû·ÎÀÌ ¹èÆ÷µÇ´Â ¸ðµâÀÌ ÇÊ¿äÇÕ´Ï´Ù" + +#: ../../WPrefs.app/Configurations.c:364 +msgid "Dithering colormap for 8bpp" +msgstr "256»ö¿ë Ä÷¯¸Ê µð´õ¸µ" + +#: ../../WPrefs.app/Configurations.c:369 +msgid "Disable dithering in any visual/depth" +msgstr "¸ðµç ºñÁÖ¾ó/»ö»ó ±íÀÌ¿¡¼­ µð´õ¸µ »ç¿ëÇÏÁö ¾ÊÀ½" + +#: ../../WPrefs.app/Configurations.c:390 +msgid "More colors for applications" +msgstr "¾ÖÇø®ÄÉÀ̼ǿ¡ ´õ ¸¹Àº Ä÷¯ ºÎ¿©" + +#: ../../WPrefs.app/Configurations.c:397 +msgid "More colors for WindowMaker" +msgstr "WindowMaker¿¡ ´õ ¸¹Àº Ä÷¯ ºÎ¿©" + +#: ../../WPrefs.app/Configurations.c:450 +msgid "Other Configurations" +msgstr "±× ¿Ü ¼³Á¤" + +#: ../../WPrefs.app/Expert.c:70 +msgid "Do not set non-WindowMaker specific parameters (do not use xset)" +msgstr "WindowMakerÀÇ ±â´ÉÀÌ ¾Æ´Ñ °ÍÀº ¼³Á¤ÇÏÁö ¾ÊÀ½(xsetÀ» »ç¿ëÇÏÁö ¾ÊÀ½)" + +#: ../../WPrefs.app/Expert.c:71 +msgid "Automatically save session when exiting WindowMaker" +msgstr "WindowMaker Á¾·á½Ã ¼¼¼Ç ÀÚµ¿ ÀúÀå" + +#: ../../WPrefs.app/Expert.c:72 +msgid "Use SaveUnder in window frames, icons, menus and other objects" +msgstr "â ÇÁ·¹ÀÓ, ¾ÆÀÌÄÜ, ¸Þ´º µî¿¡¼­ SaveUnder »ç¿ëÇÔ" + +#: ../../WPrefs.app/Expert.c:73 +msgid "Disable cycling color highlighting of icons." +msgstr "¾ÆÀÌÄÜÀÇ »ö»ó ÇÏÀ̶óÀÌÆà ¼øȯ »ç¿ë ¾ÊÀ½." + +#: ../../WPrefs.app/Expert.c:103 +msgid "Expert User Preferences" +msgstr "°í±Þ »ç¿ëÀÚ¿ë ¼³Á¤" + +#: ../../WPrefs.app/Focus.c:79 +#, c-format +msgid "bad option value %s for option FocusMode. Using default Manual" +msgstr "FocusMode ¿É¼Ç¿¡ À߸øµÈ °ª %s. ±âº»°ªÀÎ ManualÀ» »ç¿ë" + +#: ../../WPrefs.app/Focus.c:92 +#, c-format +msgid "bad option value %s for option ColormapMode. Using default Manual" +msgstr "ColormapMode ¿É¼Ç¿¡ À߸øµÈ °ª %s. ±âº»°ªÀÎ ManualÀ» »ç¿ë" + +#: ../../WPrefs.app/Focus.c:190 +msgid "" +"Click on the window to set\n" +"keyboard input focus." +msgstr "Å°º¸µå ÀÔ·Â Æ÷Ä¿½º¸¦ ÁöÁ¤ÇϱâÀ§Çؼ­´Â âÀ» Ŭ¸¯ÇÕ´Ï´Ù." + +#: ../../WPrefs.app/Focus.c:194 +msgid "" +"Set keyboard input focus to\n" +"the window under the mouse pointer,\n" +"including the root window." +msgstr "" +"¸¶¿ì½º Æ÷ÀÎÅ͸¦ ·çÆ® âÀ»\n" +"Æ÷ÇÔÇÑ ¸ðµç ⠾Ʒ¡¿¡ ³õÀ¸¸é\n" +"±× âÀÌ È°¼ºÈ­µË´Ï´Ù." + +#: ../../WPrefs.app/Focus.c:199 +msgid "" +"Set keyboard input focus to\n" +"the window under the mouse pointer,\n" +"except the root window." +msgstr "" +"¸¶¿ì½º Æ÷ÀÎÅ͸¦ ·çÆ® âÀ»\n" +"Á¦¿ÜÇÑ ¸ðµç ⠾Ʒ¡¿¡ ³õÀ¸¸é\n" +"±× âÀÌ È°¼ºÈ­µË´Ï´Ù." + +#: ../../WPrefs.app/Focus.c:243 +msgid "Input Focus Mode" +msgstr "ÀÔ·Â Æ÷Ä¿½º ¸ðµå" + +#: ../../WPrefs.app/Focus.c:248 +msgid "Click window to focus" +msgstr "È°¼ºÈ­Çϱâ À§ÇØ Ã¢À» Ŭ¸¯" + +#: ../../WPrefs.app/Focus.c:249 +msgid "Focus follows mouse" +msgstr "¸¶¿ì½º¸¦ µû¸£´Â Æ÷Ä¿½º" + +#: ../../WPrefs.app/Focus.c:250 +msgid "\"Sloppy\" focus" +msgstr "\"´À½¼ÇÑ\" Æ÷Ä¿½º" + +#: ../../WPrefs.app/Focus.c:265 +msgid "Install colormap in the window..." +msgstr "Ä÷¯¸ÊÀ» ¼³Ä¡ÇÒ ¶§" + +#: ../../WPrefs.app/Focus.c:270 +msgid "...that has the input focus." +msgstr "ÀÔ·Â È°¼ºÈ­°¡ µÈ â¿¡ ¼³Ä¡." + +#: ../../WPrefs.app/Focus.c:275 +msgid "...that is under the mouse pointer." +msgstr "¸¶¿ì½º Æ÷ÀÎÅÍ ¾Æ·¡ÀÇ Ã¢¿¡ ¼³Ä¡." + +#: ../../WPrefs.app/Focus.c:284 +msgid "Automatic Window Raise Delay" +msgstr "ÀÚµ¿ ⠿ø®±â Áö¿¬ ½Ã°£" + +#: ../../WPrefs.app/Focus.c:341 +msgid "msec" +msgstr "¹Ð¸®ÃÊ" + +#: ../../WPrefs.app/Focus.c:358 +msgid "Do not let aplications receive the click used to focus windows." +msgstr "¾îÇø®ÄÉÀ̼ÇÀÌ Ã¢À» È°¼ºÈ­Çϴ Ŭ¸¯À» ¹ÞÁö ¸øÇϵµ·Ï ÇÕ´Ï´Ù." + +#: ../../WPrefs.app/Focus.c:364 +msgid "Automatically focus new windows." +msgstr "»õ·Î¿î âÀ» ÀÚµ¿ È°¼ºÈ­ÇÕ´Ï´Ù." + +#: ../../WPrefs.app/Focus.c:385 +msgid "Window Focus Preferences" +msgstr "â È°¼ºÈ­ ¼³Á¤" + +#: ../../WPrefs.app/KeyboardSettings.c:72 +msgid "Initial Key Repeat" +msgstr "Ãʱâ Å° ¹Ýº¹ ¼Óµµ" + +#: ../../WPrefs.app/KeyboardSettings.c:113 +msgid "Key Repeat Rate" +msgstr "Å° ¹Ýº¹À²" + +#: ../../WPrefs.app/KeyboardSettings.c:153 +msgid "Type here to test" +msgstr "¿©±â¼­ ½ÃÇèÇϼ¼¿ä" + +#: ../../WPrefs.app/KeyboardSettings.c:172 +msgid "Keyboard Preferences" +msgstr "Å°º¸µå ¼³Á¤" + +#: ../../WPrefs.app/KeyboardShortcuts.c:170 ../../WPrefs.app/Menu.c:923 +#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/MenuGuru.c:263 +msgid "Cancel" +msgstr "Ãë¼Ò" + +#: ../../WPrefs.app/KeyboardShortcuts.c:171 +msgid "Press the desired shortcut key(s) or click Cancel to stop capturing." +msgstr "¿øÇÏ´Â ´ÜÃàÅ°¸¦ ´©¸£½Ê½Ã¿À. Ãë¼Ò¸¦ ´©¸£¸é ĸÃÄ°¡ Áߴܵ˴ϴÙ." + +#: ../../WPrefs.app/KeyboardShortcuts.c:189 +#: ../../WPrefs.app/KeyboardShortcuts.c:390 ../../WPrefs.app/Menu.c:935 +#: ../../WPrefs.app/Menu.c:1157 +msgid "Capture" +msgstr "ĸÃÄ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:190 +#: ../../WPrefs.app/KeyboardShortcuts.c:397 +msgid "Click Capture to interactively define the shortcut key." +msgstr "ĸÃÄ ¹öÆ°À» ´­·¯ ´ÜÃàÅ°¸¦ ½±°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù." + +#: ../../WPrefs.app/KeyboardShortcuts.c:308 +msgid "Actions" +msgstr "µ¿ÀÛ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:322 +msgid "Open applications menu" +msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ¸Þ´º ¿­±â" + +#: ../../WPrefs.app/KeyboardShortcuts.c:323 +msgid "Open window list menu" +msgstr "â ¸ñ·Ï ¸Þ´º ¿­±â" + +#: ../../WPrefs.app/KeyboardShortcuts.c:324 +msgid "Open window commands menu" +msgstr "â ¸í·É ¸Þ´º ¿­±â" + +#: ../../WPrefs.app/KeyboardShortcuts.c:325 +msgid "Hide active application" +msgstr "È°¼ºÈ­µÈ ¾ÖÇø®ÄÉÀÌ¼Ç ¼û±è" + +#: ../../WPrefs.app/KeyboardShortcuts.c:326 +msgid "Miniaturize active window" +msgstr "È°¼ºÈ­µÈ â ÃÖ¼ÒÈ­" + +#: ../../WPrefs.app/KeyboardShortcuts.c:327 +msgid "Close active window" +msgstr "È°¼ºÈ­µÈ ⠴ݱâ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:328 +msgid "Maximize active window" +msgstr "È°¼ºÈ­µÈ â ÃÖ´ëÈ­" + +#: ../../WPrefs.app/KeyboardShortcuts.c:329 +msgid "Maximize active window vertically" +msgstr "âÀ» ¼¼·Î·Î ÃÖ´ëÈ­" + +#: ../../WPrefs.app/KeyboardShortcuts.c:330 +msgid "Raise active window" +msgstr "È°¼ºÈ­µÈ âÀ» À§·Î" + +#: ../../WPrefs.app/KeyboardShortcuts.c:331 +msgid "Lower active window" +msgstr "È°¼ºÈ­µÈ âÀ» ¾Æ·¡·Î" + +#: ../../WPrefs.app/KeyboardShortcuts.c:332 +msgid "Raise/Lower window under mouse pointer" +msgstr "¸¶¿ì½º°¡ À§Ä¡ÇÑ Ã¢ ¿Ã¸²/³»¸²" + +#: ../../WPrefs.app/KeyboardShortcuts.c:333 +msgid "Shade active window" +msgstr "È°¼ºÈ­µÈ â ½¦À̵ùÇϱâ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:334 +msgid "Select active window" +msgstr "È°¼ºÈ­ â ¼±ÅÃ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:335 +msgid "Focus next window" +msgstr "´ÙÀ½ â È°¼ºÈ­" + +#: ../../WPrefs.app/KeyboardShortcuts.c:336 +msgid "Focus previous window" +msgstr "ÀÌÀü â È°¼ºÈ­" + +#: ../../WPrefs.app/KeyboardShortcuts.c:337 +msgid "Switch to next workspace" +msgstr "´ÙÀ½ ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:338 +msgid "Switch to previous workspace" +msgstr "ÀÌÀü ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:339 +msgid "Switch to next ten workspaces" +msgstr "10°³ ´ÙÀ½ ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:340 +msgid "Switch to previous ten workspaces" +msgstr "10°³ ÀÌÀü ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:341 +msgid "Switch to workspace 1" +msgstr "1¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:342 +msgid "Switch to workspace 2" +msgstr "2¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:343 +msgid "Switch to workspace 3" +msgstr "3¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:344 +msgid "Switch to workspace 4" +msgstr "4¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:345 +msgid "Switch to workspace 5" +msgstr "5¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:346 +msgid "Switch to workspace 6" +msgstr "6¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:347 +msgid "Switch to workspace 7" +msgstr "7¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:348 +msgid "Switch to workspace 8" +msgstr "8¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:349 +msgid "Switch to workspace 9" +msgstr "9¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:350 +msgid "Switch to workspace 10" +msgstr "10¹ø ÀÛ¾÷°ø°£À¸·Î Àüȯ" + +#: ../../WPrefs.app/KeyboardShortcuts.c:351 +msgid "Shortcut for window 1" +msgstr "1¹ø â ´ÜÃàÅ°" + +#: ../../WPrefs.app/KeyboardShortcuts.c:352 +msgid "Shortcut for window 2" +msgstr "2¹ø â ´ÜÃàÅ°" + +#: ../../WPrefs.app/KeyboardShortcuts.c:353 +msgid "Shortcut for window 3" +msgstr "3¹ø â ´ÜÃàÅ°" + +#: ../../WPrefs.app/KeyboardShortcuts.c:354 +msgid "Shortcut for window 4" +msgstr "4¹ø â ´ÜÃàÅ°" + +#: ../../WPrefs.app/KeyboardShortcuts.c:355 +msgid "Raise Clip" +msgstr "Ŭ¸³ ¿Ã¸²" + +#: ../../WPrefs.app/KeyboardShortcuts.c:356 +msgid "Lower Clip" +msgstr "Ŭ¸³ ³»¸²" + +#: ../../WPrefs.app/KeyboardShortcuts.c:357 +msgid "Raise/Lower Clip" +msgstr "Ŭ¸³ ¿Ã¸²/³»¸²" + +#: ../../WPrefs.app/KeyboardShortcuts.c:359 +msgid "Toggle keyboard language" +msgstr "" + +#: ../../WPrefs.app/KeyboardShortcuts.c:373 ../../WPrefs.app/Menu.c:1146 +msgid "Shortcut" +msgstr "´ÜÃàÅ°" + +#: ../../WPrefs.app/KeyboardShortcuts.c:384 +msgid "Clear" +msgstr "Áö¿ò" + +#: ../../WPrefs.app/KeyboardShortcuts.c:445 +msgid "Keyboard Shortcut Preferences" +msgstr "Å°º¸µå ´ÜÃàÅ° ¼³Á¤" + +#: ../../WPrefs.app/Menu.c:373 +msgid "Window Manager" +msgstr "â °ü¸®ÀÚ" + +#: ../../WPrefs.app/Menu.c:375 +msgid "Program to open files" +msgstr "ÆÄÀÏÀ» ¿­ ÇÁ·Î±×·¥" + +#: ../../WPrefs.app/Menu.c:377 ../../WPrefs.app/Menu.c:1133 +msgid "Program to Run" +msgstr "½ÇÇàÇÒ ÇÁ·Î±×·¥" + +#: ../../WPrefs.app/Menu.c:427 ../../WPrefs.app/Menu.c:428 +#, c-format +msgid "New Command %i" +msgstr "»õ ¸í·É %i" + +#: ../../WPrefs.app/Menu.c:435 +msgid "New Submenu" +msgstr "»õ ºÎ¸Þ´º" + +#: ../../WPrefs.app/Menu.c:440 +msgid "External Menu" +msgstr "¿ÜºÎ ¸Þ´º" + +#: ../../WPrefs.app/Menu.c:447 +msgid "Workspaces" +msgstr "ÀÛ¾÷ °ø°£" + +#: ../../WPrefs.app/Menu.c:1017 ../../WPrefs.app/Menu.c:1032 +msgid "Commands" +msgstr "¸í·É" + +#: ../../WPrefs.app/Menu.c:1018 ../../WPrefs.app/Menu.c:1033 +msgid "Add Command" +msgstr "¸í·É Ãß°¡" + +#: ../../WPrefs.app/Menu.c:1019 ../../WPrefs.app/Menu.c:1034 +msgid "Add Submenu" +msgstr "ºÎ¸Þ´º Ãß°¡" + +#: ../../WPrefs.app/Menu.c:1020 ../../WPrefs.app/Menu.c:1035 +msgid "Add External Menu" +msgstr "¿ÜºÎ ¸Þ´º Ãß°¡" + +#: ../../WPrefs.app/Menu.c:1021 ../../WPrefs.app/Menu.c:1036 +msgid "Add Workspace Menu" +msgstr "ÀÛ¾÷°ø°£ ¸Þ´º Ãß°¡" + +#: ../../WPrefs.app/Menu.c:1022 ../../WPrefs.app/Menu.c:1037 +msgid "Remove Item" +msgstr "Ç׸ñ »èÁ¦" + +#: ../../WPrefs.app/Menu.c:1023 ../../WPrefs.app/Menu.c:1038 +msgid "Cut Item" +msgstr "Ç׸ñ À߶󳻱â" + +#: ../../WPrefs.app/Menu.c:1024 ../../WPrefs.app/Menu.c:1039 +msgid "Copy Item" +msgstr "Ç׸ñ º¹»ç" + +#: ../../WPrefs.app/Menu.c:1025 ../../WPrefs.app/Menu.c:1040 +msgid "Paste Item" +msgstr "Ç׸ñ ºÙÀ̱â" + +#: ../../WPrefs.app/Menu.c:1069 +msgid "Label" +msgstr "·¹À̺í" + +#: ../../WPrefs.app/Menu.c:1082 +msgid "Command" +msgstr "¸í·É" + +#: ../../WPrefs.app/Menu.c:1087 +msgid "Run Program" +msgstr "ÇÁ·Î±×·¥ ½ÇÇà" + +#: ../../WPrefs.app/Menu.c:1088 +msgid "Arrange Icons" +msgstr "¾ÆÀÌÄÜ Á¤·Ä" + +#: ../../WPrefs.app/Menu.c:1089 +msgid "Hide Others" +msgstr "´Ù¸¥ â ¼û±â±â" + +#: ../../WPrefs.app/Menu.c:1090 +msgid "Show All Windows" +msgstr "¸ðµç â º¸À̱â" + +#: ../../WPrefs.app/Menu.c:1091 +msgid "Exit WindowMaker" +msgstr "WindowMaker Á¾·á" + +#: ../../WPrefs.app/Menu.c:1092 +msgid "Exit X Session" +msgstr "X ¼¼¼Ç Á¾·á" + +#: ../../WPrefs.app/Menu.c:1093 +msgid "Start window manager" +msgstr "â °ü¸®ÀÚ ½ÃÀÛ " + +#: ../../WPrefs.app/Menu.c:1094 +msgid "Restart WindowMaker" +msgstr "WindowMaker Àç½ÃÀÛ" + +#: ../../WPrefs.app/Menu.c:1095 +msgid "Save Session" +msgstr "¼¼¼Ç ÀúÀå" + +#: ../../WPrefs.app/Menu.c:1096 +msgid "Clear Session" +msgstr "¼¼¼Ç Áö¿ì±â" + +#: ../../WPrefs.app/Menu.c:1097 +msgid "Refresh Screen" +msgstr "´Ù½Ã ±×¸®±â" + +#: ../../WPrefs.app/Menu.c:1098 +msgid "Info Panel" +msgstr "Á¤º¸ ÆгÎ" + +#: ../../WPrefs.app/Menu.c:1099 +msgid "Legal Panel" +msgstr "¹ýÀû Á¤º¸ ÆгÎ" + +#: ../../WPrefs.app/Menu.c:1107 +msgid "Open workspace menu" +msgstr "ÀÛ¾÷°ø°£ ¸Þ´º ¿­±â" + +#: ../../WPrefs.app/Menu.c:1114 +msgid "No confirmation panel" +msgstr "È®ÀÎ ÆгΠ¾øÀ½" + +#: ../../WPrefs.app/Menu.c:1120 +msgid "Menu Path/Directory List" +msgstr "¸Þ´º °æ·Î/µð·ºÅ丮 ¸ñ·Ï" + +#: ../../WPrefs.app/Menu.c:1165 +msgid "Ask help to the Guru" +msgstr "Guru¿¡°Ô µµ¿ò ¿äû" + +#: ../../WPrefs.app/Menu.c:1285 +msgid "" +"The format of the current menu in ~/G/D/WMRootMenu is not supported by " +"WPrefs. A new menu will be created.\n" +"You can also replace ~/G/D/WMRootMenu with ~/G/L/W/plmenu to get the default " +"menu." +msgstr "" +"~/G/D/WMRootMenuÀÇ ÇöÀç Æ÷¸ËÀº WPrefs°¡ Áö¿øÇÏ´Â Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.»õ ¸Þ´º¸¦ " +"¸¸µì´Ï´Ù.\n" +"±âº» ¸Þ´º¸¦ ¾òÀ¸·Á¸é ~/G/D/WMRootMenu¸¦ ~/G/L/W/plmenu·Î ¹Ù²Ù¸é µË´Ï´Ù." + +#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1295 +#: ../../WPrefs.app/WPrefs.c:585 +msgid "Warning" +msgstr "°æ°í" + +#: ../../WPrefs.app/Menu.c:1290 ../../WPrefs.app/Menu.c:1296 +#: ../../WPrefs.app/MenuGuru.c:119 ../../WPrefs.app/MenuGuru.c:126 +#: ../../WPrefs.app/MenuGuru.c:140 ../../WPrefs.app/MouseSettings.c:156 +#: ../../WPrefs.app/Text.c:181 ../../WPrefs.app/WPrefs.c:546 +#: ../../WPrefs.app/WPrefs.c:551 ../../WPrefs.app/WPrefs.c:562 +#: ../../WPrefs.app/WPrefs.c:572 ../../WPrefs.app/WPrefs.c:578 +#: ../../WPrefs.app/WPrefs.c:585 ../../WPrefs.app/WPrefs.c:602 +#: ../../WPrefs.app/WPrefs.c:607 +msgid "OK" +msgstr "È®ÀÎ" + +#: ../../WPrefs.app/Menu.c:1295 +msgid "Any changes made in this section will not be saved" +msgstr "ÀÌ ¼½¼Ç¿¡¼­ ¼öÁ¤ÇÑ ³»¿ëÀº ÀúÀåµÇÁö ¾Ê½À´Ï´Ù" + +#: ../../WPrefs.app/Menu.c:1360 +msgid "Applications Menu Definition" +msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ¸Þ´º Á¤ÀÇ" + +#: ../../WPrefs.app/MenuGuru.c:106 +msgid "Menu Guru - Select Type" +msgstr "¸Þ´º Guru - ÇüŸ¦ ¼±ÅÃÇϼ¼¿ä" + +#: ../../WPrefs.app/MenuGuru.c:111 ../../WPrefs.app/MenuGuru.c:133 +#: ../../WPrefs.app/MenuGuru.c:251 +msgid "Next" +msgstr "´ÙÀ½" + +#: ../../WPrefs.app/MenuGuru.c:114 +msgid "Menu Guru - Select Menu File" +msgstr "¸Þ´º Guru - ¸Þ´º ÆÄÀÏÀ» ¼±ÅÃÇϼ¼¿ä" + +#: ../../WPrefs.app/MenuGuru.c:122 +msgid "Menu Guru - Select Pipe Command" +msgstr "¸Þ´º Guru - ÆÄÀÌÇÁ ¸í·ÉÀ» ¼±ÅÃÇϼ¼¿ä" + +#: ../../WPrefs.app/MenuGuru.c:129 +msgid "Menu Guru - Select Directories" +msgstr "¸Þ´º Guru - µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä" + +#: ../../WPrefs.app/MenuGuru.c:136 +msgid "Menu Guru - Select Command" +msgstr "¸Þ´º Guru - ¸í·ÉÀ» ¼±ÅÃÇϼ¼¿ä" + +#: ../../WPrefs.app/MenuGuru.c:257 +msgid "Back" +msgstr "¾ÕÀ¸·Î" + +#: ../../WPrefs.app/MenuGuru.c:271 +msgid "" +"This process will help you create a submenu which definition is located in " +"another file or is created dynamically.\n" +"What do you want to use as the contents of the submenu?" +msgstr "" +"ÀÌ °úÁ¤Àº ´Ù¸¥ ÆÄÀÏ¿¡ Á¤ÀÇ°¡ Àְųª ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÇ´Â ºÎ¸Þ´º¸¦ ¸¸µå´Â µ¥ " +"µµ¿òÀ» ÁÝ´Ï´Ù.\n" +"ºÎ¸Þ´ºÀÇ ³»¿ëÀ¸·Î ¾î¶² °ÍÀ» »ç¿ëÇÏ°í ½Í½À´Ï±î?" + +#: ../../WPrefs.app/MenuGuru.c:279 +msgid "" +"A file containing the menu definition in the plain text (non-property list) " +"menu format." +msgstr "¸Þ´º Á¤ÀǸ¦ º¸Åë ÅؽºÆ®·Î(Ư¼º ¾ø´Â ¸ñ·Ï) ¾´ ÆÄÀÏ." + +#: ../../WPrefs.app/MenuGuru.c:285 +msgid "The menu definition generated by a script/program read through a pipe." +msgstr "½ºÅ©¸³Æ®/ÇÁ·Î±×·¥À¸·Î »ý¼ºÇÏ¿© ÆÄÀÌÇÁ·Î ÀоîµéÀÌ´Â ¸Þ´º Á¤ÀÇ." + +#: ../../WPrefs.app/MenuGuru.c:291 +msgid "The files in one or more directories." +msgstr "Çϳª ÀÌ»óÀÇ µð·ºÅ丮ÀÇ ÆÄÀÏ." + +#: ../../WPrefs.app/MenuGuru.c:303 +msgid "Type the path for the menu file:" +msgstr "¸Þ´º ÆÄÀÏÀÇ °æ·Î¸¦ ÀûÀ¸¼¼¿ä:" + +#: ../../WPrefs.app/MenuGuru.c:318 +msgid "" +"The menu file must contain a menu in the plain text menu file format. This " +"format is described in the menu files included with WindowMaker, probably at " +"~/GNUstep/Library/WindowMaker/menu" +msgstr "" +"¸Þ´º ÆÄÀÏÀÇ ³»¿ëÀº º¸Åë ÅؽºÆ®·Î µÈ ¸Þ´º ÆÄÀÏ Çü½ÄÀÇ ¸Þ´ºÀÔ´Ï´Ù. ÀÌ Çü½ÄÀº " +"WindowMaker¿¡ Æ÷ÇÔµÈ ¸Þ´º ÆÄÀÏÀ» º¸¸é µÇ¸ç, º¸Åë " +"~/GNUstep/Library/WindowMaker/menu.koÀÔ´Ï´Ù." + +#: ../../WPrefs.app/MenuGuru.c:328 +msgid "Type the command that will generate the menu definition:" +msgstr "¸Þ´º Á¤ÀǸ¦ ¸¸µé¾î³¾ ¸í·ÉÀ» ÀÔ·ÂÇϼ¼¿ä:" + +#: ../../WPrefs.app/MenuGuru.c:338 +msgid "" +"The command supplied must generate and output a valid menu definition to " +"stdout. This definition should be in the plain text menu file format, " +"described in the menu files included with WindowMaker, usually at " +"~/GNUstep/Library/WindowMaker/menu" +msgstr "" +"ÀÌ ¸í·ÉÀº À¯È¿ÇÑ ¸Þ´º Á¤ÀǸ¦ ¸¸µé¾î¼­ Ç¥ÁØ Ãâ·ÂÀ¸·Î ³»º¸³»¾ß ÇÕ´Ï´Ù. ÀÌ " +"Á¤ÀÇ´Â º¸Åë ÅؽºÆ®·Î µÈ ¸Þ´º ÆÄÀÏ Çü½ÄÀ̾î¾ß Çϸç, WindowMaker¿¡ Æ÷ÇÔµÈ ¸Þ´º " +"ÆÄÀÏ¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù. º¸Åë ~/GNUstep/Library/WindowMaker/menu.ko ÀÔ´Ï´Ù" + +#: ../../WPrefs.app/MenuGuru.c:350 ../../WPrefs.app/MenuGuru.c:372 +#: ../../WPrefs.app/MenuGuru.c:394 +msgid "" +"Type the path for the directory. You can type more than one path by " +"separating them with spaces." +msgstr "" +"µð·ºÅ丮ÀÇ °æ·Î¸¦ ÀÔ·ÂÇϼ¼¿ä. ºóÄ­À¸·Î ºÐ¸®Çؼ­ Çϳª ÀÌ»óÀÇ °æ·Î¸¦ ¾µ ¼ö " +"ÀÖ½À´Ï´Ù." + +#: ../../WPrefs.app/MenuGuru.c:361 ../../WPrefs.app/MenuGuru.c:383 +#: ../../WPrefs.app/MenuGuru.c:405 +msgid "" +"The menu generated will have an item for each file in the directory. The " +"directories can contain program executables or data files (such as jpeg " +"images)." +msgstr "" +"»ý¼ºµÇ´Â ¸Þ´º´Â µð·ºÅ丮ÀÇ °¢ ÆÄÀÏ¿¡ ´ëÇØ Ç׸ñÀ» °®½À´Ï´Ù. µð·ºÅ丮¿¡´Â " +"ÇÁ·Î±×·¥ ½ÇÇà ÆÄÀÏÀ̳ª µ¥ÀÌÅÍ ÆÄÀÏÀ» ³ÖÀ¸¸é µË´Ï´Ù.(jpeg À̹ÌÁö °°Àº °Íµé)" + +#: ../../WPrefs.app/MenuGuru.c:415 +msgid "" +"If the directory contain data files, type the command used to open these " +"files. Otherwise, leave it in blank." +msgstr "" +"µð·ºÅ丮¿¡ µ¥ÀÌÅÍ ÆÄÀÏÀÌ ÀÖ´Â °æ¿ì, ÀÌ ÆÄÀÏÀ» ¿­±â À§ÇØ »ç¿ëÇÒ ¸í·ÉÀ» " +"ÀÔ·ÂÇϼ¼¿ä. ±×·¸Áö ¾ÊÀ¸¸é ºóÄ­À¸·Î µÎ¼¼¿ä." + +#: ../../WPrefs.app/MenuGuru.c:426 +msgid "" +"Each file in the directory will have an item and they will be opened with " +"the supplied command.For example, if the directory contains image files and " +"the command is \"xv -root\", each file in the directory will have a menu " +"item like \"xv -root imagefile\"." +msgstr "" +"µð·ºÅ丮ÀÇ °¢ ÆÄÀÏ¿¡´Â Ç׸ñÀÌ ÀÖÀ¸¸ç Á¦°øµÈ ¸í·ÉÀ¸·Î ¿­ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ " +"µé¸é, ÀÌ µð·ºÅ丮¿¡ À̹ÌÁö ÆÄÀÏÀÌ ÀÖ°í ¸í·ÉÀÌ \"xv -root\"À̸é, µð·ºÅ丮ÀÇ " +"°¢ ÆÄÀÏÀº \"xv -root À̹ÌÁöÆÄÀÏ\"°ú °°Àº ¸Þ´º Ç׸ñÀ» °®½À´Ï´Ù." + +#: ../../WPrefs.app/MenuPreferences.c:112 +msgid "Menu Scrolling Speed" +msgstr "¸Þ´º ½ºÅ©·Ñ ¼Óµµ" + +#: ../../WPrefs.app/MenuPreferences.c:161 +msgid "Submenu Alignment" +msgstr "ºÎ¸Þ´º Á¤·Ä" + +#: ../../WPrefs.app/MenuPreferences.c:204 +msgid "" +"Always open submenus inside the screen, instead of scrolling.\n" +"Note: this can be an annoyance at some circumstances." +msgstr "" +"½ºÅ©·ÑÇÏ´Â ´ë½Å Ç×»ó È­¸é ³»¿¡ ºÎ¸Þ´º¸¦ ¿±´Ï´Ù.\n" +"ÁÖÀÇ: ¾î¶² ȯ°æ¿¡¼­´Â ±ÍÂúÀ»Áöµµ ¸ð¸¨´Ï´Ù." + +#: ../../WPrefs.app/MenuPreferences.c:209 +msgid "Scroll off-screen menus when pointer is moved over them." +msgstr "È­¸é ¹ÛÀ¸·Î ³ª°£ ¸Þ´º ÂÊÀ¸·Î ¸¶¿ì½º¸¦ ¿òÁ÷ÀÌ¸é ½ºÅ©·ÑÇÕ´Ï´Ù." + +#: ../../WPrefs.app/MenuPreferences.c:229 +msgid "Menu Preferences" +msgstr "¸Þ´º ¼³Á¤" + +#: ../../WPrefs.app/MouseSettings.c:154 ../../WPrefs.app/Text.c:181 +#: ../../WPrefs.app/WPrefs.c:546 ../../WPrefs.app/WPrefs.c:551 +#: ../../WPrefs.app/WPrefs.c:560 ../../WPrefs.app/WPrefs.c:570 +#: ../../WPrefs.app/WPrefs.c:578 ../../WPrefs.app/WPrefs.c:602 +#: ../../WPrefs.app/WPrefs.c:607 +msgid "Error" +msgstr "¿¡·¯" + +#: ../../WPrefs.app/MouseSettings.c:155 +msgid "" +"Invalid mouse acceleration threshold value. Must be the number of pixels to " +"travel before accelerating." +msgstr "" +"À߸øµÈ ¸¶¿ì½º °¡¼Ó ÀÓ°èÄ¡ °ªÀÔ´Ï´Ù. °¡¼Ó Àü¿¡ ¿òÁ÷ÀÏ Çȼ¿ÀÇ ¼ö°¡ µÇ¾î¾ß " +"ÇÕ´Ï´Ù." + +#: ../../WPrefs.app/MouseSettings.c:209 +#, c-format +msgid "mouse button %s not supported by WPrefs." +msgstr "¸¶¿ì½º ¹öÆ° %s ´Â WPrefs¿¡¼­ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù." + +#: ../../WPrefs.app/MouseSettings.c:243 ../../WPrefs.app/MouseSettings.c:254 +#: ../../WPrefs.app/MouseSettings.c:265 +#, c-format +msgid "bad value %s for option %s" +msgstr "%s ¿É¼Ç¿¡ À߸øµÈ °ª %s" + +#: ../../WPrefs.app/MouseSettings.c:325 +#, c-format +msgid "" +"modifier key %s for option ModifierKey was not recognized. Using %s as " +"default" +msgstr "" +"ModifierKey ÀÇ ¼öÁ¤ÀÚ Å° °ª %s ¸¦ ÀνÄÇÒ ¼ö ¾ø½À´Ï´Ù. ±âº»°ªÀÎ %s ¸¦ " +"»ç¿ëÇÕ´Ï´Ù." + +#: ../../WPrefs.app/MouseSettings.c:350 +msgid "could not retrieve keyboard modifier mapping" +msgstr "Å°º¸µå ¼öÁ¤ÀÚ ¸ÅÇÎÀ» ¾òÀ» ¼ö ¾ø½À´Ï´Ù" + +#: ../../WPrefs.app/MouseSettings.c:497 +msgid "Mouse Speed" +msgstr "¸¶¿ì½º ¼Óµµ" + +#: ../../WPrefs.app/MouseSettings.c:564 +msgid "Threshold:" +msgstr "ÀÓ°èÄ¡:" + +#: ../../WPrefs.app/MouseSettings.c:579 +msgid "Double-Click Delay" +msgstr "´õºí Ŭ¸¯ Áö¿¬" + +#: ../../WPrefs.app/MouseSettings.c:623 +msgid "Test" +msgstr "½ÃÇè" + +#: ../../WPrefs.app/MouseSettings.c:633 +msgid "Workspace Mouse Actions" +msgstr "ÀÛ¾÷°ø°£ ¸¶¿ì½º µ¿ÀÛ" + +#: ../../WPrefs.app/MouseSettings.c:638 +msgid "Disable mouse actions" +msgstr "¸¶¿ì½º µ¿ÀÛ »ç¿ë ¾ÊÀ½" + +#: ../../WPrefs.app/MouseSettings.c:691 +msgid "Applications menu" +msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ¸Þ´º" + +#: ../../WPrefs.app/MouseSettings.c:697 +msgid "Window list menu" +msgstr "â ¸ñ·Ï ¸Þ´º" + +#: ../../WPrefs.app/MouseSettings.c:703 +msgid "Select windows" +msgstr "â ¼±ÅÃ" + +#: ../../WPrefs.app/MouseSettings.c:738 +msgid "Mouse Grab Modifier" +msgstr "¸¶¿ì½º Àâ±â ¼öÁ¤ÀÚ(Modifier)" + +#: ../../WPrefs.app/MouseSettings.c:772 +#, c-format +msgid "could not create %s" +msgstr "%s ¸¦ ¸¸µé ¼ö ¾øÀ½" + +#: ../../WPrefs.app/MouseSettings.c:788 +#, c-format +msgid "could not create temporary file %s" +msgstr "Àӽà ÆÄÀÏ %s¸¦ ¸¸µé ¼ö ¾øÀ½" + +#: ../../WPrefs.app/MouseSettings.c:813 +#, c-format +msgid "could not rename file %s to %s\n" +msgstr "%s ÆÄÀϸíÀ» %s ·Î ¹Ù²Ü ¼ö ¾øÀ½\n" + +#: ../../WPrefs.app/MouseSettings.c:896 +msgid "Mouse Preferences" +msgstr "¸¶¿ì½º ¼³Á¤" + +#: ../../WPrefs.app/Paths.c:82 +msgid "bad value in option IconPath. Using default path list" +msgstr "IconPath ¿¡ À߸øµÈ °ª. ±âº» °æ·Î ¸ñ·Ï »ç¿ë" + +#: ../../WPrefs.app/Paths.c:99 +msgid "bad value in option PixmapPath. Using default path list" +msgstr "PixmapPath ¿¡ À߸øµÈ °ª. ±âº» °æ·Î ¸ñ·Ï »ç¿ë" + +#: ../../WPrefs.app/Paths.c:301 +msgid "Icon Search Paths" +msgstr "¾ÆÀÌÄÜ °Ë»ö °æ·Î" + +#: ../../WPrefs.app/Paths.c:313 ../../WPrefs.app/Paths.c:349 +msgid "Add" +msgstr "Ãß°¡" + +#: ../../WPrefs.app/Paths.c:320 ../../WPrefs.app/Paths.c:356 +msgid "Remove" +msgstr "»èÁ¦" + +#: ../../WPrefs.app/Paths.c:337 +msgid "Pixmap Search Paths" +msgstr "Pixmap °Ë»ö °æ·Î" + +#: ../../WPrefs.app/Paths.c:385 +msgid "Search Path Configuration" +msgstr "°Ë»ö °æ·Î ¼³Á¤" + +#: ../../WPrefs.app/Preferences.c:151 +msgid "Size Display" +msgstr "Å©±â Á¶Á¤ Ç¥½Ã ¹æ¹ý" + +#: ../../WPrefs.app/Preferences.c:156 ../../WPrefs.app/Preferences.c:172 +msgid "Corner of screen" +msgstr "È­¸é ±¸¼®" + +#: ../../WPrefs.app/Preferences.c:157 ../../WPrefs.app/Preferences.c:173 +msgid "Center of screen" +msgstr "È­¸é °¡¿îµ¥" + +#: ../../WPrefs.app/Preferences.c:158 ../../WPrefs.app/Preferences.c:174 +msgid "Center of resized window" +msgstr "ÇöÀç â °¡¿îµ¥" + +#: ../../WPrefs.app/Preferences.c:159 +msgid "Technical drawing-like" +msgstr "Á¦µµ Å©±â Ç¥½Ã ¹æ¹ýó·³" + +#: ../../WPrefs.app/Preferences.c:167 +msgid "Position Display" +msgstr "â À§Ä¡ Ç¥½Ã ¹æ¹ý" + +#: ../../WPrefs.app/Preferences.c:182 +msgid "Show balloon text for..." +msgstr "dz¼± µµ¿ò¸»Àº..." + +#: ../../WPrefs.app/Preferences.c:189 +msgid "incomplete window titles" +msgstr "ºÒ¿ÏÀüÇÑ Ã¢ ŸÀÌƲ¿¡ Ç¥½Ã" + +#: ../../WPrefs.app/Preferences.c:190 +msgid "miniwindow titles" +msgstr "¾ÆÀÌÄÜ Å¸ÀÌƲ¿¡ Ç¥½Ã" + +#: ../../WPrefs.app/Preferences.c:191 +msgid "application/dock icons" +msgstr "¾ÖÇø®ÄÉÀ̼Ç/dock ¾ÆÀÌÄÜ¿¡ Ç¥½Ã" + +#: ../../WPrefs.app/Preferences.c:204 +msgid "Raise window when switching focus with keyboard (CirculateRaise)." +msgstr "Å°º¸µå·Î Æ÷Ä¿½º Àüȯ½Ã ⠿ø²(CirculateRaise)." + +#: ../../WPrefs.app/Preferences.c:210 +msgid "Keep keyboard language status for each window." +msgstr "" + +#: ../../WPrefs.app/Preferences.c:231 +msgid "Miscellaneous Ergonomic Preferences" +msgstr "±âŸ Àΰ£ ȯ°æ °øÇÐÀû ¼³Á¤" + +#: ../../WPrefs.app/Text.c:179 +#, c-format +msgid "Invalid font %s." +msgstr "À߸øµÈ ±Û²Ã %s" + +#: ../../WPrefs.app/Text.c:256 +msgid "Set Font..." +msgstr "±Û²Ã ÁöÁ¤" + +#: ../../WPrefs.app/Text.c:262 +msgid "Window Title Font" +msgstr "â Á¦¸ñ ±Û²Ã" + +#: ../../WPrefs.app/Text.c:263 +msgid "Menu Title Font" +msgstr "¸Þ´º Á¦¸ñ ±Û²Ã" + +#: ../../WPrefs.app/Text.c:264 +msgid "Menu Item Font" +msgstr "¸Þ´º Ç׸ñ ±Û²Ã" + +#: ../../WPrefs.app/Text.c:265 +msgid "Icon Title Font" +msgstr "¾ÆÀÌÄÜ Á¦¸ñ ±Û²Ã" + +#: ../../WPrefs.app/Text.c:266 +msgid "Clip Title Font" +msgstr "Ŭ¸³ Á¦¸ñ ±Û²Ã" + +#: ../../WPrefs.app/Text.c:267 +msgid "Geometry Display Font" +msgstr "À§Ä¡/Å©±â Ç¥½Ã ±Û²Ã" + +#: ../../WPrefs.app/Text.c:280 +msgid "" +"Sample Text\n" +"abcdefghijklmnopqrstuvxywz\n" +"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" +"0123456789" +msgstr "" +"Sample Text\n" +"abcdefghijklmnopqrstuvxywz\n" +"ABCDEFGHIJKLMNOPQRSTUVXYWZ\n" +"°¡³ª´Ù¶ó¸¶¹Ù»ç\n" +"0123456789" + +#: ../../WPrefs.app/Text.c:285 +msgid "Alignment" +msgstr "Á¤·Ä" + +#: ../../WPrefs.app/Text.c:290 +msgid "Left" +msgstr "¿ÞÂÊ" + +#: ../../WPrefs.app/Text.c:296 +msgid "Center" +msgstr "Áß¾Ó" + +#: ../../WPrefs.app/Text.c:303 +msgid "Right" +msgstr "¿À¸¥ÂÊ" + +#: ../../WPrefs.app/Text.c:325 +msgid "Text Preferences" +msgstr "ÅؽºÆ® ¼³Á¤" + +#: ../../WPrefs.app/TextureAndColor.c:384 +msgid "Window Title Bar" +msgstr "â Á¦¸ñ ¹Ù" + +#: ../../WPrefs.app/TextureAndColor.c:385 +msgid "Menu Title Bar" +msgstr "¸Þ´º Á¦¸ñ ¹Ù" + +#: ../../WPrefs.app/TextureAndColor.c:386 +msgid "Menu Items" +msgstr "¸Þ´º Ç׸ñ" + +#: ../../WPrefs.app/TextureAndColor.c:387 +msgid "Workspace/Clip" +msgstr "ÀÛ¾÷°ø°£/Ŭ¸³" + +#: ../../WPrefs.app/TextureAndColor.c:388 +msgid "Icons" +msgstr "¾ÆÀÌÄÜ" + +#: ../../WPrefs.app/TextureAndColor.c:399 +msgid "Focused Window" +msgstr "È°¼º â" + +#: ../../WPrefs.app/TextureAndColor.c:412 +#: ../../WPrefs.app/TextureAndColor.c:443 +#: ../../WPrefs.app/TextureAndColor.c:474 +msgid "Texture" +msgstr "ÅؽºÃ³" + +#: ../../WPrefs.app/TextureAndColor.c:418 +#: ../../WPrefs.app/TextureAndColor.c:449 +#: ../../WPrefs.app/TextureAndColor.c:480 +msgid "Text Color" +msgstr "ÅؽºÆ® »ö" + +#: ../../WPrefs.app/TextureAndColor.c:423 +#: ../../WPrefs.app/TextureAndColor.c:454 +#: ../../WPrefs.app/TextureAndColor.c:485 +#: ../../WPrefs.app/TextureAndColor.c:509 +#: ../../WPrefs.app/TextureAndColor.c:575 +#: ../../WPrefs.app/TextureAndColor.c:652 +msgid "Set..." +msgstr "ÁöÁ¤..." + +#: ../../WPrefs.app/TextureAndColor.c:430 +msgid "Unfocused Window" +msgstr "ºñÈ°¼º â" + +#: ../../WPrefs.app/TextureAndColor.c:461 +msgid "Owner of Focused Window" +msgstr "È°¼º âÀÇ ¼ÒÀ¯ÀÚ" + +#: ../../WPrefs.app/TextureAndColor.c:494 +msgid "Unselected Items" +msgstr "¼±ÅõÇÁö ¾ÊÀº Ç׸ñ" + +#: ../../WPrefs.app/TextureAndColor.c:504 +#: ../../WPrefs.app/TextureAndColor.c:558 +msgid "Background" +msgstr "¹è°æ" + +#: ../../WPrefs.app/TextureAndColor.c:519 +msgid "Normal Text" +msgstr "º¸Åë ÅؽºÆ®" + +#: ../../WPrefs.app/TextureAndColor.c:529 +msgid "Disabled Text" +msgstr "»ç¿ë ºÒ°¡´ÉÇÑ ÅؽºÆ®" + +#: ../../WPrefs.app/TextureAndColor.c:538 +msgid "Selected Items" +msgstr "¼±ÅÃµÈ Ç׸ñ" + +#: ../../WPrefs.app/TextureAndColor.c:548 +msgid "Text" +msgstr "ÅؽºÆ®" + +#: ../../WPrefs.app/TextureAndColor.c:566 +msgid "Menu Title Background" +msgstr "¸Þ´º Á¦¸ñ ¹è°æ" + +#: ../../WPrefs.app/TextureAndColor.c:584 +msgid "Menu Title Text" +msgstr "¸Þ´º Á¦¸ñ ÅؽºÆ®" + +#: ../../WPrefs.app/TextureAndColor.c:596 +msgid "Workspace Background" +msgstr "ÀÛ¾÷°ø°£ ¹è°æ" + +#: ../../WPrefs.app/TextureAndColor.c:605 +msgid "Change" +msgstr "º¯°æ" + +#: ../../WPrefs.app/TextureAndColor.c:611 +msgid "Clip Title Text" +msgstr "Ŭ¸³ Á¦¸ñ ÅؽºÆ®" + +#: ../../WPrefs.app/TextureAndColor.c:621 +msgid "Normal" +msgstr "º¸Åë" + +#: ../../WPrefs.app/TextureAndColor.c:631 +msgid "Collapsed" +msgstr "Á¢Èû" + +#: ../../WPrefs.app/TextureAndColor.c:643 +msgid "Icon Background" +msgstr "¾ÆÀÌÄÜ ¹è°æ" + +#: ../../WPrefs.app/TextureAndColor.c:677 +msgid "Texture and Color Preferences" +msgstr "ÅؽºÃ³¿Í »ö»ó ¼³Á¤" + +#: ../../WPrefs.app/WPrefs.c:196 +msgid "Window Maker Preferences" +msgstr "WindowMaker ¼³Á¤" + +#: ../../WPrefs.app/WPrefs.c:220 +msgid "Revert Page" +msgstr "ÆäÀÌÁö ¹ÝÀü" + +#: ../../WPrefs.app/WPrefs.c:226 +msgid "Revert All" +msgstr "¸ðµÎ ¹ÝÀü" + +#: ../../WPrefs.app/WPrefs.c:232 +msgid "Save" +msgstr "ÀúÀå" + +#: ../../WPrefs.app/WPrefs.c:238 +msgid "Close" +msgstr "´Ý±â" + +#: ../../WPrefs.app/WPrefs.c:262 +#, c-format +msgid "Version %s for Window Maker %s" +msgstr "¹öÀü %s - WindowMaker %s" + +#: ../../WPrefs.app/WPrefs.c:269 +msgid "Starting..." +msgstr "½ÃÀÛÇÕ´Ï´Ù..." + +#: ../../WPrefs.app/WPrefs.c:275 +msgid "" +"Programming/Design: Alfredo K. Kojima\n" +"Artwork: Marco van Hylckama Vlieg\n" +"More Programming: James Thompson" +msgstr "" +"ÇÁ·Î±×·¡¹Ö/µðÀÚÀÎ: Alfredo K. Kojima\n" +"¾ÆÆ®¿÷: Macro van Hylckama Vlieg\n" +"Ãß°¡ ÇÁ·Î±×·¡¹Ö: James Thompson" + +#: ../../WPrefs.app/WPrefs.c:363 +#, c-format +msgid "could not locate image file %s\n" +msgstr "À̹ÌÁö ÆÄÀÏ %sÀ» ãÀ» ¼ö ¾øÀ½\n" + +#: ../../WPrefs.app/WPrefs.c:488 +msgid "Loading Window Maker configuration files..." +msgstr "WindowMaker ¼³Á¤ ÆÄÀÏÀ» Àд Áß..." + +#: ../../WPrefs.app/WPrefs.c:492 +msgid "Initializing configuration panels..." +msgstr "¼³Á¤ ÆгΠÃʱâÈ­ Áß..." + +#: ../../WPrefs.app/WPrefs.c:545 ../../WPrefs.app/WPrefs.c:601 +#, c-format +msgid "Window Maker domain (%s) is corrupted!" +msgstr "Window Maker µµ¸ÞÀÎ(%s)°¡ ±úÁ³½À´Ï´Ù!" + +#: ../../WPrefs.app/WPrefs.c:549 +#, c-format +msgid "Could not load Window Maker domain (%s) from defaults database." +msgstr "±âº» µ¥ÀÌÅͺ£À̽º¿¡¼­ Window Maker µµ¸ÞÀÎ(%s)¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù." + +#: ../../WPrefs.app/WPrefs.c:557 +msgid "could not extract version information from Window Maker" +msgstr "Window Maker¿¡¼­ ¹öÀü Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù" + +#: ../../WPrefs.app/WPrefs.c:558 +msgid "Make sure Window Maker is in your search path." +msgstr "Window Maker°¡ °Ë»ö °æ·Î¿¡ ÀÖ´ÂÁö È®ÀÎÇϼ¼¿ä." + +#: ../../WPrefs.app/WPrefs.c:561 +#, fuzzy +msgid "" +"Could not extract version from Window Maker. Make sure it is correctly " +"installed and is in your PATH environment variable." +msgstr "" +"Window Maker¿¡¼­ ¹öÀü Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù. PATH ȯ°æ º¯¼ö¿¡ ÁöÁ¤µÈ °÷¿¡ " +"Á¦´ë·Î ¼³Ä¡µÇ¾ú´ÂÁö È®ÀÎÇϼ¼¿ä." + +#: ../../WPrefs.app/WPrefs.c:571 +msgid "" +"Could not extract version from Window Maker. Make sure it is correctly " +"installed." +msgstr "" +"Window Maker¿¡¼­ ¹öÀü Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù. Á¦´ë·Î ¼³Ä¡µÇ¾ú´ÂÁö " +"È®ÀÎÇϼ¼¿ä." + +#: ../../WPrefs.app/WPrefs.c:576 +#, c-format +msgid "" +"WPrefs only supports Window Maker 0.18.0 or newer.\n" +"The version installed is %i.%i.%i\n" +msgstr "" +"WPrefs ´Â WindowMaker 0.18.0 ÀÌ»ó¸¸À» Áö¿øÇÕ´Ï´Ù.\n" +"¼³Ä¡µÈ ¹öÁ¯Àº %i.%i.%i ÀÔ´Ï´Ù.\n" + +#: ../../WPrefs.app/WPrefs.c:583 +#, c-format +msgid "" +"Window Maker %i.%i.%i, which is installed in your system, is not fully " +"supported by this version of WPrefs." +msgstr "" +"½Ã½ºÅÛ¿¡ ¼³Ä¡µÈ Window Maker %i.%i.%i´Â WPrefs¿¡¼­ Á¦´ë·Î Áö¿øÇÏ´Â ¹öÀüÀÌ " +"¾Æ´Õ´Ï´Ù." + +#: ../../WPrefs.app/WPrefs.c:590 +msgid "could not run \"wmaker -global_defaults_path\"." +msgstr "\"wmaker -global_defaults_path\"¸¦ ¼öÇàÇÒ ¼ö ¾ø½À´Ï´Ù." + +#: ../../WPrefs.app/WPrefs.c:605 +#, c-format +msgid "Could not load global Window Maker domain (%s)." +msgstr "Àü¿ª Window Maker µµ¸ÞÀÎ (%s)¸¦ ÀоîµéÀÏ ¼ö ¾ø½À´Ï´Ù." + +#: ../../WPrefs.app/WPrefs.c:851 +#, c-format +msgid "" +"bad speed value for option %s\n" +". Using default Medium" +msgstr "" +"¿É¼Ç %s¿¡ À߸øµÈ ¼Óµµ °ªÀ» ÁÖ¾ú½À´Ï´Ù.\n" +"±âº»°ª MediumÀ» »ç¿ëÇÕ´Ï´Ù" + +#: ../../WPrefs.app/WindowHandling.c:108 +#, c-format +msgid "bad option value %s in WindowPlacement. Using default value" +msgstr "WindowPlacement¿¡ À߸øµÈ ¿É¼Ç °ª %sÀÔ´Ï´Ù. ±âº»°ªÀ» »ç¿ëÇÕ´Ï´Ù" + +#: ../../WPrefs.app/WindowHandling.c:130 +msgid "invalid data in option WindowPlaceOrigin. Using default (0,0)" +msgstr "" +"WindowPlaceOrigin ¿É¼Ç¿¡ À߸øµÈ µ¥ÀÌÅÍÀÔ´Ï´Ù. ±âº»°ª (0,0)À» »ç¿ëÇÕ´Ï´Ù" + +#: ../../WPrefs.app/WindowHandling.c:192 +msgid "Window Placement" +msgstr "â ¹èÄ¡" + +#: ../../WPrefs.app/WindowHandling.c:197 +msgid "Automatic" +msgstr "ÀÚµ¿" + +#: ../../WPrefs.app/WindowHandling.c:198 +msgid "Random" +msgstr "ÀÓÀÇ" + +#: ../../WPrefs.app/WindowHandling.c:199 +msgid "Manual" +msgstr "¼öµ¿" + +#: ../../WPrefs.app/WindowHandling.c:200 +msgid "Cascade" +msgstr "°è´Ü½Ä" + +#: ../../WPrefs.app/WindowHandling.c:206 +msgid "Placement Origin" +msgstr "±âº» À§Ä¡" + +#: ../../WPrefs.app/WindowHandling.c:260 +msgid "Opaque Move" +msgstr "À̵¿½Ã â ³»¿ë º¸À̱â" + +#: ../../WPrefs.app/WindowHandling.c:296 +msgid "When maximizing..." +msgstr "ÃÖ´ëÈ­½Ã¿¡´Â..." + +#: ../../WPrefs.app/WindowHandling.c:301 +msgid "...do not resize over icons" +msgstr "¾ÆÀÌÄÜÀ» µ¤Áö ¾ÊÀ½" + +#: ../../WPrefs.app/WindowHandling.c:307 +msgid "...do not resize over dock" +msgstr "DockÀ» µ¤Áö ¾ÊÀ½" + +#: ../../WPrefs.app/WindowHandling.c:320 +msgid "Keep transients above their owners" +msgstr "¼ÒÀ¯ÀÚ À§¿¡¼­´Â ÀϽÃÀûÀ¸·Î âÀ» À¯Áö" + +#: ../../WPrefs.app/WindowHandling.c:347 +msgid "Window Handling Preferences" +msgstr "â ó¸® ¼³Á¤" + +#: ../../WPrefs.app/Workspace.c:137 +msgid "Workspace Navigation" +msgstr "ÀÛ¾÷°ø°£ Àüȯ" + +#: ../../WPrefs.app/Workspace.c:161 +msgid "drag windows between workspaces." +msgstr "ÀÛ¾÷°ø°£°£¿¡ â ²ø±â" + +#: ../../WPrefs.app/Workspace.c:186 +msgid "" +"switch to first workspace when switching past the last workspace and " +"vice-versa" +msgstr "" +"¸¶Áö¸· ÀÛ¾÷°ø°£ ´ÙÀ½À¸·Î ÀüȯÇÒ¶§¿¡ óÀ½ ÀÛ¾÷°ø°£À¸·Î À̵¿ (¹Ý´ëµµ ¸¶Âù°¡Áö)" + +#: ../../WPrefs.app/Workspace.c:210 +msgid "create a new workspace when switching past the last workspace." +msgstr "¸¶Áö¸· ÀÛ¾÷°ø°£ ´ÙÀ½À¸·Î Àüȯ½Ã »õ·Î¿î ÀÛ¾÷°ø°£ »ý¼º" + +#: ../../WPrefs.app/Workspace.c:218 +msgid "Dock/Clip" +msgstr "Dock/Ŭ¸³" + +#: ../../WPrefs.app/Workspace.c:287 +msgid "Workspace Preferences" +msgstr "ÀÛ¾÷°ø°£ ¼³Á¤" + +#: ../../WPrefs.app/main.c:56 +#, c-format +msgid "usage: %s [options]\n" +msgstr "»ç¿ë¹ý: %s [¿É¼Ç]\n" + +#: ../../WPrefs.app/main.c:57 +msgid "options:" +msgstr "¿É¼Ç:" + +#: ../../WPrefs.app/main.c:58 +msgid " -display \tdisplay to be used" +msgstr "-display \t»ç¿ëÇÒ µð½ºÇ÷¹ÀÌ" + +#: ../../WPrefs.app/main.c:59 +msgid " -version\t\tprint version number and exit" +msgstr "-version\t\t¹öÁ¯ Ãâ·ÂÈÄ Á¾·á" + +#: ../../WPrefs.app/main.c:82 +#, c-format +msgid "too few arguments for %s" +msgstr "%s ÀÇ Àμö°¡ ³Ê¹« ÀûÀ½" + +#: ../../WPrefs.app/main.c:104 +msgid "X server does not support locale" +msgstr "X ¼­¹ö°¡ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾ÊÀ½" + +#: ../../WPrefs.app/main.c:107 +msgid "cannot set locale modifiers" +msgstr "·ÎÄÉÀÏ ¼öÁ¤ÀÚ(modifier)¸¦ ¼³Á¤ÇÒ ¼ö ¾øÀ½" + +#: ../../WPrefs.app/main.c:113 +#, c-format +msgid "could not open display %s" +msgstr "µð½ºÇ÷¹ÀÌ %s¸¦ ¿­ ¼ö ¾øÀ½" + +#: ../../WPrefs.app/main.c:121 +msgid "could not initialize application" +msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ÃʱâÈ­¸¦ ÇÒ ¼ö ¾øÀ½" + +#: ../../WPrefs.app/Icons.c:178 +msgid "Icon Positioning" +msgstr "¾ÆÀÌÄÜ À§Ä¡" + +#: ../../WPrefs.app/Icons.c:225 +msgid "Iconification Animation" +msgstr "¾ÆÀÌÄÜÈ­½Ã ¾Ö´Ï¸ÞÀ̼Ç" + +#: ../../WPrefs.app/Icons.c:236 +msgid "Shrinking/Zooming" +msgstr "" + +#: ../../WPrefs.app/Icons.c:237 +msgid "Spinning/Twisting" +msgstr "" + +#: ../../WPrefs.app/Icons.c:238 +msgid "3D-flipping" +msgstr "" + +#: ../../WPrefs.app/Icons.c:239 +msgid "None" +msgstr "¾øÀ½" + +#: ../../WPrefs.app/Icons.c:251 +msgid "Auto-arrange icons" +msgstr "¾ÆÀÌÄÜ ÀÚµ¿ Á¤·Ä" + +#: ../../WPrefs.app/Icons.c:256 +msgid "Omnipresent miniwindows" +msgstr "¾ÆÀÌÄÜ Ç×»ó º¸ÀÓ" + +#: ../../WPrefs.app/Icons.c:264 +msgid "Icon Size" +msgstr "¾ÆÀÌÄÜ Å©±â" + +#: ../../WPrefs.app/Icons.c:334 +msgid "Icon Preferences" +msgstr "¾ÆÀÌÄÜ ¼³Á¤" + \ No newline at end of file diff --git a/WPrefs.app/tiff/Makefile.in b/WPrefs.app/tiff/Makefile.in index 5de90db4..6df36f45 100644 --- a/WPrefs.app/tiff/Makefile.in +++ b/WPrefs.app/tiff/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -250,6 +253,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WPrefs.app/xpm/Makefile.in b/WPrefs.app/xpm/Makefile.in index 2f264379..3d0926b1 100644 --- a/WPrefs.app/xpm/Makefile.in +++ b/WPrefs.app/xpm/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -250,6 +253,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Backgrounds/BlueWaves.jpeg b/WindowMaker/Backgrounds/BlueWaves.jpeg deleted file mode 100755 index facea8503b2d7df937eaa7807ed1b982855df73e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 17988 zcwUsccTiJL^f#Q)doQ84P=rVcy%*^S1SAv{qzedZJ(z{5L-a&frQluNc zh9Y1^kVq#KK5;6(~N(ypv3KlwgY6cEgE=~?sc6M&Cs312lgpZwFNcI6l zTtZ4pic3&lSq`csDk%m1pFx16q@)z&6d+1U5R`|V2m1e8?t1{VBmhSO06vfxfJY0& zrv=^*0N4Qk>i;8v|5xzvfdv1Q{nsf^1Hi)r;^X7v5fA|h@c-vcJbYRJ0UZy$ggUQ@ zomUtGA2gXzqpHj}FYyb|ZUHxkycdzvV>7F(oz<3Nbb z+D>#|ZyxHYDulbnF)2rPdM@koE(Ch~zhb1#pzlrJI1e77ss_?m z01tMB4v-{ZE6o_MW{tg&jF4$3PYlGZgrsKFiJu{50MT|V=yVUk zIwJHpBq}(rxE{ZOL*%QM8%ZU~mAK5;{NPkwDQiC%vPG9ao^fH=`S4b)+St*-&XH^Z zSr3DCl2cbGP#x7>;&A4gOzFFg(F zAg!4IYNWuQQxLpG`~D;|@OD+_=E9|VQZwiUGj|}xNa35gf1loz2QZ?1$fBkWzYOpYp->|*7?n_2mB&FvIJQL-S0xe z!Da`MR*WL{!dHALDEbEU{Nk?CG4Y~MZ3PpFvf-#;jT;pB=Y<#FxEU_QFwae=$>d^=wPMugWZAj}m$bqF|I^FL&4r zEWB-`#CoV8i!5+WQL~B99(7AyB7Zm3k!U731s`#&cgu|vS6L$KP&C-byl)ICc8z_? z!76LVXBvC#eWW(4Kk-P{qMsF?WRt9yYQc0}xL%P!$KPU2{qVV@Qu?l9(P(*iVz^lI5F{RM6Ss4)BGTGcR{0}DpXCD`jh`u^cUyM zxC+UU&I%ZSqV3_lDR|fVO<4eMnY|Y6{)qKO`sSP9qiGi4X9Cx92RgdXi<=le0&Pc8 z8lGAbX)L>I1WqHqfUJo)<@7+wxr%0JEVg3cq{Vr!>$|6<1v}csk2WSh(z*wrUYr(~ zOsCdoT?YhN-U3pl^W6mrhLVKKgVZ_*f+o_yKX{F@bq6{m+rHidj7zl?%1h|Lk>Tl1 z1tP5T?UH4+BxdZ3`OTE1LQmY%iW!N3hC)YhEL$hmOtr}e(SNyJ_1Vt4Bk=1|>& zA>_`g^!a3Y@B$&F30@gZ9%Yh_^v76D3q20DUb0k|;Gay^-|7TUoRt`hA4NDivhO@b zyQFfMS7eB}W+2F1{N?9}GBgC|wD{7U6}Qj^G7HncC9nwrl)pN1Br0nQIK|?Njb>t& z^cg-TFv^&8qoKgu(wA^sb(?Ld2GU!vboS9bU@}l@pJxqLWfoYYJc#|Zk)`LHWvD;R z0|O?PGc3x@L?#jWiz4C%0swj&)CefyY#*=JT%P@pBHdT;dSl}5oQi=YS5sOM_k`^E zN3yXyHxBxC)(ZV}dymnAeu=g1*Vxl+M<*D`2c?VGS0l_YE(_3;FMhLqW4byLuV0<6 zQ|TzWH6>KWRGb9r%oY z3L;+O($aO$=!()c6ztBGAT$8#?h$#AoodwVfv~;HFX2C|y#kfo`!v79@wol9;@nP} z%sdH$a6?8yOA6lH|6R1Ee)ITFv{F5QSrmbM;*YfmBPAN48bF44rF@$%_t5<@R-b87 zRw>TBW_9iCYeS&m6!&@7S}G)r4f(WHM(%RrJuSqLzf!xV5A~yx>&*y=Q%hZFhOUN> zP8+LE^1v2b}QM>v0A)y{>nRaQpJURC)NKYB9_?>j8xU zjTL~c@vcI(^7;kteNq{6w`4x<;p3vG4FT^PG%Mb~Vw{CG@%d>-Mri6>?g7!XWtPd# z8@SzI_`7#q%BSy>HQt0V2>ja3%sZTBe<@GrSDFqRe6*t3!@v&Pnerpy3+I>{B?~hZ zcO`7fn^z3zVUoqSx_bYnuRha^4*1&`L$^(EXB}R_K&t+XWAqYt^HU((KnSf|XW&+C z&MQ2b)v$IHZ|X`8QFve#spMv(0>n>Qjq54-)7Y-Z9q3?E#va~XmS>pFDak`SaD+<5 zd~q_>JzZ*9IKeKfTzZ-sEkQ&lpbc~&@=mNldCTQc`r@|DVKq~IPYoIMb$Y8 zgECqkat!tIb>pJ1%lcfyE406iQUyq&-ET#9Fi?0x>~mmjAK?Sr@{nUfRuT@6tOs{d zmt;iru3!K9t9HIowN*3Sg!_U;x82RwnbFZZvRIQEH1C}D8!t_c1lehKzJz-K)&BhM zj7q6de}K|oXT1`-I_qMyTV&`Xpk3warmfGb7cePh{_n4f95d3MfMgxv`Q_thOyK#` zmR7P*?}x9wF{@yHTH=QkFHH}a!l1xMS<+`y=+Xy#ltoL_BosaA_40iC$bpWw1V>o1 z!pQG zHt(7~F3VM010u@ke8YmOU`U8h6uVtrDOoDMn2Mb5W%wd!_C73CNN2tEkCsJ9xE7h3 zy+V{CA8eln0=fwfoX9_-+uNjh-0qU6AfU{>*F^PJ#|w+U6))b;`|kntQ;1XiZ!kF? zA?YLOW0^2H0qU0mNFaLxCZ88;yX?fCZYW}3xX4#`d2c3>^+G-`wxf^W9txG#Hv z+fgnz0b^2uay@L@wO6%54#4NfMlOsa-MIKl=k8{Jm){Z=Con9Hf#8)9;{wT*zIB(% zOzBk%*P86&*QrdVx;*Rh3dcy1Tw^_oF)0|?*V2ZoU(d&B+!>wJ&wGy5@NSk_)Bx4L zG0%S(WUpc{LRv4RlzdRpL%%$U?GiP5YTd1YiH%m>A!=bd9-oIX(n%6(z1{FE<@#*> zaM5XI6tNVL$Jp+4oFIuCriVB)do5IeWB7vUQjnA|rTJ?$1bqL}^A&Gx3C)uAnA_i+ zrP)CyY|81dv-Q4#??4^bW7|Pgk7K?2A0i?Eh}D)5KLACjujl!rUhT$zG8qm_uh%lY zeVg%9T1{q14~$~Q;<-e)u*tR-`>PS;6vTWDZZ7EZ&mQJ+KpB;rk$g&Ey{4F_C8T=; z*X;`2+|ux!Z_27vqK{7w-wW^nko^IS3kg*)Ab7s&1hh^jRy>7j_)H^)SAk5e9(&re z%C9l2Bn$7|HHaK`YuDahxfF}AbUnY~4)shxJRDqr@h{mJ-q`XBQEwo`p-0)*4262m$87zmlr~)DxZ@sjObX~J&n>H5-u%NHpBV&99VEW-V zRo}x2Ur#;^W}t0Ha`rR9XKMkPq(Z&$MCOCgx<~!26(9VhX1Vlh-t^F!j6XnqS}GiY z=&Z`9O(Yelvv^x&(8+uW9DelKO4d`yjP}YA{VD>DtQ6h0WXsqE{cKq6An9dbkU0)< z@bEXB01;>r+aCiDb7@8NVdxD!%MS&FiE>3e4o&O3r_1K`o~hvYq=;Qdj~%a_RRwzv z9kv7_fHhL|#KCtL64pcP`G=IP5|1Jo2&^S*65{v(I@U~JF(AYzN?KUwT$<{4UVxh= zgxU9a_uO2J>wLC1!#(llnr$RfpA=8vjWA~4Ruug9oQjmF4(Un|zw#mJI&qt_#g>Zr zY%0dX+MbTEuuFRd65*EsDl17YS$-7iuLP$EH|M6V0|(LZvZO9O{4GE6wj(CZs+jA8 z&ExRjw^cz{1@cFDi$4|O55|br*K$f+Ni%=GvM1UFiPhq)|L`#7VqG~nb)3CG_Buo# z;$3aox~V?35Lh_l)G+x<4j3EbEmJ=-KGV;!Ovb|?TH>E3zJKb7WbAKR-A>+hX_2#| z4z~4VN*7nc??hU1T(CKAOYOd?Z3U%&{j0uz&KM?(f}1sCmN0KcZdpv&P4u@jE8wQ< zkCrYGu$~7p7_$VZ8$JmdL=l*yG{_RF!Utu+oL3&2Q4eK)CN5-Yn`x~)@IP4#j*sAp zZp9k2SXTjsi(?Nl`zfZa+k?3`H{G3ykQbKzRnaJp)73yvf}tMT3LDA>(~2_w?5vD9j83DBeI+3p=d=Kl&K)1+yM(=yEG zIxl1ohkPMUNGZMK`QxAAmVe$}38j}+xXv>Xpc%-wzP<(QG(S(A{-r}-@MOBQBY70O z=|>D(nbeH_b+Aoi?f4%6Olw`EkeRVh;koBWFDvuKNx1FIVi8)lPjS@FyT_NnvgWJF zoo@F`kNdpSb*;L=kYJ?@{ur?ZTVNx&2PAf>4c%HYI~qKT;cHVlSIJmOogMr#C#(rh z8@2FZq0~ei;;?}4`%+oTGFd{Kvyhb-#>}U-RSe;Vu?Md}Z$Yl@Xu_2-{R)mXYM+y= zWYC$mt1nFRzkm6W^+XVND3M)K(>>rAFH$YS{sTeS%i){{;XMagfdUW%*xDx@##Ky8 zVuhjXPic}qQg(6E816MgvZq|K(SB4+P<}|L&M8+5%k<~D9>2#GN8EqalgBiHJ3FJD zz5p z)T0m++mfPk_<%YfGxh-+tO-CdDd zwQ9|(blxjXYnQb4$c*S#9Q<9gyGfO&9-kG0*@v}2r5lv;iXwkVqZfkUj^b&{F2k4L zMKVs~U-Uf$n~s*z>XEQ|3AY!u5&jD5&dKCeRv1?))m&P&Hn-DPoTZfSg^6b=aa-V4*ibeN`|PV^jQH0(n;GUp-m>6!%kl4p^W7Gym1-Y5pDRZ;Pf2UzR6XpWC|t+ue2oir(6Z=b^I0= z%4OD5upNdTz-25iZi4^QqqPzYDzSV+OXoI96?F96wto6DK*Du_rl{PT1iL{CpL%Mi z6dGu3jCm54z_hYA=e@Ct*+?%%M?ASWtC2mGb){C~GG)9y1~t1WVUht2%? zA>Xhf!oVSM9EOIi+IYr!oqfjB_%lkmF02ylb2e~dx%hmmX8`%JF(s9W7{9yA_)0Ng zh=59TUzGSPDbVI3v1j{NzPy;>aUkc?YD&P#zaF8YU{nYeIj{CxDJO6LiT=Bg*V}x< z?q!9BZ$`z!l&x^uGx1!mp0K-2Dbt>96+(*l0drnR#_k?Q!=;5}W(6U*d#_)&b(8_y& zdlL>O`hkUwC^8H5dvMXUy?V_FE=LC3$pehzF)W)rN+PM+AppDw$cA`(^&|LdxfWM} z^9S$IYG5`j>I!jSz({Vf(l!#~q45E4TFJR2ytjFC=2I0}Ze*a?)Q`zw7CS9H6W<%{ zxqu-bQjRnliLEvc)x-EHCLUK7*`3(i+PI2TMRRUaTf;o;_R*FTEmg@{EWepoPVH<{ zDqFM-1O4ssd%Oaf1&SaZweemj7whN*J;2?UM$&tLk(p1U2aM?#)4?m=gln@mX7p44 zWvwJ}&GC~LzV#GqJ#_h*8vuh0C4@>WL^r;eTlJsnc`2Se7p#0-wD;i^R_KdiWgihlmm_^tkX`=~wB$Kb-5!Brv>cb>s;ZL` zs*w)aT2HgLcd6ST#L7>^^MGsN++~c@uS1w#Jf+IuEn~)Csa1$iXv5QM2tei5G2_C= z4!KV&ztC7Flq4rvaqzD9a%0|Z-vdIHcAWB1vybT2-X`P1mhr9jaur9_mIdSf$WPEs zeGYd0FCI>9%{B%2?ORtY`C!NE3b(qOYPk_-EKvOC_m-9z-`4=y^AXgLg9rH^B)1=35MSGFT;8D3C(J&sfV=>&S zOtIQP2L3bP-+8gTD|*ps{X5HcX6uo|7mu})-+<33*{XxM?Wwla86G3aO)2xJoU4ER!-hFN(V4gS>uz= zeaaR98CvSLd-wc=%M_fsq)CD5pby&8^1(nRemkz!MS7IRS?A}kf;kc)h`*oL|dDW2)s-HL7b9Ee!V!1m-Z~F>5+s|uFDNl ziB_S0c&q;aM}bjQWb4<6y)t_xw4$!{Ptlb~5q;4Qs;lx2sWHWrYoC4`Y$wM1^k}k zAG4da5+Q{~<-Fox0D|gp(TdLVF+U6y^!rpIRrNrjgo|}!z4h`88kTj2v$P(XUKV-o z?Ino@>Q=FW#|_`4;X$rv#+MeBn=a=|cq}4csq{8CBf5AM{#4aQQh)%KlKFs}p#H~d za9(~YqZtw=lHWel?*|D+ui7&wT%H8WRi6j(aXmhQ_-8qrf1T*}xR4zgCHC$h6%0M~ zh}us5L6cD90mt2T>}Z`Bsre;r934V<%TW z0p}>Wivz9;(0b72D6v~dr&pY_MoE1(Ov_W2!b7sN%y*ZUpGTC}dp%)?v1~4l-#k@F zWAkdK*}O%&wnUxrdrale-zTS|gj>6fto~^M!p--938G8srIUL=)o%Rbm2yEc21}*d zO$_rPT3FcF6q`D6!{5_qAenA^h0-gJHs z2zKK1b1C<0*Qn_yrR)d+yv>~GMH46Y3xm_+I^$HtdJjMP+lh=y>K@v>4^53|`MVi* zjo#DOY%iWQaqK4~ufDw+Hld4hD0lYE|5P#DbK}TmRXR&jNL`+#6;onY%8n<8&m_MY zn9y7xDKOXiC1UWho%!}yeVzN`XT}&3U(e{|bC^5&heX5>*!2h3xFtEN8r-j3TgVQ?Mjju-Cr@AxG;#8 z=kx;mMd*QhBB0{BAI!>3hr+6dr?iY7{nde2=IJ@iJ|Y{z(=Ic>aTsm53s7fn? z*n`;~SgEfK*Bu^s&uDPLV!+IP#N zaXIawQqMFdKaq{eGz_|tAb#EhZl@BUBtJku!;&nQ!aW8ARtPXxJ)?dKpR&zI3BK@2 z&{n!Bb9;&g%+x4 zf>%!1hv!!~$$6}Vu?-uscEz<}UMX!{vdh-uLW7x$Z>gTb}U6x`u7y&*>Jt0@A zHy`~Vst`@OgcreGm}WTRcm8?$cO?Yc{{>xK|G+EOp4A`H$}+X^+D%i6ExbLRDIFHg z@`sX`uIPX*>(z)Q?KEnY_7E5D_}+=^KMcGl@N}38c^{6CZ2A+&^MM*`ce(dUzo&$R z*&k$A0YV)3MrJj5HEmL}%R|j5?*VbQCk`&mM^uliq6_VHUJ)d}l_aR2u!qwQC34KW zs2`rJk{PO;1*y%x<)GNs5|em!INEVrA3ZAtqwBo@^)zjN03V%?35>kdEy90OZqNS0 zp=aQsqUHpn&H7gZ-vEF7!N5Mg-84b1q@wzf$Xj#uov>BmQj%nZo~y>S=mi;mOUrAF za4kb9ilun~f=4~$m032g_ZelviI(Sj_3#6LsBqAhCtV6TVed!QcR1&mM_RQE{%%O% zRl??A{6v3_Xw&DJmvcZ8_rIMTwL*y8^a-lsML%_6^O09%@HZ8r^DKbApJR5_n3{f; z!GsXQ;m!x0QcTMH1NoxlW!r^`_!G#$iG^c2r9@^y`owB(-H+`nQ{I6_@QTJc%NcXk zn!M%KZGr=O!ux9V=(WLZK(-ftb&Q9jlM;IY-05=fd&?N3N6a`ECu51}j|;;%KBw!@ zF~U)6Z6~AGf#*}v%h@mZBGDk!Yye@GXdC<0Nf<|+ugOQFSpx)PPAecA@52q|LAhzW zd;!fqq@spQ4WZ~i5N`F%K720{Mz^n-WO%MBCon4gP|)1ZKfTAws@r&ehA~iQ?9whu z3uG4si~`yIA0W=smf2Rt7F6(aJAQ@rC~Pz$o|@%R1d2K*Np5{)>_a=_G^pph(O(MN zpw6;jnVnrt2>x>Gtpgv zEV`E<#wz4C{120D!g5H>d7y{`t&^o~NX|chPEFk1>`Cl#D58v3#S%ybozaOk*%yD? zI{=Gd-VQfEDR2CKz!(P3IcfQ$&KYu)-3FxSb%|39xpCqsg>y?n8<+)?{>AOzp;P$E zj9bI_a*q$-MuT5A0qR{#>p@2Q2@H8!sAW}RA2)y_?DqsA?6;)A+bW9Ekxx^^C8$n z#ZP!TfFuJ8LE-jd$31X-LMKue5;#dOqFATxj~gYH>rbIk`_f3$*)j!fTLP>Q`)GV< zR{ySFPt!xWlP!2SBsucTwBFAu+XHW*Dd>-6ra|)pzAGd+G5-5{6NyWYkQ;KGcHz4t z1XtN1JB*7z874E}OLE*GT+?HZ$F9kWZW{=Z0Q@;O9U2hYBIuh#!3<=KK`Y^}sns>xgwIc=>>e;RczaCsb-#&Wj8QDR<_WuA3}hBM0F%l4esj{&0=D%hWtp|fsDFYIt--M5S%iaa z;AJhP)os(tj#O28@u=i8&C}qcmls3JGz3lQ+`{1lxSy>firdLmWiJ(V+uiV&LM6Tz z!t}^@ANH!;Ef0;w3qXuk?*Su!VZ*Lc_kbAkU!v+nqtY)}xc8toW%3Tz3h?%N6)LGo zx=E@bD1-T@C%uAgvP&;zt+vuuqzsFa4QMnH1vxcsDq_GCTZV!TZ@snr8=8LWhMzo( zpb;A#r~LJeQKeWzLcP;E&*yzZUPIkV;Xmq`4}o1w3U6qyIzrfd{DL2TA-~y-s4RQO zR=1N5XUb*)2*wd_1n#T~U00$(SW&qxcx3uNMLy+9g8YO5Y@R=_>r5X|v3A%?Z|Dh`9t$!fr|n#WkFrDxP3?_MaK`1^#v`zbkHF2uWw zSSlo|&xZO;I}G_6i%a;@2dAbYoJ(Qqn@1y9s6zALWt3J%VG#!cVcFxoE4hESe*(TjGjsxCi(iZhm9LaLW4pO+wJC?5r<`b~o#O zZqr@RfB9?RkNcXX%*k^Pu4X0gXsK&Yt%m9$JZ_PtkbqI*zmJF>u~kSuk>#DX6;t4` zNseytu+DB_lj-^EY&&mB`#Jm1uMS;;+`g*~FWi&~GUb@h&1d$tX4A`*kVSUKxfk5w zh81x%+N(|H>4Giqa#9Q`JUFY1=0?S52atwFvL@#@n`<265U)Ll3=yTZGj@|A#K(vj z1=mF#(7f+T5IjlyCTrZsF;wC|UP@IB4kfLkWckQ&|mUfq9Ib6>su( z^4Lrg3@#nQRZ6q^Sz`P$jC>?OLLN^q}sjSRd-4ekfOEuK4>%le|#MTBSY z=cX%>Lh)}KcA3OAvm*fbaYWzS_zuH}P(>UPLTo(`S-$)Z{X26Hi1&C~%|VrDMe}az zN9Y4u2loPC2+GJvzKJ!{Ze8^!0aF;CM|oFdo%GpZgc~2GbavO)207ob_cA#Q>hVXU zTY7aBZzYJ&OJuYhCGe7#z(G3}a}UUO*Da-EPSPbiWr%vBTVi>b5;L)4t)^f%pKOJF z#EJVDf(*F_sj1s zzMEO7ETk^%Nk2`17R*;c+Y~?k={*N%U3X>tR2Qv=CoG_eeud4hPF`Mg^ffatC5`c5 z%hZ;C*#y%bPG3w|w#P@gY{HXjiJZ@6drlI-%GNasibc5p)D(53+=IaOqvU#0PDNP? z{AuLg%&rXu5;nTe{k}BKIX#sQ#-ix${jsF5&;8SQzZ0Ktv!r; zeZq}%qI_CHs@wMcKa!MB>m91eDLC1YB2$&mt*gXJjr{Sd$>Iv>?b&cf4FkH?u7)^n z?g5VhJ2GF7kz^cU%6~e#4XvuL3PL6I$W&qMH#R2C0dJGDD38|iS>nuHmbpMZut|Uw z^U6ukR*c}1{{%LVtqWR{uPO&5002(bvWMDD-6M{oegsY4J=^JKG5Okj(VesMyCBgA z$uK+$f`|1U?f{WsqRv^?iVv?tOye4lt_}bAXv~1A?p_JGt%hVzf&nfqUbiPQvfi(j zY*c3PIbD3hkQbXrJ5n}34f5t+rzA99yI-Arkn+a}M41$&?Wzlo;<6{{CX6{cw#98e zvDV8&B+cH)aa4yfBA=oP&Va2{3xU0E8H@?|C2DuzEW@v>`WgmgeK95{tf!~c=idV=zbME^4cMDX(Xvu{4fyWSg;cXRXQc+C|DpDX0 z+Z(2xjdNx{_&LQG5xG(oDuUZ#9l={d>+k_JM9xlzd8@EscbC6cAfQ7lq860J?m*_u z;A-BnUEe;^2y5}$J+c%Qhgp8!XYyaT6^G6UFGv*i-L-Cp3CxrL*DDU=Cp+S3ShCI& z+O*l!{nv(jD8t0H&pr0Y0YyV5Pv+sz*>3B?Szj0e*2Flv+6rN^B z%h8VX)S>~E(GQ}79m4n~35JrewevBELx2>3AZRS!j6ZQJimW8@B&f_loY)Q7Rs8NG zi)NIo#8by%=K(vfTq0iQv3!paL)Q;Ix5LoO&PB^74z#Rp4f?xy zxgc5MTGp_xeoQmoKrC~R$+g>RoIJcu8E-z>Cco5$s*yI3dOcC_0p8a#$i&2XXe)@m zo>lcJlHP^j1z)$^QMqk)gxsz62tFNHkw%LH(MItjFLFK{dCTNk}2;w^Aa2y)yx4JqMLqd|_*^ z!}Cdk4x-RU-6k=szCzS)Q;B^UNv1^&vZX7PJIxRhCOUX}ML)hn4j-TC)4dETBbP_N zF#Id|x~B_AchH$~=Yo!fHpqJGAoAnx-Q&lDi74V05Nmh_cS7bjm&gr76@{tHnP58K z72*TCjk(Z-aZ4%WS?*->Wlb}q96TPOp;l{23m;ZKrbuew%sW3LB0jzW1Un?pqo3~O ztJf?3v!AZfMGkO&jZrAC?~0{J;#<;cq&M7vO>pvudOZPcx$A;VvcRw#b`3ieGjBZc zk`5v0!ZZ-L`%po+YGi;^^_jXHZ1kU@*L2 zE+gNE``1)i;N85q8da;Z!!uvvf_-OymZsbh^4*#*;U&!e$M?lvvPPGqj1;*a>MP{s zcuXBk-rJMH)17J%C;&$><*>=tzNTEsTjaP9EfB>L z|BweVVPb_O;JgYfn!gjU+H^A4?WI(RH4XkFcdi;TGIn~#@nGLOx6?yl`t8!D-ymh|58zGwh-HKh&66^l$}dkfmDsuhIqI@YoY8Wp4fXX8piR}=;FPHs`W7Km ztD6b>BI@wWA+VhSc0K#W{xMRs?yUBBR}yGH^mbl06b%mpFU~TcW(X(v&<)jXodH8s!751>$3-RLTYZ?ye$s(8>igTROHX z_W;o2mBay!a4&Y4PymnH=+CYYN7D)xg$UP1(@GaJx_=Z-5mWlDLSl|dxNewj+~N@$ zup!2^|vclcASgwtOCWod<>QLvJyxOT zQ7T#9T0n z+Ta1yV^e1jc6?q4b=y`w4<)G`ZmoNGp!&lrW-eD{Hv{sz*<34?*fZGr@^Wx4OzB|y zvp9F=W3P@_6YHrpo>imcaiY_Cd1zIbK^h?OUBTT_4CfHl(Zlfvv=tK*F6$|wb=Z{y z8*5!ATpfJxQn_n6%giPPI@FT}BX8jeVLRL*TVAmUw;b!#KQDABw9vG=#vI0P<5wG1 z4kZ@`GRHIXNBIDGTS&?`Iddz+2sLZeE{EIqON! z@|q1ws%v7?oEWvQNt6fK=r%U!U1__*nv!fHkJe6xSXow|d`1U3%{A%o@1AC@nY~@e zWrn(J)7F|7vH&7lvJOJ4Y=uQX;qlPCUaFe-vq%v77V0PkBTTm(%T!0FuDwUeADKbp z2#($Gr=_TMWyv>j3~!aTlbBo|C$~8#KfqrXYpWuW681G_5D=QtWAQiRi|eBPepHof zQwon<_0NP`O`o88UMQpFeO;QUc~7w#mDhUC-2WIHDo|vL8hVLm5d7p?XKsk#JW|lz z+Etgy_!V#WD|{KJm=aw^&NQuh&rY_Qi&d#inJFfLn8!%bZ#u6RS@hpRG|gQWop)Tp z9ATU9p7U)f{on7O_JgRF+cMia)w3iewOwRf4l^XRO)BG+Pl&|to);AL%Otk#4B>;k zgSVWTPO{hHr?)S;LsBfI?1>o2_lKcdlS4ll&$R>FS^?dw zogp(J{41>^TtbtF*40To&}6!WdB~+&{v;5@K+qL5RG`a=ku#};xaT95uydpBTvtwH z7M`|TF5Pd%4;@wZa0!@M>JuO9x=R9NI^c$#g4EcNPDd$TX0ZgVe7T9mt(4?D*s{-n zboH>aa$^h+R^$=72R@pP{*(b2Awpa&HOjNwz%&vjSF0zDEPRk4RIuQ9F=V32gtszH z%vv#yE6~G+#kVxlQ0?6~nGQEn4O~arzO+-9L2jDd9#@s5TX!HuaEDXSPnpDzAGQ_s zhlR=5K7Zg>(C>M1IZ5d)I?}ruk}^DGLYAgM%wW8GpgyFvnFTBQ;7*$6b_>pueyp;z zK|@KVs4f#U%uiqx9QIpcUI^=b0H7o7BrOSMQUNu2WoaGNUv8#Lr}1k>1F61?9A@EL zh^R>bLV~wwX@p1T%NE_jLZ@%0;0{|xxPc{;=M;sMjdy8)e3Kzs`sU>_w(CvJf!B_? zr+NiQieZB%Y^s-ekk8KM6UBP@oUljOYh=I-)Ibxtb`5wVD{f5SggwOO<-z_ z7HRPa1p2S!5CU7^ssBJh*1;#Zr!34q>#YbL0(3|gPLPNOeQ?0E-1y9j$UF`q_O%M zmQ6`wOB9U~M&ES*OJZSd#AP>^V_K}a@+%#^XLS4i#)xGNS>H>5kWgjl zsz?6SZ38z2lPjauvbs4qVw&@Z*E#bd|TMwF1V z?q1g;^+!_wSW+sUz!!iUy_8O1t)+@o0YDaXvqWA=ywuv9~sGTI`DX*H3LGt1lo5ja@PD=4qY1ABue3v7B~JAj4YmH~lgF>UvYVx*!Q50!Ow(9Ja1Z!`*YM^!ITHGVf1e4R!b+aC^J(1&i)ou6g zbh9&#y=w??MX&GRVkw9lq-jcS5vn9u{^{- zn{?}tpM4&{5I13mF%{9qH7*)aiVlYl+F>Eo)xN$Pb8cXlMpw?^cCmm*etF7=k`)UM z59Z3|pT^+Nv8}CL9ct8iGIWhReaW+6sVlRrymz-WGAmV4YQ>*i0u?toTC&7t&hWz3 zOP3rUjd2X;3&#F|lDbi>WX{j3<4x1!^Oe6c3dEPx&wBZb&yCsw_8i(2&QK>~9RDl9 z!4>SZ6z2pJVuvx`9wp~ujp9E&LMz1T*ir&iimx{w9X)mBH_a*-wCdxXa2u7<<9b}e zMyoMU)hCWrRa~<04o=3zkC^G;6+OneO%3q2EPbaqb|b{oZ-tc+^y`d{^77M13#oMp%CQO>yr9D&U$qp&3U#h>*J>Ryy{;Z_DxdzcSwm7~ z7we}?59jii5)X4}ShDplKX{fg{%-9O!JOZ$-jFhfSF90-!nWW`k^z2 zcWpcMMRZH|5&JwAJE0D)5KE!J4sqN#zH}HL}*j7?P~<&&t*k zncKGM!U9Z|=^LE)0EYw#t0I&P3?|P1R0L+MT-ha>x2V68!h=8C>kz%Xc^ulYWl7^N zl&%4{M7z}_Pv;2b3WQQzRDLid7u;4#CfrCK9@44&3uSCvsFVN;i*CQP4gO1gk~aU| zLn;bx;m_ypKJ7@hVG-}jKQC4Nxscu98JthbxG9G+2vime&Wx-3_rKPhgjap}+?@S{ zHB!`HHJiA0!sumYdtEnYQdF6zlK-To)oDtkpQh!yg%9l#CWJ4G?N?HwBm}X(NnyDj zb|Z1y@TG5enEZ}%Jzf=N6vNXi`fF;xoAKyA*`BM2L{{@70oHI|XKZ~j= z0Kpv*I;?^vyLv$(KJtHrkN*#dQub3wstxs1%z~V2_WCIbKg6#WCsu=;24v%j1u3A# zYK-T@w_?LN;^Ror0Imy&odP+*s97GZ*+u=Y03ik5`fm}q>Np=4 zW`@KA4t=wBjy||yjPS;PI&e9>uu)&O7-Ivl{J<>LoL%R4j4;cp!y(+MLa)7ZmcPue z030yLgw#&)>GvpGqugc3G7IO@d*Oy&sY6sdfETmd9bBEBJDxDZ0h!&WWh`r^Mp+l~ z!L!(T_`?jigk~mbR_JXVzS%(J0m7bqkDM^Zsxi*nN2Nbg`0d|1W_DdN(eHoT3^IJ9 zW|6^;C1R>aHQ%;0jLR2$(vAH<@XU;^-dm|>2NShaFUnwBbn^VnCBo#hKo>Rssg-G&(v zXi!Rnb@v^!C=FBtxGL9veOO_YN{zcpl9gMcYPkJg*puoVblRgz$D(MF&zvyGj_ovR zi%K@Cc2U@IlGExMZG3^z2vRGLk%k#UL#dF#GjJL846ML&SDjiR)==_WF>R!hdtruW zJr>jjhfku8HB}M^+(6{x2H&ZXCkFnVZ>%m_T*7-SuB=?~;E)XW51Sx{};WEAyFA-ucC-{w=CanqW|)b!_eA`Ww&KVTMf|-^1H@()v^x9@wa&cwFm` zLkz__+ocjTfrGVz05ygg2c7&my0S|sRgAWvsaVAdr5|3|&`^{JvPg>C>?2p2{@7ud zTy#hIO-ug(^zO6X>}L$pyMGe?6QwNuGBrDhatl!%$T(qv)dXuKTFt|VgDMXIW5Wz> zB9fP~J3(fa&ozb^5Y$Rj_=o*H6;=@gIUrLLeok66C>4Xbqzy#ax)@=ApTd$oY@fv* zMA~3L$`Oi!ea}4O>0nu)3~UzDu=lP!UEziYMvFxQyyK>dv68B)fB*nm;=WFJzsEm{ z&fmd*i7^T~E~<*9fCH_!us+;jh85Wxr(MuP7+=Q5lrOb*@0?L<-&L!aG%%q2K>q-? z2<_X>7+`mQ6k#5_OQcjyv+B@0*RHH~IjfX<0-XxlB>J zB0DH?V(k0pn*RXAW|#O!@I-C3t#nz4BpM@{qsACudRk4|fXrRh2D#Iwr_xj?pl_e+ zll~Onj95&eK^yC61I`#>Tl`JiO`z1IMuz2EJ?irWuO!EFfBc=idkFX#VT5%geMRa# zj>O%9+-IAjk*C(nBhfL|(cp40!vm{NGc-}43ZTvql@v(6*}6?Mda{Oc&KpwbK|ED< x!we1>poR5QY5FJ?Sf=19m;=Bk&UWZ@v1&C8?y4EJD3+=Q&}zuzz8GMC|Jjn5bCCc5 diff --git a/WindowMaker/Backgrounds/Makefile.am b/WindowMaker/Backgrounds/Makefile.am index b0f24fa0..74aa045d 100644 --- a/WindowMaker/Backgrounds/Makefile.am +++ b/WindowMaker/Backgrounds/Makefile.am @@ -1,6 +1,6 @@ defsdatadir = $(pkgdatadir)/Backgrounds -defsdata_DATA = BlueImage.jpeg SeaNight.jpeg BlueWaves.jpeg +defsdata_DATA = BlueImage.jpeg EXTRA_DIST = $(defsdata_DATA) diff --git a/WindowMaker/Backgrounds/Makefile.in b/WindowMaker/Backgrounds/Makefile.in index 37e5f3e6..13333073 100755 --- a/WindowMaker/Backgrounds/Makefile.in +++ b/WindowMaker/Backgrounds/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -92,7 +95,7 @@ wprefsdir = @wprefsdir@ defsdatadir = $(pkgdatadir)/Backgrounds -defsdata_DATA = BlueImage.jpeg SeaNight.jpeg BlueWaves.jpeg +defsdata_DATA = BlueImage.jpeg EXTRA_DIST = $(defsdata_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -193,6 +196,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Defaults/Makefile.in b/WindowMaker/Defaults/Makefile.in index 8b744723..a9fe977e 100755 --- a/WindowMaker/Defaults/Makefile.in +++ b/WindowMaker/Defaults/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -195,6 +198,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Defaults/WMState b/WindowMaker/Defaults/WMState index 0038c0e5..eec57760 100755 --- a/WindowMaker/Defaults/WMState +++ b/WindowMaker/Defaults/WMState @@ -2,7 +2,7 @@ Dock = { Applications = ( { - Command = ""; + Command = "-"; Name = Logo.WMDock; AutoLaunch = No; Forced = No; diff --git a/WindowMaker/Defaults/WMState.in b/WindowMaker/Defaults/WMState.in index 67847dbe..07d59f7d 100644 --- a/WindowMaker/Defaults/WMState.in +++ b/WindowMaker/Defaults/WMState.in @@ -2,7 +2,7 @@ Dock = { Applications = ( { - Command = ""; + Command = "-"; Name = Logo.WMDock; AutoLaunch = No; Forced = No; diff --git a/WindowMaker/Defaults/WMWindowAttributes b/WindowMaker/Defaults/WMWindowAttributes index 9323aee7..b3d8f939 100755 --- a/WindowMaker/Defaults/WMWindowAttributes +++ b/WindowMaker/Defaults/WMWindowAttributes @@ -6,6 +6,13 @@ WMSoundServer = {Icon = Sound.tiff;}; XTerm = {Icon = GNUterm.tiff;}; NXTerm = {Icon = GNUterm.tiff;}; + ScilabGraphic0.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic1.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic2.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic3.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic4.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic5.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic6.Xscilab = {KeepInsideScreen=YES;}; xcalc = {AlwaysUserIcon = Yes;Icon = "HP-16C-48.xpm";}; Netscape = {Icon = Netscape.xpm;}; Emacs = {Icon = ColorGNU.xpm;}; diff --git a/WindowMaker/Defaults/WMWindowAttributes.in b/WindowMaker/Defaults/WMWindowAttributes.in index 8b8b5665..344827f3 100644 --- a/WindowMaker/Defaults/WMWindowAttributes.in +++ b/WindowMaker/Defaults/WMWindowAttributes.in @@ -6,6 +6,13 @@ WMSoundServer = {Icon = Sound.#extension#;}; XTerm = {Icon = GNUterm.#extension#;}; NXTerm = {Icon = GNUterm.#extension#;}; + ScilabGraphic0.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic1.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic2.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic3.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic4.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic5.Xscilab = {KeepInsideScreen=YES;}; + ScilabGraphic6.Xscilab = {KeepInsideScreen=YES;}; xcalc = {AlwaysUserIcon = Yes;Icon = "HP-16C-48.xpm";}; Netscape = {Icon = Netscape.xpm;}; Emacs = {Icon = ColorGNU.xpm;}; diff --git a/WindowMaker/IconSets/Makefile.am b/WindowMaker/IconSets/Makefile.am index 1da935f5..d3466a92 100644 --- a/WindowMaker/IconSets/Makefile.am +++ b/WindowMaker/IconSets/Makefile.am @@ -1,15 +1,15 @@ defsdatadir = $(pkgdatadir)/IconSets -defsdata_DATA = Default +defsdata_DATA = Default.iconset EXTRA_DIST = -CLEANFILES = Default +CLEANFILES = Default.iconset -Default: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes ./Makefile - -rm -f Default - cp $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes Default - chmod 644 Default +Default.iconset: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes ./Makefile + -rm -f Default.iconset + cp $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes Default.iconset + chmod 644 Default.iconset diff --git a/WindowMaker/IconSets/Makefile.in b/WindowMaker/IconSets/Makefile.in index 6ad27c4e..d795d482 100755 --- a/WindowMaker/IconSets/Makefile.in +++ b/WindowMaker/IconSets/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -92,11 +95,11 @@ wprefsdir = @wprefsdir@ defsdatadir = $(pkgdatadir)/IconSets -defsdata_DATA = Default +defsdata_DATA = Default.iconset EXTRA_DIST = -CLEANFILES = Default +CLEANFILES = Default.iconset mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../src/config.h CONFIG_CLEAN_FILES = @@ -195,6 +198,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" @@ -206,10 +210,10 @@ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean -Default: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes ./Makefile - -rm -f Default - cp $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes Default - chmod 644 Default +Default.iconset: $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes ./Makefile + -rm -f Default.iconset + cp $(top_srcdir)/WindowMaker/Defaults/WMWindowAttributes Default.iconset + chmod 644 Default.iconset # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/WindowMaker/Icons/Makefile.in b/WindowMaker/Icons/Makefile.in index 77f46e39..8d1d20ba 100755 --- a/WindowMaker/Icons/Makefile.in +++ b/WindowMaker/Icons/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -202,6 +205,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Makefile.am b/WindowMaker/Makefile.am index d87a09b5..c22257da 100644 --- a/WindowMaker/Makefile.am +++ b/WindowMaker/Makefile.am @@ -1,14 +1,37 @@ -SUBDIRS = Defaults Styles Themes Icons Pixmaps Backgrounds IconSets +SUBDIRS = Backgrounds Defaults IconSets Icons Pixmaps Styles Themes prefsdatadir = $(pkgdatadir) -prefsdata_DATA = wmmacros README menu plmenu autostart.sh exitscript.sh \ - menu.cz menu.de menu.fr menu.gl menu.ja menu.ko menu.nl menu.pt \ - menu.it menu.no menu.he menu.es menu.ru menu.tr menu.el menu.se \ - menu.fi menu.hr menu.dk menu.sl - - -EXTRA_DIST = $(prefsdata_DATA) wmmacros.in plmenu.in plmenu.fr.in plmenu.hr.in +prefsdata_DATA =\ + README\ + README.themes\ + autostart.sh\ + exitscript.sh\ + menu\ + menu.cz\ + menu.de\ + menu.dk\ + menu.el\ + menu.es\ + menu.fi\ + menu.fr\ + menu.gl\ + menu.he\ + menu.hr\ + menu.hu\ + menu.it\ + menu.ja\ + menu.ko\ + menu.nl\ + menu.no\ + menu.pt\ + menu.ru\ + menu.se\ + menu.sl\ + menu.tr + +EXTRA_DIST = $(prefsdata_DATA) mkMakefile wmmacros.in plmenu.in\ + plmenu.fr.in plmenu.hr.in CLEANFILES = wmmacros plmenu @@ -19,7 +42,6 @@ wmmacros: $(srcdir)/wmmacros.in ./Makefile $(srcdir)/wmmacros.in > wmmacros; \ chmod 644 wmmacros - plmenu: $(srcdir)/plmenu.in ./Makefile -rm -f plmenu diff --git a/WindowMaker/Makefile.in b/WindowMaker/Makefile.in index 940234c7..d263fe5c 100755 --- a/WindowMaker/Makefile.in +++ b/WindowMaker/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -90,16 +93,40 @@ X_LOCALE = @X_LOCALE@ pixmapdir = @pixmapdir@ wprefsdir = @wprefsdir@ -SUBDIRS = Defaults Styles Themes Icons Pixmaps Backgrounds IconSets +SUBDIRS = Backgrounds Defaults IconSets Icons Pixmaps Styles Themes prefsdatadir = $(pkgdatadir) -prefsdata_DATA = wmmacros README menu plmenu autostart.sh exitscript.sh \ - menu.cz menu.de menu.fr menu.gl menu.ja menu.ko menu.nl menu.pt \ - menu.it menu.no menu.he menu.es menu.ru menu.tr menu.el menu.se \ - menu.fi menu.hr menu.dk menu.sl - -EXTRA_DIST = $(prefsdata_DATA) wmmacros.in plmenu.in plmenu.fr.in plmenu.hr.in +prefsdata_DATA =\ + README\ + README.themes\ + autostart.sh\ + exitscript.sh\ + menu\ + menu.cz\ + menu.de\ + menu.dk\ + menu.el\ + menu.es\ + menu.fi\ + menu.fr\ + menu.gl\ + menu.he\ + menu.hr\ + menu.hu\ + menu.it\ + menu.ja\ + menu.ko\ + menu.nl\ + menu.no\ + menu.pt\ + menu.ru\ + menu.se\ + menu.sl\ + menu.tr + +EXTRA_DIST = $(prefsdata_DATA) mkMakefile wmmacros.in plmenu.in\ + plmenu.fr.in plmenu.hr.in CLEANFILES = wmmacros plmenu mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -285,6 +312,7 @@ clean: clean-recursive clean-am distclean: distclean-recursive distclean-am -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-recursive maintainer-clean-am @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Pixmaps/Makefile.in b/WindowMaker/Pixmaps/Makefile.in index 22d2eb88..2b036e4a 100755 --- a/WindowMaker/Pixmaps/Makefile.in +++ b/WindowMaker/Pixmaps/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -194,6 +197,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/README.themes b/WindowMaker/README.themes new file mode 100644 index 00000000..e78011f5 --- /dev/null +++ b/WindowMaker/README.themes @@ -0,0 +1,85 @@ + + + +Themes For Window Maker +======================= + +Note: the information contained in this file is only valid for themes +in the .themed (for theme directory) format, supported in +Window Maker 0.20.4 or newer. + + +How To Install a Theme Pack +=========================== + +To install a theme, unpack your theme into your theme directory, +usually ~/GNUstep/Library/WindowMaker/Themes + +cd ~/GNUstep/Library/WindowMaker/Themes +gunzip -c xyztheme.tar.gz | tar xf - + + +How To Load a Theme +=================== + +Use the setstyle command to load a theme. Example: + +setstyle xyztheme.themed + +Note that if you move the directory of the theme (for example, from +~/GNUstep/Library/WindowMaker/Themes to /usr/local/share/WindowMaker/Themes) +you will have to reload that theme so that path information is updated. + + +How To Make a Theme Pack +======================== + +To create a theme pack from your current configuration, use the getstyle +utility with the -p flag. Example: + +getstyle -p MyTheme + +This will create a theme pack named MyTheme.themed, containing everything +it requires, including all pixmap files. + +Additionally, you can put a text file named MyTheme.lsm in the MyTheme.themed +directory. This file can contain info like copyrights, credits or whatever. + +To distribute your theme, just make a .tar.gz of the .themed directory. + +Example: + +tar cf MyTheme.tar MyTheme.themed +gzip MyTheme.tar + + +How To Delete a Theme Pack +========================== + +Just remove the .themed directory. Example: + +cd ~/GNUstep/Library/WindowMaker/Themes +rm -fr themename.themed + + +How To Save Disk Space +====================== + +If you have more than 1 theme that use the same huge background image, +you can delete all the duplicated files and then create hard links in +place of them. For example, if you have: + +theme1.themed/back.jpg + +theme2.themed/backimage.jpg + +theme3.themed/back.jpg + +and all three files contain the same image, you can do: + +rm theme2.themed/backimage.jpg +rm theme3.themed/back.jpg +ln theme1.themed/back.jpg theme2.themed/backimage.jpg +ln theme1.themed/back.jpg theme3.themed/back.jpg + + diff --git a/WindowMaker/Styles/Autumn b/WindowMaker/Styles/Autumn.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Autumn rename to WindowMaker/Styles/Autumn.style diff --git a/WindowMaker/Styles/Black b/WindowMaker/Styles/Black.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Black rename to WindowMaker/Styles/Black.style diff --git a/WindowMaker/Styles/BlackTexture.style b/WindowMaker/Styles/BlackTexture.style new file mode 100644 index 00000000..c829a3b2 --- /dev/null +++ b/WindowMaker/Styles/BlackTexture.style @@ -0,0 +1,19 @@ +{ + TitleJustify = center; + HighlightColor = white; + HighlightTextColor = black; + ClipTitleColor = white; + CClipTitleColor = gray60; + FTitleColor = white; + PTitleColor = white; + UTitleColor = gray20; + FTitleBack = (thgradient, "BlueImage.jpeg", 140, "rgb:30/32/3e", black); + PTitleBack = (thgradient,"BlueImage.jpeg",140,"rgb:70/72/7e","rgb:45/47/4e"); + UTitleBack = (thgradient,"BlueImage.jpeg", 100,white,"rgb:9e/94/80"); + MenuTitleColor = white; + MenuTextColor = white; + MenuDisabledColor = gray60; + MenuTitleBack = (thgradient, "BlueImage.jpeg", 140, "rgb:30/32/3e", black); + MenuTextBack = (thgradient,"BlueImage.jpeg",140,"rgb:50/5a/5e","rgb:20/2a/2e"); + IconBack = (tdgradient, "BlueImage.jpeg", 140, "rgb:30/32/3e", black); +} diff --git a/WindowMaker/Styles/Blue b/WindowMaker/Styles/Blue.style old mode 100755 new mode 100644 similarity index 89% rename from WindowMaker/Styles/Blue rename to WindowMaker/Styles/Blue.style index 6c69c0df..d2305eca --- a/WindowMaker/Styles/Blue +++ b/WindowMaker/Styles/Blue.style @@ -10,4 +10,6 @@ UTitleBack = (hgradient, "rgb:90/90/90", "rgb:c0/c0/c0"); PTitleBack = (hgradient, "rgb:50/50/50", "rgb:80/80/80"); MenuTitleBack = (hgradient, "rgb:20/20/70", "rgb:00/00/20"); MenuTextBack = (hgradient, "rgb:c0/c0/c0", "rgb:90/90/90"); +IconTitleBack = "#101040"; +IconTitleColor = white; } diff --git a/WindowMaker/Styles/BlueAluminum b/WindowMaker/Styles/BlueAluminum deleted file mode 100755 index 7165fb28..00000000 --- a/WindowMaker/Styles/BlueAluminum +++ /dev/null @@ -1,16 +0,0 @@ -{ - HighlightColor = white; - HighlightTextColor = black; - -FTitleColor = "white"; -PTitleColor = "white"; -UTitleColor = "gray"; -MenuTitleColor = "white"; -MenuDisabledColor = "gray50"; -MenuTextColor = "white"; -FTitleBack = (hgradient, "rgb:20/24/40","rgb:69/a6/e7"); -UTitleBack = (hgradient, "rgb:00/04/20","rgb:37/57/79"); -PTitleBack = (hgradient, "rgb:10/10/30","rgb:49/86/c7"); -MenuTitleBack = (hgradient, "rgb:20/24/40","rgb:69/a6/e7"); -MenuTextBack = (hgradient, "rgb:00/00/10","rgb:59/96/d7"); -} diff --git a/WindowMaker/Styles/BlueDawn b/WindowMaker/Styles/BlueDawn.style old mode 100755 new mode 100644 similarity index 99% rename from WindowMaker/Styles/BlueDawn rename to WindowMaker/Styles/BlueDawn.style index 254d06a9..f091f743 --- a/WindowMaker/Styles/BlueDawn +++ b/WindowMaker/Styles/BlueDawn.style @@ -42,4 +42,4 @@ "rgb:96/d7/e7" ); IconBack = (mdgradient, "rgb:18/34/54", "rgb:28/45/69", "rgb:08/24/20"); -} \ No newline at end of file +} diff --git a/WindowMaker/Styles/BlueishGreen b/WindowMaker/Styles/BlueishGreen.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/BlueishGreen rename to WindowMaker/Styles/BlueishGreen.style diff --git a/WindowMaker/Styles/Brown b/WindowMaker/Styles/Brown.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Brown rename to WindowMaker/Styles/Brown.style diff --git a/WindowMaker/Styles/Chumbo b/WindowMaker/Styles/Chumbo.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Chumbo rename to WindowMaker/Styles/Chumbo.style diff --git a/WindowMaker/Styles/Copper b/WindowMaker/Styles/Copper.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Copper rename to WindowMaker/Styles/Copper.style diff --git a/WindowMaker/Styles/DarkBlue b/WindowMaker/Styles/DarkBlue.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/DarkBlue rename to WindowMaker/Styles/DarkBlue.style diff --git a/WindowMaker/Styles/DarkRed b/WindowMaker/Styles/DarkRed.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/DarkRed rename to WindowMaker/Styles/DarkRed.style diff --git a/WindowMaker/Styles/Fire b/WindowMaker/Styles/Fire.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Fire rename to WindowMaker/Styles/Fire.style diff --git a/WindowMaker/Styles/Food b/WindowMaker/Styles/Food.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Food rename to WindowMaker/Styles/Food.style diff --git a/WindowMaker/Styles/Golden b/WindowMaker/Styles/Golden.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Golden rename to WindowMaker/Styles/Golden.style diff --git a/WindowMaker/Styles/Green b/WindowMaker/Styles/Green.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Green rename to WindowMaker/Styles/Green.style diff --git a/WindowMaker/Styles/GreyBlue b/WindowMaker/Styles/GreyBlue.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/GreyBlue rename to WindowMaker/Styles/GreyBlue.style diff --git a/WindowMaker/Styles/Gtk b/WindowMaker/Styles/Gtk.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Gtk rename to WindowMaker/Styles/Gtk.style diff --git a/WindowMaker/Styles/LightBlue b/WindowMaker/Styles/LightBlue.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/LightBlue rename to WindowMaker/Styles/LightBlue.style diff --git a/WindowMaker/Styles/Makefile.am b/WindowMaker/Styles/Makefile.am dissimilarity index 99% index 44db9f49..3bcd6dbf 100644 --- a/WindowMaker/Styles/Makefile.am +++ b/WindowMaker/Styles/Makefile.am @@ -1,33 +1,33 @@ -defsdatadir = $(pkgdatadir)/Styles - -defsdata_DATA = \ - Autumn\ - Black\ - Blue\ - BlueAluminum\ - BlueDawn\ - BlueishGreen\ - Brown\ - Chumbo\ - Copper\ - DarkBlue\ - DarkRed\ - Fire\ - Food\ - Golden\ - Green\ - GreyBlue\ - Gtk\ - LightBlue\ - Pastel\ - Pink\ - Pumpkin\ - Purple\ - Red\ - RednBlue\ - ShinyBrown\ - Summer\ - Traditional\ - VioletBlue - -EXTRA_DIST = $(defsdata_DATA) + +prefsdatadir = $(pkgdatadir)/Styles + +prefsdata_DATA =\ + Autumn.style\ + Black.style\ + BlackTexture.style\ + Blue.style\ + BlueDawn.style\ + BlueishGreen.style\ + Brown.style\ + Chumbo.style\ + Copper.style\ + DarkBlue.style\ + DarkRed.style\ + Fire.style\ + Food.style\ + Golden.style\ + Green.style\ + GreyBlue.style\ + Gtk.style\ + LightBlue.style\ + Pastel.style\ + Purple.style\ + Red.style\ + RednBlue.style\ + Summer.style\ + Traditional.style\ + VioletBlue.style + +EXTRA_DIST = $(prefsdata_DATA) + + diff --git a/WindowMaker/Styles/Makefile.in b/WindowMaker/Styles/Makefile.in index 7fa054ce..734f4253 100755 --- a/WindowMaker/Styles/Makefile.in +++ b/WindowMaker/Styles/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -90,43 +93,40 @@ X_LOCALE = @X_LOCALE@ pixmapdir = @pixmapdir@ wprefsdir = @wprefsdir@ -defsdatadir = $(pkgdatadir)/Styles - -defsdata_DATA = \ - Autumn\ - Black\ - Blue\ - BlueAluminum\ - BlueDawn\ - BlueishGreen\ - Brown\ - Chumbo\ - Copper\ - DarkBlue\ - DarkRed\ - Fire\ - Food\ - Golden\ - Green\ - GreyBlue\ - Gtk\ - LightBlue\ - Pastel\ - Pink\ - Pumpkin\ - Purple\ - Red\ - RednBlue\ - ShinyBrown\ - Summer\ - Traditional\ - VioletBlue - -EXTRA_DIST = $(defsdata_DATA) +prefsdatadir = $(pkgdatadir)/Styles + +prefsdata_DATA =\ + Autumn.style\ + Black.style\ + BlackTexture.style\ + Blue.style\ + BlueDawn.style\ + BlueishGreen.style\ + Brown.style\ + Chumbo.style\ + Copper.style\ + DarkBlue.style\ + DarkRed.style\ + Fire.style\ + Food.style\ + Golden.style\ + Green.style\ + GreyBlue.style\ + Gtk.style\ + LightBlue.style\ + Pastel.style\ + Purple.style\ + Red.style\ + RednBlue.style\ + Summer.style\ + Traditional.style\ + VioletBlue.style + +EXTRA_DIST = $(prefsdata_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../src/config.h CONFIG_CLEAN_FILES = -DATA = $(defsdata_DATA) +DATA = $(prefsdata_DATA) DIST_COMMON = Makefile.am Makefile.in @@ -146,23 +146,23 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -install-defsdataDATA: $(defsdata_DATA) +install-prefsdataDATA: $(prefsdata_DATA) @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(defsdatadir) - @list='$(defsdata_DATA)'; for p in $$list; do \ + $(mkinstalldirs) $(DESTDIR)$(prefsdatadir) + @list='$(prefsdata_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ - echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(defsdatadir)/$$p"; \ - $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(defsdatadir)/$$p; \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(prefsdatadir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(prefsdatadir)/$$p; \ else if test -f $$p; then \ - echo " $(INSTALL_DATA) $$p $(DESTDIR)$(defsdatadir)/$$p"; \ - $(INSTALL_DATA) $$p $(DESTDIR)$(defsdatadir)/$$p; \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(prefsdatadir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(prefsdatadir)/$$p; \ fi; fi; \ done -uninstall-defsdataDATA: +uninstall-prefsdataDATA: @$(NORMAL_UNINSTALL) - list='$(defsdata_DATA)'; for p in $$list; do \ - rm -f $(DESTDIR)$(defsdatadir)/$$p; \ + list='$(prefsdata_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(prefsdatadir)/$$p; \ done tags: TAGS TAGS: @@ -187,18 +187,18 @@ installcheck: install-exec: @$(NORMAL_INSTALL) -install-data: install-defsdataDATA +install-data: install-prefsdataDATA @$(NORMAL_INSTALL) install: install-exec install-data all @: -uninstall: uninstall-defsdataDATA +uninstall: uninstall-prefsdataDATA install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install installdirs: - $(mkinstalldirs) $(DATADIR)$(defsdatadir) + $(mkinstalldirs) $(DATADIR)$(prefsdatadir) mostlyclean-generic: @@ -221,12 +221,13 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -.PHONY: uninstall-defsdataDATA install-defsdataDATA tags distdir info \ +.PHONY: uninstall-prefsdataDATA install-prefsdataDATA tags distdir info \ dvi installcheck install-exec install-data install uninstall all \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean diff --git a/WindowMaker/Styles/Pastel b/WindowMaker/Styles/Pastel.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Pastel rename to WindowMaker/Styles/Pastel.style diff --git a/WindowMaker/Styles/Pink b/WindowMaker/Styles/Pink deleted file mode 100755 index ec0289f0..00000000 --- a/WindowMaker/Styles/Pink +++ /dev/null @@ -1,16 +0,0 @@ -{ - HighlightColor = white; - HighlightTextColor = black; - TitleJustify = center; - FTitleColor = gray40; - PTitleColor = gray; - UTitleColor = gray; - FTitleBack = (hgradient, white, pink); - PTitleBack = (hgradient, pink, pink2); - UTitleBack = (hgradient, pink3, pink4); - MenuTitleColor = white; - MenuTextColor = white; - MenuDisabledColor = gray60; - MenuTitleBack = (hgradient, pink2, pink4); - MenuTextBack = (hgradient, pink4, black); -} diff --git a/WindowMaker/Styles/Pumpkin b/WindowMaker/Styles/Pumpkin deleted file mode 100755 index 165b5b6e..00000000 --- a/WindowMaker/Styles/Pumpkin +++ /dev/null @@ -1,19 +0,0 @@ -{ - TitleJustify = center; - HighlightColor = white; - HighlightTextColor = black; - ClipTitleColor = white; - CClipTitleColor = gray20; - FTitleColor = white; - PTitleColor = gray60; - UTitleColor = gray60; - FTitleBack = (hgradient, orange2, orange4); - PTitleBack = (hgradient, orange4, black); - UTitleBack = (hgradient, "rgb:18/38/59", black); - MenuTitleColor = white; - MenuTextColor = white; - MenuDisabledColor = gray60; - MenuTitleBack = (hgradient, orange2, orange4); - MenuTextBack = (hgradient, "rgb:18/38/59", "rgb:00/14/28"); - IconBack = (dgradient, "rgb:a6/a6/b6", "rgb:51/55/61"); -} diff --git a/WindowMaker/Styles/Purple b/WindowMaker/Styles/Purple.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Purple rename to WindowMaker/Styles/Purple.style diff --git a/WindowMaker/Styles/Red b/WindowMaker/Styles/Red.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Red rename to WindowMaker/Styles/Red.style diff --git a/WindowMaker/Styles/RednBlue b/WindowMaker/Styles/RednBlue.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/RednBlue rename to WindowMaker/Styles/RednBlue.style diff --git a/WindowMaker/Styles/ShinyBrown b/WindowMaker/Styles/ShinyBrown deleted file mode 100755 index d2b67baa..00000000 --- a/WindowMaker/Styles/ShinyBrown +++ /dev/null @@ -1,49 +0,0 @@ -{ - TitleJustify = center; - HighlightColor = white; - HighlightTextColor = black; - ClipTitleColor = white; - CClipTitleColor = "#92999d"; - FTitleColor = white; - PTitleColor = gray; - UTitleColor = gray; - FTitleBack = ( - mdgradient, - "rgb:61/51/59", - "rgb:ae/9e/a6", - "rgb:61/51/59", - "rgb:ae/9e/a6" - ); - PTitleBack = ( - mdgradient, - "rgb:76/61/76", - "rgb:66/71/76", - "rgb:0a/20/20", - "rgb:66/71/76" - ); - UTitleBack = ( - mdgradient, - "rgb:18/20/30", - "rgb:49/71/86", - "rgb:08/10/30", - "rgb:49/71/86" - ); - MenuTitleColor = white; - MenuTextColor = white; - MenuDisabledColor = gray60; - MenuTitleBack = ( - mdgradient, - "rgb:61/51/59", - "rgb:ae/9e/a6", - "rgb:61/51/59", - "rgb:ae/9e/a6" - ); - MenuTextBack = ( - mdgradient, - "rgb:08/10/30", - "rgb:49/71/86", - "rgb:08/10/30", - "rgb:49/71/86" - ); - IconBack = (dgradient, "rgb:a6/a6/b6", "rgb:51/55/61"); -} diff --git a/WindowMaker/Styles/Summer b/WindowMaker/Styles/Summer.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/Summer rename to WindowMaker/Styles/Summer.style diff --git a/WindowMaker/Styles/Traditional b/WindowMaker/Styles/Traditional.style old mode 100755 new mode 100644 similarity index 92% rename from WindowMaker/Styles/Traditional rename to WindowMaker/Styles/Traditional.style index 2cbbf875..127c066b --- a/WindowMaker/Styles/Traditional +++ b/WindowMaker/Styles/Traditional.style @@ -17,4 +17,6 @@ TitleJustify = center; ClipTitleColor = white; CClipTitleColor = gray20; IconBack = (dgradient, "rgb:a6/a6/b6", "rgb:51/55/61"); +IconTitleColor = white; +IconTitleBack = black; } diff --git a/WindowMaker/Styles/VioletBlue b/WindowMaker/Styles/VioletBlue.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Styles/VioletBlue rename to WindowMaker/Styles/VioletBlue.style diff --git a/WindowMaker/Themes/BlueWaves b/WindowMaker/Themes/BlueWaves deleted file mode 100755 index bf1d2457..00000000 --- a/WindowMaker/Themes/BlueWaves +++ /dev/null @@ -1,59 +0,0 @@ -{ - TitleJustify = left; - WindowTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*"; - MenuTitleFont = "-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*"; - MenuTextFont = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*"; - IconTitleFont = "-*-helvetica-medium-r-normal-*-8-*-*-*-*-*-*-*"; - ClipTitleFont = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*"; - DisplayFont = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*"; - HighlightColor = white; - HighlightTextColor = black; - ClipTitleColor = "rgb:00/b7/f7"; - CClipTitleColor = "rgb:00/61/81"; - FTitleColor = white; - PTitleColor = white; - UTitleColor = "rgb:79/96/cf"; - FTitleBack = ( - mhgradient, - "rgb:18/2c/70", - "rgb:18/2c/70", - "rgb:49/69/c7", - "rgb:79/a2/d0", - "rgb:96/d7/e7" - ); - PTitleBack = (hgradient, "rgb:08/18/38", "rgb:28/3c/49"); - UTitleBack = ( - mhgradient, - "rgb:18/2c/41", - "rgb:18/2c/41", - "rgb:08/18/38", - "rgb:28/3c/49", - "rgb:28/45/50" - ); - MenuTitleColor = white; - MenuTextColor = black; - MenuDisabledColor = gray; - MenuTitleBack = ( - mhgradient, - "rgb:18/2c/70", - "rgb:79/a2/d0", - "rgb:28/45/96", - "rgb:18/2c/41" - ); - MenuTextBack = ( - mhgradient, - "rgb:18/2c/70", - "rgb:28/45/96", - "rgb:79/a2/d0", - "rgb:96/d7/e7" - ); - IconBack = ( - mdgradient, - "rgb:58/74/94", - "rgb:79/a2/d0", - "rgb:28/45/96", - "rgb:20/24/4a", - "rgb:20/24/4a" - ); - WorkspaceBack = (tpixmap, BlueWaves.jpeg, "rgb:20/24/4a"); -} diff --git a/WindowMaker/Themes/Checker.themed/Makefile.am b/WindowMaker/Themes/Checker.themed/Makefile.am new file mode 100755 index 00000000..5d8481dd --- /dev/null +++ b/WindowMaker/Themes/Checker.themed/Makefile.am @@ -0,0 +1,7 @@ +defsdatadir = $(pkgdatadir)/Themes/Checker.themed + +defsdata_DATA = \ + checker.xpm\ + style + +EXTRA_DIST = $(defsdata_DATA) diff --git a/WindowMaker/Backgrounds/Makefile.in b/WindowMaker/Themes/Checker.themed/Makefile.in similarity index 94% copy from WindowMaker/Backgrounds/Makefile.in copy to WindowMaker/Themes/Checker.themed/Makefile.in index 37e5f3e6..db0b235e 100755 --- a/WindowMaker/Backgrounds/Makefile.in +++ b/WindowMaker/Themes/Checker.themed/Makefile.in @@ -38,7 +38,7 @@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. +top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -90,13 +93,15 @@ X_LOCALE = @X_LOCALE@ pixmapdir = @pixmapdir@ wprefsdir = @wprefsdir@ -defsdatadir = $(pkgdatadir)/Backgrounds +defsdatadir = $(pkgdatadir)/Themes/Checker.themed -defsdata_DATA = BlueImage.jpeg SeaNight.jpeg BlueWaves.jpeg +defsdata_DATA = \ + checker.xpm\ + style EXTRA_DIST = $(defsdata_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../../src/config.h +CONFIG_HEADER = ../../../src/config.h CONFIG_CLEAN_FILES = DATA = $(defsdata_DATA) @@ -111,7 +116,7 @@ all: Makefile $(DATA) .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Backgrounds/Makefile + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Themes/Checker.themed/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ @@ -142,7 +147,7 @@ TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -subdir = WindowMaker/Backgrounds +subdir = WindowMaker/Themes/Checker.themed distdir: $(DISTFILES) @for file in $(DISTFILES); do \ @@ -193,6 +198,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Themes/Checker.themed/checker.xpm b/WindowMaker/Themes/Checker.themed/checker.xpm new file mode 100755 index 00000000..a52302c5 --- /dev/null +++ b/WindowMaker/Themes/Checker.themed/checker.xpm @@ -0,0 +1,49 @@ +/* XPM */ +static char *checker[] = { +/* width height num_colors chars_per_pixel */ +" 40 40 2 1", +/* colors */ +". c white", +"# c black", +/* pixels */ +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"..........##########..........##########", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########..........", +"##########..........##########.........." +}; diff --git a/WindowMaker/Themes/Checker.themed/style b/WindowMaker/Themes/Checker.themed/style new file mode 100755 index 00000000..6b8a4bd7 --- /dev/null +++ b/WindowMaker/Themes/Checker.themed/style @@ -0,0 +1,19 @@ +{ + TitleJustify = center; + HighlightColor = white; + HighlightTextColor = black; + ClipTitleColor = white; + CClipTitleColor = gray60; + FTitleColor = white; + PTitleColor = white; + UTitleColor = black; + FTitleBack = (thgradient, checker.xpm, 200, slateblue, black); + PTitleBack = (thgradient, checker.xpm, 200, wheat, black); + UTitleBack = (thgradient, checker.xpm, 220, white, gray40); + MenuTitleColor = white; + MenuTextColor = black; + MenuDisabledColor = gray30; + MenuTitleBack = (thgradient, checker.xpm, 200, slateblue, black); + MenuTextBack = (thgradient, checker.xpm, 220, white, gray40); + IconBack = (tdgradient, checker.xpm, 140, deeppink, black); +} diff --git a/WindowMaker/Themes/Default b/WindowMaker/Themes/Default.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Themes/Default rename to WindowMaker/Themes/Default.style diff --git a/WindowMaker/Themes/Makefile.am b/WindowMaker/Themes/Makefile.am index c4f29378..3043ec22 100644 --- a/WindowMaker/Themes/Makefile.am +++ b/WindowMaker/Themes/Makefile.am @@ -1,6 +1,8 @@ +SUBDIRS = Night.themed Checker.themed defsdatadir = $(pkgdatadir)/Themes -defsdata_DATA = Default Pastel OpenStep Night BlueWaves +defsdata_DATA = Default.style OpenStep.style Pastel.style EXTRA_DIST = $(defsdata_DATA) + diff --git a/WindowMaker/Makefile.in b/WindowMaker/Themes/Makefile.in similarity index 82% copy from WindowMaker/Makefile.in copy to WindowMaker/Themes/Makefile.in index 940234c7..3851f52e 100755 --- a/WindowMaker/Makefile.in +++ b/WindowMaker/Themes/Makefile.in @@ -38,7 +38,7 @@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -90,24 +93,19 @@ X_LOCALE = @X_LOCALE@ pixmapdir = @pixmapdir@ wprefsdir = @wprefsdir@ -SUBDIRS = Defaults Styles Themes Icons Pixmaps Backgrounds IconSets +SUBDIRS = Night.themed Checker.themed -prefsdatadir = $(pkgdatadir) +defsdatadir = $(pkgdatadir)/Themes -prefsdata_DATA = wmmacros README menu plmenu autostart.sh exitscript.sh \ - menu.cz menu.de menu.fr menu.gl menu.ja menu.ko menu.nl menu.pt \ - menu.it menu.no menu.he menu.es menu.ru menu.tr menu.el menu.se \ - menu.fi menu.hr menu.dk menu.sl +defsdata_DATA = Default.style OpenStep.style Pastel.style -EXTRA_DIST = $(prefsdata_DATA) wmmacros.in plmenu.in plmenu.fr.in plmenu.hr.in - -CLEANFILES = wmmacros plmenu +EXTRA_DIST = $(defsdata_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../src/config.h +CONFIG_HEADER = ../../src/config.h CONFIG_CLEAN_FILES = -DATA = $(prefsdata_DATA) +DATA = $(defsdata_DATA) -DIST_COMMON = README Makefile.am Makefile.in +DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) @@ -118,30 +116,30 @@ all: all-recursive all-am .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Makefile + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Themes/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -install-prefsdataDATA: $(prefsdata_DATA) +install-defsdataDATA: $(defsdata_DATA) @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(prefsdatadir) - @list='$(prefsdata_DATA)'; for p in $$list; do \ + $(mkinstalldirs) $(DESTDIR)$(defsdatadir) + @list='$(defsdata_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ - echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(prefsdatadir)/$$p"; \ - $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(prefsdatadir)/$$p; \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(defsdatadir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(defsdatadir)/$$p; \ else if test -f $$p; then \ - echo " $(INSTALL_DATA) $$p $(DESTDIR)$(prefsdatadir)/$$p"; \ - $(INSTALL_DATA) $$p $(DESTDIR)$(prefsdatadir)/$$p; \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(defsdatadir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(defsdatadir)/$$p; \ fi; fi; \ done -uninstall-prefsdataDATA: +uninstall-defsdataDATA: @$(NORMAL_UNINSTALL) - list='$(prefsdata_DATA)'; for p in $$list; do \ - rm -f $(DESTDIR)$(prefsdatadir)/$$p; \ + list='$(defsdata_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(defsdatadir)/$$p; \ done # This directory's subdirectories are mostly independent; you can cd @@ -211,7 +209,7 @@ maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -subdir = WindowMaker +subdir = WindowMaker/Themes distdir: $(DISTFILES) @for file in $(DISTFILES); do \ @@ -235,9 +233,9 @@ check: all-am installcheck: installcheck-recursive all-am: Makefile $(DATA) -install-data-am: install-prefsdataDATA +install-data-am: install-defsdataDATA -uninstall-am: uninstall-prefsdataDATA +uninstall-am: uninstall-defsdataDATA install-exec: install-exec-recursive @$(NORMAL_INSTALL) @@ -253,7 +251,7 @@ uninstall: uninstall-recursive uninstall-am install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install installdirs: installdirs-recursive - $(mkinstalldirs) $(DATADIR)$(prefsdatadir) + $(mkinstalldirs) $(DATADIR)$(defsdatadir) mostlyclean-generic: @@ -285,12 +283,13 @@ clean: clean-recursive clean-am distclean: distclean-recursive distclean-am -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-recursive maintainer-clean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -.PHONY: uninstall-prefsdataDATA install-prefsdataDATA \ +.PHONY: uninstall-defsdataDATA install-defsdataDATA \ install-data-recursive uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ @@ -303,20 +302,6 @@ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean -wmmacros: $(srcdir)/wmmacros.in ./Makefile - -rm -f wmmacros - - sed -e "s:#pkgdatadir#:$(pkgdatadir):" -e "s://:/:" \ - $(srcdir)/wmmacros.in > wmmacros; \ - chmod 644 wmmacros - -plmenu: $(srcdir)/plmenu.in ./Makefile - -rm -f plmenu - - sed -e "s:#pkgdatadir#:$(pkgdatadir):" -e "s://:/:" \ - $(srcdir)/plmenu.in > plmenu; \ - chmod 644 plmenu - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/WindowMaker/Themes/Night.themed/Makefile.am b/WindowMaker/Themes/Night.themed/Makefile.am new file mode 100755 index 00000000..59e82b16 --- /dev/null +++ b/WindowMaker/Themes/Night.themed/Makefile.am @@ -0,0 +1,7 @@ +defsdatadir = $(pkgdatadir)/Themes/Night.themed + +defsdata_DATA = \ + SeaNight.jpeg\ + style + +EXTRA_DIST = $(defsdata_DATA) diff --git a/WindowMaker/Backgrounds/Makefile.in b/WindowMaker/Themes/Night.themed/Makefile.in similarity index 94% copy from WindowMaker/Backgrounds/Makefile.in copy to WindowMaker/Themes/Night.themed/Makefile.in index 37e5f3e6..7e4114e2 100755 --- a/WindowMaker/Backgrounds/Makefile.in +++ b/WindowMaker/Themes/Night.themed/Makefile.in @@ -38,7 +38,7 @@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. +top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -90,13 +93,15 @@ X_LOCALE = @X_LOCALE@ pixmapdir = @pixmapdir@ wprefsdir = @wprefsdir@ -defsdatadir = $(pkgdatadir)/Backgrounds +defsdatadir = $(pkgdatadir)/Themes/Night.themed -defsdata_DATA = BlueImage.jpeg SeaNight.jpeg BlueWaves.jpeg +defsdata_DATA = \ + SeaNight.jpeg\ + style EXTRA_DIST = $(defsdata_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../../src/config.h +CONFIG_HEADER = ../../../src/config.h CONFIG_CLEAN_FILES = DATA = $(defsdata_DATA) @@ -111,7 +116,7 @@ all: Makefile $(DATA) .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Backgrounds/Makefile + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps WindowMaker/Themes/Night.themed/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ @@ -142,7 +147,7 @@ TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) -subdir = WindowMaker/Backgrounds +subdir = WindowMaker/Themes/Night.themed distdir: $(DISTFILES) @for file in $(DISTFILES); do \ @@ -193,6 +198,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/WindowMaker/Backgrounds/SeaNight.jpeg b/WindowMaker/Themes/Night.themed/SeaNight.jpeg similarity index 100% rename from WindowMaker/Backgrounds/SeaNight.jpeg rename to WindowMaker/Themes/Night.themed/SeaNight.jpeg diff --git a/WindowMaker/Themes/Night b/WindowMaker/Themes/Night.themed/style similarity index 99% rename from WindowMaker/Themes/Night rename to WindowMaker/Themes/Night.themed/style index a0c679ed..ad6e25ee 100755 --- a/WindowMaker/Themes/Night +++ b/WindowMaker/Themes/Night.themed/style @@ -49,4 +49,4 @@ ); IconBack = (mdgradient, "rgb:18/34/54", "rgb:28/45/69", "rgb:08/24/20"); WorkspaceBack = (spixmap, SeaNight.jpeg, black); -} \ No newline at end of file +} diff --git a/WindowMaker/Themes/OpenStep b/WindowMaker/Themes/OpenStep.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Themes/OpenStep rename to WindowMaker/Themes/OpenStep.style diff --git a/WindowMaker/Themes/Pastel b/WindowMaker/Themes/Pastel.style old mode 100755 new mode 100644 similarity index 100% rename from WindowMaker/Themes/Pastel rename to WindowMaker/Themes/Pastel.style diff --git a/WindowMaker/menu b/WindowMaker/menu index e7a025b5..7f6d004d 100644 --- a/WindowMaker/menu +++ b/WindowMaker/menu @@ -65,15 +65,17 @@ * // Opens one or more directories and construct menu with all * // subdirectories and readable files in them sorted alphabetically, * // preceding each of them with command. - * OPEN_MENU /some/dir [/some/other/dir ...] WITH command -options - * + * OPEN_MENU [options] /some/dir [/some/other/dir ...] WITH command -options + * Options: + * -noext strip whatever is after the last dot in the + * file name * * is the program to execute. * * ** Options for command line in EXEC: * %s - substitute with current selection - * %a(message) - opens a input box with the message and do substitution with - * what you typed + * %a(title[,prompt]) - opens a input box with the specified title and the + * optional prompt and do substitution with what you typed * %w - substitute with XID for the current focused window * * You can override special characters (as % and ") with the \ character: @@ -92,7 +94,7 @@ * // some X11 apps in different directories * "X11 apps" OPEN_MENU /usr/X11/bin ~/bin/X11 * // set some background images - * "Background" OPEN_MENU ~/images /usr/share/images WITH wmsetbg -u -t + * "Background" OPEN_MENU -noext ~/images /usr/share/images WITH wmsetbg -u -t * // inserts the style.menu in this entry * "Style" OPEN_MENU style.menu * "Test" END @@ -123,8 +125,8 @@ "OffiX Files" EXEC files "LyX" EXEC lyx "Netscape" EXEC netscape - "Ghostview" EXEC ghostview %a(Enter file to view) - "Acrobat" EXEC /usr/local/Acrobat3/bin/acroread %a(Enter PDF to view) + "Ghostview" EXEC ghostview %a(GhostView,Enter file to view) + "Acrobat" EXEC /usr/local/Acrobat3/bin/acroread %a(Acrobar,Enter PDF to view) "TkDesk" EXEC tkdesk "Applications" END "Editors" MENU @@ -169,9 +171,9 @@ "Workspace" END "Appearance" MENU - "Themes" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Styles" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Icon Sets" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Themes" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Styles" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Icon Sets" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Background" MENU "Solid" MENU "Black" WS_BACK '(solid, black)' @@ -193,10 +195,10 @@ "Grey Shades" WS_BACK '(vgradient, "#636380", "#131318")' "Wine Shades" WS_BACK '(vgradient, "#600040", "#180010")' "Gradient" END - "Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Images" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Background" END - "Save Theme" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" - "Save IconSet" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" + "Save Theme" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name,Enter file name:)" + "Save IconSet" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name,Enter file name:)" "Appearance" END "Exit" MENU diff --git a/WindowMaker/menu.dk b/WindowMaker/menu.dk index 0bd6edd6..48c5973e 100755 --- a/WindowMaker/menu.dk +++ b/WindowMaker/menu.dk @@ -169,9 +169,9 @@ "Arbejdsbord" END "Udseende" MENU - "Temaer" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Stil" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Ikonsæt" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Temaer" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stil" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Ikonsæt" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Baggrund" MENU "Ensfarvet" MENU "Sort" WS_BACK '(solid, black)' @@ -187,7 +187,7 @@ "Flag" WS_BACK '(mdgradient, green, red, white, green)' "Himmel" WS_BACK '(vgradient, blue4, white)' "Nuancer" END - "Billeder" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Billeder" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Baggrund" END "Gem tema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Gem ikonsæt" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.el b/WindowMaker/menu.el index b362abc6..e3bde21b 100644 --- a/WindowMaker/menu.el +++ b/WindowMaker/menu.el @@ -177,9 +177,9 @@ "ÅðéöÜíåéá" END "ÅìöÜíéóç" MENU - "ÈÝìáôá" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Óôõë" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "ÏìÜäá Åéêïíéäßùí" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "ÈÝìáôá" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Óôõë" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "ÏìÜäá Åéêïíéäßùí" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Öüíôï" MENU "Ìïíü÷ñùìï" MENU "Ìáýñï" WS_BACK '(solid, black)' @@ -195,7 +195,7 @@ "Óçìáßá" WS_BACK '(mdgradient, green, red, white, green)' "ÏõñÜíïò" WS_BACK '(vgradient, blue4, white)' "ÄéáâáèìéóìÝíï" END - "Åéêüíåò" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Åéêüíåò" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Öüíôï" END "ÁðïèÞêåõóç ÈÝìáôïò" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(¼íïìá ÈÝìáôïò)" "ÁðïèÞêåõóç ÏìÜäáò Åéêïíéäßùí" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(¼íïìá ÏìÜäáò)" diff --git a/WindowMaker/menu.es b/WindowMaker/menu.es index ab55309a..870d8348 100644 --- a/WindowMaker/menu.es +++ b/WindowMaker/menu.es @@ -158,9 +158,9 @@ "Escritorio" END "Apariencia" MENU - "Temas" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Estilos" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Juegos de Iconos" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Temas" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Estilos" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Juegos de Iconos" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Fondo" MENU "Sólido" MENU "Black" WS_BACK '(solid, black)' @@ -176,7 +176,7 @@ "Flag" WS_BACK '(mdgradient, green, red, white, green)' "Sky" WS_BACK '(vgradient, blue4, white)' "Gradiente" END - "Imagenes" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Imagenes" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Fondo" END "Guardar Tema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Guardar Juego de Iconos" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.fi b/WindowMaker/menu.fi index 56d0a7a9..47ef9270 100644 --- a/WindowMaker/menu.fi +++ b/WindowMaker/menu.fi @@ -162,9 +162,9 @@ "Työtilat" END "Ulkonäkö" MENU - "Teemat" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Tyylit" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Kuvakeryhmät" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Teemat" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Tyylit" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Kuvakeryhmät" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Taustat" MENU "Taustaväri" MENU "Musta" WS_BACK '(solid, black)' @@ -180,7 +180,7 @@ "Lippu" WS_BACK '(mdgradient, green, red, white, green)' "Taivas" WS_BACK '(vgradient, blue4, white)' "Liukuväri" END - "Taustakuvat" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Taustakuvat" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Taustat" END "Talleta teema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Talleta kuvakeryhmät" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.fr b/WindowMaker/menu.fr index cdc0bea8..3ad56e18 100644 --- a/WindowMaker/menu.fr +++ b/WindowMaker/menu.fr @@ -217,9 +217,9 @@ "Espace de travail" END "Apparence" MENU - "Thèmes" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Styles" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Jeu d'icônes" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Thèmes" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Styles" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Jeu d'icônes" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Fond d'écran" MENU "Unifié" MENU "Noir" WS_BACK '(solid, black)' @@ -235,7 +235,7 @@ "Drapeau" WS_BACK '(mdgradient, green, red, white, green)' "Ciel" WS_BACK '(vgradient, blue4, white)' "Degradé" END - "Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Images" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Fond d'écran" END "Sauver le thème" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Nom du theme)" "Sauver le jeu d'icônes" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(Nom du jeu d'icones)" diff --git a/WindowMaker/menu.he b/WindowMaker/menu.he index 783d1bcd..03b3066c 100644 --- a/WindowMaker/menu.he +++ b/WindowMaker/menu.he @@ -161,9 +161,9 @@ "äãåáò áçøî" END "äàøî" MENU - "Themes" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "úåðåðâñ" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "íéðå÷ééà èñ" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Themes" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "úåðåðâñ" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "íéðå÷ééà èñ" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "ò÷ø" MENU "Solid" MENU "øåçù" WS_BACK '(solid, black)' @@ -179,7 +179,7 @@ "Flag" WS_BACK '(vdgradient, blue, white, blue)' "Sky" WS_BACK '(vgradient, blue4, white)' "Gradient" END - "Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Images" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "ò÷ø" END "Save Theme" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Save IconSet" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.hr b/WindowMaker/menu.hr index eee00642..1b05b4fb 100644 --- a/WindowMaker/menu.hr +++ b/WindowMaker/menu.hr @@ -163,9 +163,9 @@ "Radni prostor" END "Izgled" MENU - "Teme" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Stilovi" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Setovi Ikona" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Teme" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stilovi" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Setovi Ikona" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Pozadina" MENU "Boja" MENU "Crna" WS_BACK '(solid, black)' @@ -181,7 +181,7 @@ "Zastava" WS_BACK '(mdgradient, green, red, white, green)' "Nebo" WS_BACK '(vgradient, blue4, white)' "Preljev" END - "Slike" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Slike" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Pozadina" END "Snimi temu" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Snimi set ikona" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.hu b/WindowMaker/menu.hu new file mode 100644 index 00000000..4736dac3 --- /dev/null +++ b/WindowMaker/menu.hu @@ -0,0 +1,155 @@ +/* + * WindowMaker Fomenu konfiguracioja + * + * Szintakszis: + * + * [SHORTCUT <Shortcut>] <Command> <Parameters> + * + * <Title> egy szoveg, amelyet cimkent kell hasznalni. Ha tartalmaz space-t, + * akkor idezojelbe ("... ...") kell tenni. + * + * <Command> az itt kovetkezo utasitasok valamelyike: + * MENU - kezdi a/az (al)menudefiniciot + * END - befejezi a/az (al)menudefiniciot + * WORKSPACE_MENU - a munkafelulet kezelesehez almenuket illeszt be + * EXEC <program> - egy kulso programot indit el + * EXIT - kilepes az ablakmanagerbol + * RESTART [<window manager>] - ujrainditja a WindowMaker-t vagy elindit + * egy ablakmanagert + * REFRESH - a kepernyo tartalmat frissiti + * ARRANGE_ICONS - a munkafelulet ikonjait ujrarendezi + * SHUTDOWN - minden alkalmazast bezar + * SHOW_ALL - minden alkalmazast visszahoz a munkafeluletre + * HIDE_OTHERS - a munkafeluleten (a pillanatnyilag aktiv kivetelevel) + * minden ablakot elrejt + * + * <Parameters> a vegrehajthato program + * + * ** EXEC parancssor leirasa + * %s - a megadott helyre beszurja a kijelolt szoveget. Ha nincs szoveg + * kijelolve, a parancs torlodik. + * %a(message) - megnyit egy beviteli mezot a megadott szoveggel + * %w - a megadott helyre beilleszti az aktualis ablak ID-jet. Ha nincs semmi + * kijelolve, akkor nem illeszt be semmit. + * + * A % illetve " jeleket hatastalanitani lehet a \ jellel. + * Peldaul: xterm -T "\"Hello World\"" + * + * Minden MENU utasitashoz kell egy END utasitasnak tartoznia. + * + * Peldaul: + * + * "Test" MENU + * "XTerm" EXEC xterm + * "XView apps" OPEN_MENU "/usr/openwin/bin" + * "X11 apps" OPEN_MENU /usr/X11/bin ~/bin/X11 + * "Background" OPEN_MENU ~/images /usr/share/images WITH wmsetbg -u -t + * "Style" OPEN_MENU style.menu + * "Test" END + */ + +#include "wmmacros" + +"Alkalmazasok" MENU + "Informacio" MENU + "Informacios..." INFO_PANEL + "Jogi..." LEGAL_PANEL + "Rendszer konzol" EXEC xconsole + "Rendszer kihasznaltsag" EXEC xosview || xload + "Process lista" EXEC xterm -e top + "Manual bongeszo" EXEC xman + "Informacio" END + "XTerminal" EXEC xterm -sb + "Rxvt" EXEC rxvt -bg black -fg white -fn fixed + "Munkafeluletek" WORKSPACE_MENU + "Alkalmazasok" MENU + "Grafikai" MENU + "Gimp" EXEC gimp >/dev/null + "XV" EXEC xv + "XPaint" EXEC xpaint + "XFig" EXEC xfig + "Grafikai" END + "X File Manager" EXEC xfm + "OffiX Files" EXEC files + "LyX" EXEC lyx + "Netscape" EXEC netscape + "Ghostview" EXEC ghostview %a(Enter file to view) + "Acrobat" EXEC /usr/local/Acrobat3/bin/acroread %a(Enter PDF to view) + "TkDesk" EXEC tkdesk + "Alkalmazasok" END + "Szerkesztok" MENU + "XFte" EXEC xfte + "XEmacs" EXEC xemacs || emacs + "XJed" EXEC xjed + "NEdit" EXEC nedit + "Xedit" EXEC xedit + "VI" EXEC xterm -e vi + "Szerkesztok" END + "Egyeb" MENU + "Xmcd" EXEC xmcd 2> /dev/null + "Xplaycd" EXEC xplaycd + "Xmixer" EXEC xmixer + "Egyeb" END + "Kellekek" MENU + "Szamologep" EXEC xcalc + "Ablak jellemzok" EXEC xprop | xmessage -center -title 'xprop' -file - + "Betutipus" EXEC xfontsel + "Terminal emulacio" EXEC xminicom + "Nagyito" EXEC xmag + "Colormap" EXEC xcmap + "XKill" EXEC xkill + "Ora" EXEC asclock -shape + "Vagolap" EXEC xclipboard + "Kellekek" END + + "Valogatas" MENU + "Masolas" EXEC echo '%s' | wxcopy + "Level iras" EXEC xterm -name mail -T "Pine" -e pine %s + "Navigator" EXEC netscape %s + "Kereses a Manualban" EXEC MANUAL_SEARCH(%s) + "Valogatas" END + + "Munkafelulet" MENU + "Elrejtes" HIDE_OTHERS + "Mindent mutat" SHOW_ALL + "Ikonok elrendezese" ARRANGE_ICONS + "Frissites" REFRESH + "Zarolas" EXEC xlock -allowroot -usefirst + "Session jellemzok mentese" SAVE_SESSION + "Session jellemzok torlese" CLEAR_SESSION + "Munkafelulet" END + + "Megjelenites" MENU + "Temak" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stilusok" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Ikon beallitasok" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Hatter" MENU + "Szolid" MENU + "Fekete" WS_BACK '(solid, black)' + "Kek" WS_BACK '(solid, "#505075")' + "Indigo" WS_BACK '(solid, "#243e6c")' + "Sotetkek" WS_BACK '(solid, "#180090")' + "Lila" WS_BACK '(solid, "#554466")' + "Buza" WS_BACK '(solid, "wheat4")' + "Sotetszurke" WS_BACK '(solid, "#333340")' + "Voros" WS_BACK '(solid, "#400020")' + "Szolid" END + "Gradiens" MENU + "Halvany" WS_BACK '(mdgradient, green, red, white, green)' + "Egkek" WS_BACK '(vgradient, blue4, white)' + "Gradiens" END + "Kepek" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Hatter" END + "Temak mentese" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" + "Ikonbeallitasok mentese" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" + "Megjelenites" END + + "Kilepes" MENU + "Ujrainditas" RESTART + "AfterStep inditasa" RESTART afterstep + "Kilepes..." EXIT + "Kilepes a sessionbol..." SHUTDOWN + "Kilepes" END +"Alkalmazasok" END + + diff --git a/WindowMaker/menu.ja b/WindowMaker/menu.ja index 3f20a5b0..1811f42a 100644 --- a/WindowMaker/menu.ja +++ b/WindowMaker/menu.ja @@ -168,9 +168,9 @@ "¥ï¡¼¥¯¥¹¥Ú¡¼¥¹" END "³°´Ñ" MENU - "¥Æ¡¼¥Þ" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "¥¹¥¿¥¤¥ë" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "¥¢¥¤¥³¥ó½¸" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "¥Æ¡¼¥Þ" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "¥¹¥¿¥¤¥ë" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "¥¢¥¤¥³¥ó½¸" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "ÇØ·Ê" MENU "¥½¥ê¥Ã¥É" MENU "Black" WS_BACK '(solid, black)' @@ -186,7 +186,7 @@ "Flag" WS_BACK '(mdgradient, green, red, white, green)' "Sky" WS_BACK '(vgradient, blue4, white)' "¥°¥é¥Ç¡¼¥·¥ç¥ó" END - "¥¤¥á¡¼¥¸" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "¥¤¥á¡¼¥¸" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "ÇØ·Ê" END "¸½ºß¤ÎÀßÄê¤ò¥Æ¡¼¥Þ¤È¤·¤Æ¥»¡¼¥Ö" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "¸½ºß¤Î¥¢¥¤¥³¥ó½¸¤ò¥»¡¼¥Ö" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.ko b/WindowMaker/menu.ko index 315613f3..d8cb049e 100644 --- a/WindowMaker/menu.ko +++ b/WindowMaker/menu.ko @@ -172,9 +172,9 @@ "ÀÛ¾÷°ø°£" END "Appearance" MENU - "Å׸¶" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "½ºÅ¸ÀÏ" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "¾ÆÀÌÄÜ ¼¼Æ®" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Å׸¶" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "½ºÅ¸ÀÏ" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "¾ÆÀÌÄÜ ¼¼Æ®" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "¹è°æÈ­¸é" MENU "Solid" MENU "°ËÀº»ö" WS_BACK '(solid, black)' @@ -190,7 +190,7 @@ "Flag" WS_BACK '(mdgradient, green, red, white, green)' "Sky" WS_BACK '(vgradient, blue4, white)' "Gradient" END - "Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Images" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "¹è°æÈ­¸é" END "Å׸¶ ÀúÀå" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "¾ÆÀÌÄܼ¼Æ® ÀúÀå" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.no b/WindowMaker/menu.no index f8a10fef..c1581447 100644 --- a/WindowMaker/menu.no +++ b/WindowMaker/menu.no @@ -162,9 +162,9 @@ "Arbeidsområder" END "Utseende" MENU - "Temaer" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Stiler" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Ikon set" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Temaer" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stiler" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Ikon set" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Bakgrunn" MENU "Ensfarget" MENU "Svart" WS_BACK '(solid, black)' @@ -178,7 +178,7 @@ "Flagg" WS_BACK '(mgradient, green, red, white, green)' "Himmel" WS_BACK '(vgradient, blue4, white)' "Overganger" END - "Bilder" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/BackGrounds WITH wmsetbg -u -t + "Bilder" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/BackGrounds WITH wmsetbg -u -t "Bakgrunn" END "Lagre Tema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Lagre Ikonsett" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.pt b/WindowMaker/menu.pt index 599231a3..d9eec573 100644 --- a/WindowMaker/menu.pt +++ b/WindowMaker/menu.pt @@ -66,8 +66,8 @@ * // subdiretórios e arquivos legíveis neles em ordem alfabética, * // usando o comando para executar cada arquivo. * - * OPEN_MENU /algum/dir [/algum/outro/dir ...] WITH comando -opções - * + * OPEN_MENU [-noext] /algum/dir [/algum/outro/dir ...] WITH comando -opções + * * * <Parâmetros> é o programa a ser executado. * @@ -171,9 +171,9 @@ "Área de Trabalho" END "Aparência" MENU - "Temas" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Estilos" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Conjunto de Ícones" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Temas" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Estilos" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Conjunto de Ícones" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Papéis de Parede" MENU "Sólido" MENU "Preto" WS_BACK '(solid, black)' @@ -189,7 +189,7 @@ "Bandeira" WS_BACK '(mdgradient, green, green, yellow)' "Céu" WS_BACK '(vgradient, blue4, white)' "Degradé" END - "Imagens" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Imagens" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Papéis de Parede" END "Salvar Tema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Nome do Tema)" "Salvar Configuração de Ícones" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(Nome do Conjunto de Ícones)" diff --git a/WindowMaker/menu.se b/WindowMaker/menu.se index 0b42dbc8..8588e8d7 100644 --- a/WindowMaker/menu.se +++ b/WindowMaker/menu.se @@ -171,9 +171,9 @@ "Arbetsbord" END "Utseende" MENU - "Teman" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Stilar" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Ikonuppsättningar" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Teman" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stilar" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Ikonuppsättningar" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Bakgrund" MENU "Enfärgat" MENU "Svart" WS_BACK '(solid, black)' @@ -189,7 +189,7 @@ "Flagga" WS_BACK '(mdgradient, green, red, white, green)' "Himmel" WS_BACK '(vgradient, blue4, white)' "Toningar" END - "Bilder" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Bilder" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Bakgrund" END "Spara tema" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Spara ikonuppsättning" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.sl b/WindowMaker/menu.sl index a684c6c2..6a2e63c5 100644 --- a/WindowMaker/menu.sl +++ b/WindowMaker/menu.sl @@ -170,9 +170,9 @@ "Delovni prostor" END "Izgled" MENU - "Teme" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Stili" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Zbirke ikon" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Teme" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Stili" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Zbirke ikon" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Odzadje" MENU "Barva" MENU "Èrna" WS_BACK '(solid, black)' @@ -188,7 +188,7 @@ "Zastava" WS_BACK '(mdgradient, green, red, white, green)' "Nebo" WS_BACK '(vgradient, blue4, white)' "Preliv" END - "Slike" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Slike" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Odzadje" END "Shrani temo" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Shrani zbirko ikon" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/menu.tr b/WindowMaker/menu.tr index 63c2c926..e7140c09 100644 --- a/WindowMaker/menu.tr +++ b/WindowMaker/menu.tr @@ -156,9 +156,9 @@ "Çalýþma Alaný" END "Görünüm" MENU - "Temalar" OPEN_MENU THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle - "Tarzlar" OPEN_MENU STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle - "Simge Kümeleri" OPEN_MENU ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons + "Temalar" OPEN_MENU -noext THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes WITH setstyle + "Tarzlar" OPEN_MENU -noext STYLES_DIR ~/GNUstep/Library/WindowMaker/Styles WITH setstyle + "Simge Kümeleri" OPEN_MENU -noext ICON_SETS_DIR ~/GNUstep/Library/WindowMaker/IconSets WITH seticons "Arkaplan" MENU "Düz Renk" MENU "Black" WS_BACK '(solid, black)' @@ -174,7 +174,7 @@ "Flag" WS_BACK '(mdgradient, green, red, white, green)' "Sky" WS_BACK '(vgradient, blue4, white)' "Renk Geçiþi" END - "Görüntüler" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t + "Görüntüler" OPEN_MENU -noext BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t "Arkaplan" END "Tema Sakla" EXEC getstyle -t ~/GNUstep/Library/WindowMaker/Themes/"%a(Theme name)" "Simge Kümesi Sakla" EXEC geticonset ~/GNUstep/Library/WindowMaker/IconSets/"%a(IconSet name)" diff --git a/WindowMaker/mkMakefile b/WindowMaker/mkMakefile new file mode 100755 index 00000000..3eeaada0 --- /dev/null +++ b/WindowMaker/mkMakefile @@ -0,0 +1,80 @@ +#!/bin/sh + +# +# Creates a Makefile.am file containing all the stuff to install +# wmaker data +# + + + + +DIRS="Backgrounds Defaults IconSets Icons Pixmaps Styles Themes" + +FILE=Makefile.am + +spit() { + echo -n "$*" >> $FILE +} + +spitln() { + echo "$*" >> $FILE +} + + + +rm -f $FILE + + + + +spitln SUBDIRS = $DIRS +spitln +spitln prefsdatadir = '$(pkgdatadir)' +spitln + + +EXCEPT="Makefile.am Makefile.in Makefile mkMakefile $FILE" + +spit prefsdata_DATA = + +for f in `ls -1|grep -v .in|grep -v \~`; do + ok=1 + for i in $EXCEPT; do + if test "$i" = "$f"; then + ok=0 + break + fi + done + if [ -f $f -a $ok = 1 ]; then + spitln \\ + spit " $f" + fi +done + + +spitln +spitln + +spitln EXTRA_DIST = '$(prefsdata_DATA)' mkMakefile wmmacros.in plmenu.in\\ +spitln " plmenu.fr.in plmenu.hr.in" +spitln +spitln CLEANFILES = wmmacros plmenu +spitln +cat << 'FIM' >> $FILE +wmmacros: $(srcdir)/wmmacros.in ./Makefile + -rm -f wmmacros + + sed -e "s:#pkgdatadir#:$(pkgdatadir):" -e "s://:/:" \ + $(srcdir)/wmmacros.in > wmmacros; \ + chmod 644 wmmacros + +plmenu: $(srcdir)/plmenu.in ./Makefile + -rm -f plmenu + + sed -e "s:#pkgdatadir#:$(pkgdatadir):" -e "s://:/:" \ + $(srcdir)/plmenu.in > plmenu; \ + chmod 644 plmenu + +FIM + + diff --git a/WindowMaker/plmenu b/WindowMaker/plmenu deleted file mode 100644 index a164daa6..00000000 --- a/WindowMaker/plmenu +++ /dev/null @@ -1,103 +0,0 @@ -("Applications", - ("Info", - ("Info Panel...", INFO_PANEL), - ("Legal...", LEGAL_PANEL), - ("System Console", EXEC, "xconsole"), - ("System Load", EXEC, "xosview || xload"), - ("Process List", EXEC, "xterm -e top"), - ("Manual Browser", EXEC, "xman") - ), - ("XTerm", EXEC, "xterm -sb"), - ("Rxvt", EXEC, "rxvt -bg black -fg white -fn fixed"), - ("Workspaces", WORKSPACE_MENU), - ("Applications", - ("Graphics", - ("Gimp", EXEC, "gimp >/dev/null"), - ("XV", EXEC, "xv"), - ("XPaint", EXEC, "xpaint"), - ("XFig", EXEC, "xfig") - ), - ("X File Manager", EXEC, "xfm"), - ("OffiX Files", EXEC, "files"), - ("LyX", EXEC, "lyx"), - ("Netscape", EXEC, "netscape"), - ("Ghostview", EXEC, "ghostview %a(Enter file to view)"), - ("Acrobat", EXEC, "/usr/local/Acrobat3/bin/acroread %a(Enter PDF to view)"), - ("TkDesk", EXEC, "tkdesk") - ), - ("Editors", - ("XFte", EXEC, "xfte"), - ("XEmacs", EXEC, "xemacs || emacs"), - ("XJed", EXEC, "xjed"), - ("NEdit", EXEC, "nedit"), - ("Xedit", EXEC, "xedit"), - ("VI", EXEC, "xterm -e vi") - ), - ("Miscellaneous", - ("Xmcd", EXEC, "xmcd 2> /dev/null"), - ("Xplaycd", EXEC, "xplaycd"), - ("Xmixer", EXEC, "xmixer") - ), - ("Utils", - ("Calculator", EXEC, "xcalc"), - ("Window Properties", EXEC, "xprop | xmessage -center -title 'xprop' -file -"), - ("Font Chooser", EXEC, "xfontsel"), - ("Terminal Emulator", EXEC, "xminicom"), - ("Magnify", EXEC, "xmag"), - ("Colormap", EXEC, "xcmap"), - ("XKill", EXEC, "xkill"), - ("ASClock", EXEC, "asclock -shape"), - ("Clipboard", EXEC, "xclipboard") - ), - ("Selection", - ("Copy", EXEC, "echo '%s' | wxcopy"), - ("Mail To", EXEC, "xterm -name mail -T Pine -e pine %s"), - ("Navigate", EXEC, "netscape %s"), - ("Search in Manual", EXEC, "MANUAL_SEARCH(%s)") - ), - ("Workspace", - ("Hide Others", HIDE_OTHERS), - ("Show All", SHOW_ALL), - ("Arrange Icons", ARRANGE_ICONS), - ("Refresh", REFRESH), - ("Lock", EXEC, "xlock -allowroot -usefirst"), - ("Save Session", SAVE_SESSION), - ("Clear Saved Session", CLEAR_SESSION) - ), - ("Appearance", - ("Themes", OPEN_MENU, "/usr/local/share/WindowMaker/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle"), - ("Styles", OPEN_MENU, "/usr/local/share/WindowMaker/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle"), - ("Icon Sets", OPEN_MENU, "/usr/local/share/WindowMaker/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons"), - ("Background", - ("Solid", - ("Black", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, black)'"), - ("Blue", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#505075\")'"), - ("Indigo", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#243e6c\")'"), - ("Deep Blue", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#180090\")'"), - ("Purple", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#554466\")'"), - ("Wheat", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, wheat4)'"), - ("Dark Gray", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#333340\")'"), - ("Wine", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, \"#400020\")'") - ), - ("Gradient", - ("Sunset", EXEC, "wdwrite WindowMaker WorkspaceBack '(mvgradient, deepskyblue4, black, deepskyblue4, tomato4)'"), - ("Sky", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, blue4, white)'"), - ("Blue Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#7080a5\", \"#101020\")'"), - ("Indigo Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#746ebc\", \"#242e4c\")'"), - ("Purple Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#654c66\", \"#151426\")'"), - ("Wheat Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#a09060\", \"#302010\")'"), - ("Grey Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#636380\", \"#131318\")'"), - ("Wine Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#600040\", \"#180010\")'") - ), - ("Images", OPEN_MENU, "/usr/local/share/WindowMaker/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t") - ), - ("Save Theme", EXEC, "getstyle -t ~/GNUstep/Library/WindowMaker/Themes/\"%a(Theme name)\""), - ("Save IconSet", EXEC, "geticonset ~/GNUstep/Library/WindowMaker/IconSets/\"%a(IconSet name)\"") - ), - ("Exit", - ("Restart", RESTART), - ("Start AfterStep", RESTART, afterstep), - ("Exit...", EXIT), - ("Kill session...", SHUTDOWN) - ) -) diff --git a/WindowMaker/plmenu.fr.in b/WindowMaker/plmenu.fr.in index 58ce9808..f5023f88 100755 --- a/WindowMaker/plmenu.fr.in +++ b/WindowMaker/plmenu.fr.in @@ -65,9 +65,9 @@ ("Effacer la session", CLEAR_SESSION) ), ("Apparence", - ("Thèmes", OPEN_MENU, "#pkgdatadir#/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle"), - ("Styles", OPEN_MENU, "#pkgdatadir#/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle"), - ("Jeu d'icônes", OPEN_MENU, "#pkgdatadir#/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons"), + ("Thèmes", OPEN_MENU, "-noext #pkgdatadir#/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle"), + ("Styles", OPEN_MENU, "-noext #pkgdatadir#/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle"), + ("Jeu d'icônes", OPEN_MENU, "-noext #pkgdatadir#/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons"), ("Fond d'écran", ("Unifié", ("Noir", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, black)'"), @@ -81,7 +81,7 @@ ("Drapeau", EXEC, "wdwrite WindowMaker WorkspaceBack '(mdgradient, green, red, white, green)'"), ("Ciel", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, blue4, white)'") ), - ("Images", OPEN_MENU, "#pkgdatadir#/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t") + ("Images", OPEN_MENU, "-noext #pkgdatadir#/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t") ), ("Sauver le thème", EXEC, "getstyle -t ~/GNUstep/Library/WindowMaker/Themes /\"%a(Theme name)\""), ("Sauver le jeu d'icônes", EXEC, "geticonset ~/GNUstep/Library/WindowMaker/IconSets /\"%a(IconSet name)\"") diff --git a/WindowMaker/plmenu.hr.in b/WindowMaker/plmenu.hr.in index 2e54808a..cd32f8fc 100755 --- a/WindowMaker/plmenu.hr.in +++ b/WindowMaker/plmenu.hr.in @@ -86,17 +86,17 @@ ( Teme, OPEN_MENU, - "/usr/local/share/WindowMaker/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle" + "-noext /usr/local/share/WindowMaker/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle" ), ( Stilovi, OPEN_MENU, - "/usr/local/share/WindowMaker/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle" + "-noext /usr/local/share/WindowMaker/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle" ), ( "Setovi ikona", OPEN_MENU, - "/usr/local/share/WindowMaker/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons" + "-noext /usr/local/share/WindowMaker/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons" ), ( Pozadina, @@ -189,7 +189,7 @@ ( Slike, OPEN_MENU, - "/usr/local/share/WindowMaker/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t" + "-noext /usr/local/share/WindowMaker/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t" ) ), ( diff --git a/WindowMaker/plmenu.in b/WindowMaker/plmenu.in index 5dac28b9..46ed82d2 100755 --- a/WindowMaker/plmenu.in +++ b/WindowMaker/plmenu.in @@ -65,9 +65,9 @@ ("Clear Saved Session", CLEAR_SESSION) ), ("Appearance", - ("Themes", OPEN_MENU, "#pkgdatadir#/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle"), - ("Styles", OPEN_MENU, "#pkgdatadir#/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle"), - ("Icon Sets", OPEN_MENU, "#pkgdatadir#/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons"), + ("Themes", OPEN_MENU, "-noext #pkgdatadir#/Themes ~/GNUstep/Library/WindowMaker/Themes WITH setstyle"), + ("Styles", OPEN_MENU, "-noext #pkgdatadir#/Styles ~/GNUstep/Library/WindowMaker/Styles WITH setstyle"), + ("Icon Sets", OPEN_MENU, "-noext #pkgdatadir#/IconSets ~/GNUstep/Library/WindowMaker/IconSets WITH seticons"), ("Background", ("Solid", ("Black", EXEC, "wdwrite WindowMaker WorkspaceBack '(solid, black)'"), @@ -89,7 +89,7 @@ ("Grey Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#636380\", \"#131318\")'"), ("Wine Shades", EXEC, "wdwrite WindowMaker WorkspaceBack '(vgradient, \"#600040\", \"#180010\")'") ), - ("Images", OPEN_MENU, "#pkgdatadir#/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t") + ("Images", OPEN_MENU, "-noext #pkgdatadir#/Backgrounds ~/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t") ), ("Save Theme", EXEC, "getstyle -t ~/GNUstep/Library/WindowMaker/Themes/\"%a(Theme name)\""), ("Save IconSet", EXEC, "geticonset ~/GNUstep/Library/WindowMaker/IconSets/\"%a(IconSet name)\"") diff --git a/WindowMaker/wmmacros b/WindowMaker/wmmacros deleted file mode 100644 index 9acacfbf..00000000 --- a/WindowMaker/wmmacros +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Some generic macros for WindowMaker configuration files - * - */ - -#ifndef WMMACROS_ -#define WMMACROS_ - -#define HAVE_XLESS - -/* - * WS_BACK - sets the root background texture to VAL - */ -#define WS_BACK EXEC wdwrite WindowMaker WorkspaceBack - -/* - * CLEARROOT - set the root background to nothing - */ -#define CLEARROOT xsetroot - - -/* - * SETSTYLE FILE - loads a style file - */ -#define SETSTYLE EXEC cd $HOME/GNUstep/Library/WindowMaker/Styles; setstyle - - -/* - * - * MANUAL_SEARCH(ITEM) - search manual page for ITEM - * - * You might need to change this according to what's the exit status of your - * man(1). This is for the one that comes with Linux (RedHat) - */ -#ifdef HAVE_XLESS -#define MANUAL_SEARCH(ITEM) \ - if ( man ITEM > /dev/null ); then \ - man ITEM | xless;\ - else \ - xmessage -center -title "Manual Browser" \ - Sorry, but there is no manual page \ - entry for ITEM...;\ - fi -#else -#define MANUAL_SEARCH(ITEM) \ - if ( man ITEM > /dev/null ); then \ - xterm -e man ITEM; \ - else \ - xmessage -center -title "Manual Browser" \ - Sorry, but there is no manual page \ - entry for ITEM...;\ - fi -#endif - - -/* - * Paths to system configuration directories - */ -#define THEMES_DIR /usr/local/share/WindowMaker/Themes -#define STYLES_DIR /usr/local/share/WindowMaker/Styles -#define ICON_SETS_DIR /usr/local/share/WindowMaker/IconSets -#define SOUND_SETS_DIR /usr/local/share/WindowMaker/SoundSets -#define BACKGROUNDS_DIR /usr/local/share/WindowMaker/Backgrounds - - -#define StaticGray 0 -#define GrayScale 1 -#define StaticColor 2 -#define PseudoColor 3 -#define TrueColor 4 -#define DirectColor 5 - -#endif diff --git a/acconfig.h b/acconfig.h index d500b5bf..ff8a36ea 100644 --- a/acconfig.h +++ b/acconfig.h @@ -7,3 +7,8 @@ /* package version */ #undef VERSION +/* define if you want GNOME stuff support */ +#undef GNOME_STUFF + +/* define if you want KDE hint support */ +#undef KWM_HINTS diff --git a/aclocal.m4 b/aclocal.m4 index 0520b196..103a8715 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -111,6 +111,116 @@ else fi AC_SUBST($1)]) + +# serial 9 AM_PROG_LIBTOOL +AC_DEFUN(AM_PROG_LIBTOOL, +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AC_PROG_RANLIB]) +AC_REQUIRE([AM_PROG_LD]) +AC_REQUIRE([AC_PROG_LN_S]) + +# Always use our own libtool. +LIBTOOL='$(top_builddir)/libtool' +AC_SUBST(LIBTOOL) + +dnl Allow the --disable-shared flag to stop us from building shared libs. +AC_ARG_ENABLE(shared, +[ --enable-shared build shared libraries [default=yes]], +test "$enableval" = no && libtool_shared=" --disable-shared", +libtool_shared=) + +dnl Allow the --disable-static flag to stop us from building static libs. +AC_ARG_ENABLE(static, +[ --enable-static build static libraries [default=yes]], +test "$enableval" = no && libtool_static=" --disable-static", +libtool_static=) + +libtool_flags="$libtool_shared$libtool_static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +[case "$host" in +*-*-irix6*) + for f in '-32' '-64' '-cckr' '-n32' '-mips1' '-mips2' '-mips3' '-mips4'; do + if echo " $CC $CFLAGS " | egrep -e "[ ]$f[ ]" > /dev/null; then + LD="${LD-ld} $f" + fi + done + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac] + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| AC_MSG_ERROR([libtool configure failed]) +]) + +# AM_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AM_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +if test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(ac_cv_path_LD, +[case "$LD" in + /*) + ac_cv_path_LD="$LD" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/ld"; then + ac_cv_path_LD="$ac_dir/ld" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + test "$with_gnu_ld" = yes && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + ;; +esac]) +LD="$ac_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_SUBST(LD) +AM_PROG_LD_GNU +]) + +AC_DEFUN(AM_PROG_LD_GNU, +[AC_CACHE_CHECK([whether we are using GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, diff --git a/configure b/configure index 4907b57b..a728f6ce 100755 --- a/configure +++ b/configure @@ -12,12 +12,24 @@ ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" +ac_help="$ac_help + --enable-shared build shared libraries [default=yes]" +ac_help="$ac_help + --enable-static build static libraries [default=yes]" +ac_help="$ac_help --enable-kanji multibyte character support (kanji, Korean etc.)" ac_help="$ac_help --enable-modelock XKB keyboard language status support" ac_help="$ac_help --with-nlsdir=PATH specify where the locale stuff should go " ac_help="$ac_help + --enable-gnome enable stuff needed for GNOME " +ac_help="$ac_help + --enable-kde enable support for KDE window manager (kwm) hints " +ac_help="$ac_help + --enable-lite disable stuff duplicated in KDE/GNOME " +ac_help="$ac_help --with-x use the X Window System" ac_help="$ac_help --disable-shape disable shaped window extension support" @@ -587,7 +599,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:591: checking for a BSD compatible install" >&5 +echo "configure:603: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -640,7 +652,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:644: checking whether build environment is sane" >&5 +echo "configure:656: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile @@ -697,7 +709,7 @@ test "$program_suffix" != NONE && test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:701: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:713: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -726,7 +738,7 @@ fi PACKAGE=WindowMaker -VERSION=0.20.3 +VERSION=0.50.0 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -743,7 +755,7 @@ EOF missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 -echo "configure:747: checking for working aclocal" >&5 +echo "configure:759: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -756,7 +768,7 @@ else fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:760: checking for working autoconf" >&5 +echo "configure:772: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -769,7 +781,7 @@ else fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:773: checking for working automake" >&5 +echo "configure:785: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -782,7 +794,7 @@ else fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:786: checking for working autoheader" >&5 +echo "configure:798: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -795,7 +807,7 @@ else fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:799: checking for working makeinfo" >&5 +echo "configure:811: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. @@ -810,28 +822,13 @@ fi - -#WINGS_VER=0.0.1 -#WRASTER_VER=0.0.1 - - -subdirs="libPropList" - - - - - - - - - # Make sure we can run config.sub. if $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:835: checking host system type" >&5 +echo "configure:832: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -851,12 +848,10 @@ host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 - - # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:860: checking for $ac_word" >&5 +echo "configure:855: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -885,7 +880,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:889: checking for $ac_word" >&5 +echo "configure:884: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -933,7 +928,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:937: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:932: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -943,11 +938,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <<EOF -#line 947 "configure" +#line 942 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -967,12 +962,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:971: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:966: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:976: checking whether we are using GNU C" >&5 +echo "configure:971: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -981,7 +976,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:985: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -996,7 +991,7 @@ if test $ac_cv_prog_gcc = yes; then ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1000: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:995: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1023,8 +1018,222 @@ else test "${CFLAGS+set}" = set || CFLAGS="-g" fi +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1025: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +if test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1061: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1064: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$LD" in + /*) + ac_cv_path_LD="$LD" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/ld"; then + ac_cv_path_LD="$ac_dir/ld" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + test "$with_gnu_ld" = yes && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } + +echo $ac_n "checking whether we are using GNU ld""... $ac_c" 1>&6 +echo "configure:1103: checking whether we are using GNU ld" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 + + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1119: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + + + + + +# Always use our own libtool. +LIBTOOL='$(top_builddir)/libtool' + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + test "$enableval" = no && libtool_shared=" --disable-shared" +else + libtool_shared= +fi + + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + test "$enableval" = no && libtool_static=" --disable-static" +else + libtool_static= +fi + + +libtool_flags="$libtool_shared$libtool_static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$host" in +*-*-irix6*) + for f in '-32' '-64' '-cckr' '-n32' '-mips1' '-mips2' '-mips3' '-mips4'; do + if echo " $CC $CFLAGS " | egrep -e "[ ]$f[ ]" > /dev/null; then + LD="${LD-ld} $f" + fi + done + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + + + +subdirs="libPropList" + + + + + + + + + +# Make sure we can run config.sub. +if $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:1214: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`$ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`$ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + + + echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1028: checking for POSIXized ISC" >&5 +echo "configure:1237: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1047,7 +1256,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1051: checking for $ac_word" >&5 +echo "configure:1260: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1076,7 +1285,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1080: checking for $ac_word" >&5 +echo "configure:1289: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1124,7 +1333,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1128: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1337: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1134,11 +1343,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <<EOF -#line 1138 "configure" +#line 1347 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1158,12 +1367,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1162: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1371: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1167: checking whether we are using GNU C" >&5 +echo "configure:1376: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1172,7 +1381,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1187,7 +1396,7 @@ if test $ac_cv_prog_gcc = yes; then ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1191: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1400: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1215,7 +1424,7 @@ else fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:1219: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:1428: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1241,35 +1450,7 @@ else SET_MAKE="MAKE=${MAKE-make}" fi -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1248: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - +#AC_PROG_RANLIB # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -1281,7 +1462,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1285: checking for a BSD compatible install" >&5 +echo "configure:1466: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1331,7 +1512,7 @@ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1335: checking whether ln -s works" >&5 +echo "configure:1516: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1352,7 +1533,7 @@ else fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1356: checking how to run the C preprocessor" >&5 +echo "configure:1537: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1367,13 +1548,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 1371 "configure" +#line 1552 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1558: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1384,13 +1565,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 1388 "configure" +#line 1569 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1575: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1414,13 +1595,13 @@ echo "$ac_t""$CPP" 1>&6 if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:1418: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:1599: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext <<EOF -#line 1424 "configure" +#line 1605 "configure" #include "confdefs.h" #include <sgtty.h> Autoconf TIOCGETP @@ -1438,7 +1619,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext <<EOF -#line 1442 "configure" +#line 1623 "configure" #include "confdefs.h" #include <termio.h> Autoconf TCGETA @@ -1462,12 +1643,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:1466: checking return type of signal handlers" >&5 +echo "configure:1647: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1471 "configure" +#line 1652 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -1484,7 +1665,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:1488: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -1503,12 +1684,12 @@ EOF echo $ac_n "checking for vprintf""... $ac_c" 1>&6 -echo "configure:1507: checking for vprintf" >&5 +echo "configure:1688: checking for vprintf" >&5 if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1512 "configure" +#line 1693 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char vprintf(); below. */ @@ -1531,7 +1712,7 @@ vprintf(); ; return 0; } EOF -if { (eval echo configure:1535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_vprintf=yes" else @@ -1555,12 +1736,12 @@ fi if test "$ac_cv_func_vprintf" != yes; then echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 -echo "configure:1559: checking for _doprnt" >&5 +echo "configure:1740: checking for _doprnt" >&5 if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1564 "configure" +#line 1745 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _doprnt(); below. */ @@ -1583,7 +1764,7 @@ _doprnt(); ; return 0; } EOF -if { (eval echo configure:1587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func__doprnt=yes" else @@ -1610,19 +1791,19 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:1614: checking for working alloca.h" >&5 +echo "configure:1795: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1619 "configure" +#line 1800 "configure" #include "confdefs.h" #include <alloca.h> int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:1626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -1643,12 +1824,12 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:1647: checking for alloca" >&5 +echo "configure:1828: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1652 "configure" +#line 1833 "configure" #include "confdefs.h" #ifdef __GNUC__ @@ -1671,7 +1852,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -1703,12 +1884,12 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:1707: checking whether alloca needs Cray hooks" >&5 +echo "configure:1888: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1712 "configure" +#line 1893 "configure" #include "confdefs.h" #if defined(CRAY) && ! defined(CRAY2) webecray @@ -1733,12 +1914,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1737: checking for $ac_func" >&5 +echo "configure:1918: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1742 "configure" +#line 1923 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1761,7 +1942,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1788,7 +1969,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:1792: checking stack direction for C alloca" >&5 +echo "configure:1973: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1796,7 +1977,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <<EOF -#line 1800 "configure" +#line 1981 "configure" #include "confdefs.h" find_stack_direction () { @@ -1815,7 +1996,7 @@ main () exit (find_stack_direction() < 0); } EOF -if { (eval echo configure:1819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -1839,12 +2020,12 @@ fi for ac_func in gethostname gettimeofday select poll strerror strncasecmp setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1843: checking for $ac_func" >&5 +echo "configure:2024: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1848 "configure" +#line 2029 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1867,7 +2048,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1902,7 +2083,7 @@ if test "x$CPP_PATH" = x; then # Extract the first word of "cpp", so it can be a program name with args. set dummy cpp; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1906: checking for $ac_word" >&5 +echo "configure:2087: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CPP_PATH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1960,12 +2141,12 @@ INTLIBS="" echo $ac_n "checking for gettext""... $ac_c" 1>&6 -echo "configure:1964: checking for gettext" >&5 +echo "configure:2145: checking for gettext" >&5 if eval "test \"`echo '$''{'ac_cv_func_gettext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1969 "configure" +#line 2150 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gettext(); below. */ @@ -1988,7 +2169,7 @@ gettext(); ; return 0; } EOF -if { (eval echo configure:1992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_gettext=yes" else @@ -2006,7 +2187,7 @@ if eval "test \"`echo '$ac_cv_func_'gettext`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 -echo "configure:2010: checking for gettext in -lintl" >&5 +echo "configure:2191: checking for gettext in -lintl" >&5 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2014,7 +2195,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <<EOF -#line 2018 "configure" +#line 2199 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2025,7 +2206,7 @@ int main() { gettext() ; return 0; } EOF -if { (eval echo configure:2029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2052,7 +2233,7 @@ fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2056: checking for $ac_word" >&5 +echo "configure:2237: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2156,7 +2337,7 @@ if test "$enable_kanji" = yes; then case $host_os in freebsd*) echo $ac_n "checking for setlocale in -lxpg4""... $ac_c" 1>&6 -echo "configure:2160: checking for setlocale in -lxpg4" >&5 +echo "configure:2341: checking for setlocale in -lxpg4" >&5 ac_lib_var=`echo xpg4'_'setlocale | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2164,7 +2345,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lxpg4 $LIBS" cat > conftest.$ac_ext <<EOF -#line 2168 "configure" +#line 2349 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2175,7 +2356,7 @@ int main() { setlocale() ; return 0; } EOF -if { (eval echo configure:2179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2237,12 +2418,55 @@ fi + + +# Check whether --enable-gnome or --disable-gnome was given. +if test "${enable_gnome+set}" = set; then + enableval="$enable_gnome" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define GNOME_STUFF 1 +EOF + + gnome_on=yes + fi +fi + + + +# Check whether --enable-kde or --disable-kde was given. +if test "${enable_kde+set}" = set; then + enableval="$enable_kde" + if test x$enableval = xyes; then + cat >> confdefs.h <<\EOF +#define KWM_HINTS 1 +EOF + + kde_on=yes + fi +fi + + + +LITE= +# Check whether --enable-lite or --disable-lite was given. +if test "${enable_lite+set}" = set; then + enableval="$enable_lite" + if test x$enableval = xyes; then + LITE=-DLITE + fi +fi + + + + + # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:2246: checking for X" >&5 +echo "configure:2470: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -2304,12 +2528,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext <<EOF -#line 2308 "configure" +#line 2532 "configure" #include "confdefs.h" #include <$x_direct_test_include> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2537: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -2378,14 +2602,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <<EOF -#line 2382 "configure" +#line 2606 "configure" #include "confdefs.h" int main() { ${x_direct_test_function}() ; return 0; } EOF -if { (eval echo configure:2389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -2491,17 +2715,17 @@ else case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:2495: checking whether -R must be followed by a space" >&5 +echo "configure:2719: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <<EOF -#line 2498 "configure" +#line 2722 "configure" #include "confdefs.h" int main() { ; return 0; } EOF -if { (eval echo configure:2505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_R_nospace=yes else @@ -2517,14 +2741,14 @@ rm -f conftest* else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <<EOF -#line 2521 "configure" +#line 2745 "configure" #include "confdefs.h" int main() { ; return 0; } EOF -if { (eval echo configure:2528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_R_space=yes else @@ -2556,7 +2780,7 @@ rm -f conftest* # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:2560: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:2784: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2564,7 +2788,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet $LIBS" cat > conftest.$ac_ext <<EOF -#line 2568 "configure" +#line 2792 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2575,7 +2799,7 @@ int main() { dnet_ntoa() ; return 0; } EOF -if { (eval echo configure:2579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2597,7 +2821,7 @@ fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:2601: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:2825: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2605,7 +2829,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldnet_stub $LIBS" cat > conftest.$ac_ext <<EOF -#line 2609 "configure" +#line 2833 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2616,7 +2840,7 @@ int main() { dnet_ntoa() ; return 0; } EOF -if { (eval echo configure:2620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2645,12 +2869,12 @@ fi # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:2649: checking for gethostbyname" >&5 +echo "configure:2873: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2654 "configure" +#line 2878 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname(); below. */ @@ -2673,7 +2897,7 @@ gethostbyname(); ; return 0; } EOF -if { (eval echo configure:2677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -2694,7 +2918,7 @@ fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:2698: checking for gethostbyname in -lnsl" >&5 +echo "configure:2922: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2702,7 +2926,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <<EOF -#line 2706 "configure" +#line 2930 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2713,7 +2937,7 @@ int main() { gethostbyname() ; return 0; } EOF -if { (eval echo configure:2717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2743,12 +2967,12 @@ fi # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:2747: checking for connect" >&5 +echo "configure:2971: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2752 "configure" +#line 2976 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect(); below. */ @@ -2771,7 +2995,7 @@ connect(); ; return 0; } EOF -if { (eval echo configure:2775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -2792,7 +3016,7 @@ fi if test $ac_cv_func_connect = no; then echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:2796: checking for connect in -lsocket" >&5 +echo "configure:3020: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2800,7 +3024,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 2804 "configure" +#line 3028 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2811,7 +3035,7 @@ int main() { connect() ; return 0; } EOF -if { (eval echo configure:2815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2835,12 +3059,12 @@ fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:2839: checking for remove" >&5 +echo "configure:3063: checking for remove" >&5 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2844 "configure" +#line 3068 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove(); below. */ @@ -2863,7 +3087,7 @@ remove(); ; return 0; } EOF -if { (eval echo configure:2867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_remove=yes" else @@ -2884,7 +3108,7 @@ fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:2888: checking for remove in -lposix" >&5 +echo "configure:3112: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2892,7 +3116,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix $LIBS" cat > conftest.$ac_ext <<EOF -#line 2896 "configure" +#line 3120 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2903,7 +3127,7 @@ int main() { remove() ; return 0; } EOF -if { (eval echo configure:2907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2927,12 +3151,12 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:2931: checking for shmat" >&5 +echo "configure:3155: checking for shmat" >&5 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2936 "configure" +#line 3160 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat(); below. */ @@ -2955,7 +3179,7 @@ shmat(); ; return 0; } EOF -if { (eval echo configure:2959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else @@ -2976,7 +3200,7 @@ fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:2980: checking for shmat in -lipc" >&5 +echo "configure:3204: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2984,7 +3208,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lipc $LIBS" cat > conftest.$ac_ext <<EOF -#line 2988 "configure" +#line 3212 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2995,7 +3219,7 @@ int main() { shmat() ; return 0; } EOF -if { (eval echo configure:2999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3028,7 +3252,7 @@ fi # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 -echo "configure:3032: checking for IceConnectionNumber in -lICE" >&5 +echo "configure:3256: checking for IceConnectionNumber in -lICE" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3036,7 +3260,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lICE $LIBS" cat > conftest.$ac_ext <<EOF -#line 3040 "configure" +#line 3264 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3047,7 +3271,7 @@ int main() { IceConnectionNumber() ; return 0; } EOF -if { (eval echo configure:3051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3079,7 +3303,7 @@ XLFLAGS="$X_LIBS" XLIBS="$X_EXTRA_LIBS -lX11" echo $ac_n "checking for _Xsetlocale in -lX11""... $ac_c" 1>&6 -echo "configure:3083: checking for _Xsetlocale in -lX11" >&5 +echo "configure:3307: checking for _Xsetlocale in -lX11" >&5 ac_lib_var=`echo X11'_'_Xsetlocale | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3087,7 +3311,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lX11 $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3091 "configure" +#line 3315 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3098,7 +3322,7 @@ int main() { _Xsetlocale() ; return 0; } EOF -if { (eval echo configure:3102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3135,7 +3359,7 @@ added_xext=no if test "$shape" = yes; then echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6 -echo "configure:3139: checking for XShapeSelectInput in -lXext" >&5 +echo "configure:3363: checking for XShapeSelectInput in -lXext" >&5 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3143,7 +3367,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lXext $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3147 "configure" +#line 3371 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3154,7 +3378,7 @@ int main() { XShapeSelectInput() ; return 0; } EOF -if { (eval echo configure:3158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3193,7 +3417,7 @@ fi if test "$shm" = yes; then echo $ac_n "checking for XShmAttach in -lXext""... $ac_c" 1>&6 -echo "configure:3197: checking for XShmAttach in -lXext" >&5 +echo "configure:3421: checking for XShmAttach in -lXext" >&5 ac_lib_var=`echo Xext'_'XShmAttach | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3201,7 +3425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lXext $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3205 "configure" +#line 3429 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3212,7 +3436,7 @@ int main() { XShmAttach() ; return 0; } EOF -if { (eval echo configure:3216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3236,12 +3460,12 @@ fi if test "$ok" = yes; then echo $ac_n "checking for shmget""... $ac_c" 1>&6 -echo "configure:3240: checking for shmget" >&5 +echo "configure:3464: checking for shmget" >&5 if eval "test \"`echo '$''{'ac_cv_func_shmget'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3245 "configure" +#line 3469 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmget(); below. */ @@ -3264,7 +3488,7 @@ shmget(); ; return 0; } EOF -if { (eval echo configure:3268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_shmget=yes" else @@ -3340,7 +3564,7 @@ fi if test "$xpm" = yes; then echo $ac_n "checking for XpmCreatePixmapFromData in -lXpm""... $ac_c" 1>&6 -echo "configure:3344: checking for XpmCreatePixmapFromData in -lXpm" >&5 +echo "configure:3568: checking for XpmCreatePixmapFromData in -lXpm" >&5 ac_lib_var=`echo Xpm'_'XpmCreatePixmapFromData | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3348,7 +3572,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lXpm $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3352 "configure" +#line 3576 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3359,7 +3583,7 @@ int main() { XpmCreatePixmapFromData() ; return 0; } EOF -if { (eval echo configure:3363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3386,17 +3610,17 @@ fi CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" ac_safe=`echo "X11/xpm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/xpm.h""... $ac_c" 1>&6 -echo "configure:3390: checking for X11/xpm.h" >&5 +echo "configure:3614: checking for X11/xpm.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3395 "configure" +#line 3619 "configure" #include "confdefs.h" #include <X11/xpm.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3624: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3433,49 +3657,6 @@ fi -echo $ac_n "checking for gzread in -lz""... $ac_c" 1>&6 -echo "configure:3438: checking for gzread in -lz" >&5 -ac_lib_var=`echo z'_'gzread | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lz $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $LIBS" -cat > conftest.$ac_ext <<EOF -#line 3446 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gzread(); - -int main() { -gzread() -; return 0; } -EOF -if { (eval echo configure:3457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - zlib=yes -else - echo "$ac_t""no" 1>&6 -zlib=no -fi - - - png=yes # Check whether --enable-png or --disable-png was given. if test "${enable_png+set}" = set; then @@ -3487,9 +3668,9 @@ fi -if test "$png" = yes -a "$zlib" = yes ; then +if test "$png" = yes ; then echo $ac_n "checking for png_get_valid in -lpng""... $ac_c" 1>&6 -echo "configure:3493: checking for png_get_valid in -lpng" >&5 +echo "configure:3674: checking for png_get_valid in -lpng" >&5 ac_lib_var=`echo png'_'png_get_valid | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3497,7 +3678,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpng $GFX_INC_PATH $GFXLFLAGS $XLFLAGS -lz -lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 3501 "configure" +#line 3682 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3508,7 +3689,7 @@ int main() { png_get_valid() ; return 0; } EOF -if { (eval echo configure:3512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3535,17 +3716,17 @@ fi CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for png.h""... $ac_c" 1>&6 -echo "configure:3539: checking for png.h" >&5 +echo "configure:3720: checking for png.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3544 "configure" +#line 3725 "configure" #include "confdefs.h" #include <png.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3584,7 +3765,7 @@ fi if test "$jpeg" = yes; then echo $ac_n "checking for jpeg_destroy_compress in -ljpeg""... $ac_c" 1>&6 -echo "configure:3588: checking for jpeg_destroy_compress in -ljpeg" >&5 +echo "configure:3769: checking for jpeg_destroy_compress in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_destroy_compress | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3592,7 +3773,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ljpeg $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3596 "configure" +#line 3777 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3603,7 +3784,7 @@ int main() { jpeg_destroy_compress() ; return 0; } EOF -if { (eval echo configure:3607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3629,12 +3810,12 @@ fi my_old_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" cat > conftest.$ac_ext <<EOF -#line 3633 "configure" +#line 3814 "configure" #include "confdefs.h" jpeglib.h EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3644,6 +3825,8 @@ else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 + rm -rf conftest* + jpeg_not_found=yes fi rm -f conftest* CPPFLAGS=$my_old_cppflags @@ -3651,7 +3834,7 @@ rm -f conftest* fi -jpeg=yes +gif=yes # Check whether --enable-gif or --disable-gif was given. if test "${enable_gif+set}" = set; then enableval="$enable_gif" @@ -3664,7 +3847,7 @@ fi if test "$gif" = yes; then retry=no echo $ac_n "checking for DGifOpenFileName in -lungif""... $ac_c" 1>&6 -echo "configure:3668: checking for DGifOpenFileName in -lungif" >&5 +echo "configure:3851: checking for DGifOpenFileName in -lungif" >&5 ac_lib_var=`echo ungif'_'DGifOpenFileName | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3672,7 +3855,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lungif $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3676 "configure" +#line 3859 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3683,7 +3866,7 @@ int main() { DGifOpenFileName() ; return 0; } EOF -if { (eval echo configure:3687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3706,7 +3889,7 @@ fi if test "$retry" = yes; then echo $ac_n "checking for DGifOpenFileName in -lgif""... $ac_c" 1>&6 -echo "configure:3710: checking for DGifOpenFileName in -lgif" >&5 +echo "configure:3893: checking for DGifOpenFileName in -lgif" >&5 ac_lib_var=`echo gif'_'DGifOpenFileName | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3714,7 +3897,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgif $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $LIBS" cat > conftest.$ac_ext <<EOF -#line 3718 "configure" +#line 3901 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3725,7 +3908,7 @@ int main() { DGifOpenFileName() ; return 0; } EOF -if { (eval echo configure:3729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3753,17 +3936,17 @@ fi CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" ac_safe=`echo "gif_lib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gif_lib.h""... $ac_c" 1>&6 -echo "configure:3757: checking for gif_lib.h" >&5 +echo "configure:3940: checking for gif_lib.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3762 "configure" +#line 3945 "configure" #include "confdefs.h" #include <gif_lib.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -3813,7 +3996,7 @@ ICONEXT="xpm" if test "$tif" = yes; then my_libname="" echo $ac_n "checking for TIFFGetVersion in -ltiff""... $ac_c" 1>&6 -echo "configure:3817: checking for TIFFGetVersion in -ltiff" >&5 +echo "configure:4000: checking for TIFFGetVersion in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFGetVersion | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3821,7 +4004,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltiff $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $GFXLIBS -lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 3825 "configure" +#line 4008 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3832,7 +4015,7 @@ int main() { TIFFGetVersion() ; return 0; } EOF -if { (eval echo configure:3836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:4019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3855,9 +4038,8 @@ fi unset ac_cv_lib_tiff_TIFFGetVersion if test "$my_libok" = no; then - if test "$zlib" = "yes"; then - echo $ac_n "checking for TIFFGetVersion in -ltiff""... $ac_c" 1>&6 -echo "configure:3861: checking for TIFFGetVersion in -ltiff" >&5 + echo $ac_n "checking for TIFFGetVersion in -ltiff""... $ac_c" 1>&6 +echo "configure:4043: checking for TIFFGetVersion in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFGetVersion | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3865,7 +4047,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltiff $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $GFXLIBS -lz -lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 3869 "configure" +#line 4051 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3876,7 +4058,7 @@ int main() { TIFFGetVersion() ; return 0; } EOF -if { (eval echo configure:3880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:4062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3897,12 +4079,11 @@ else my_libok=no fi - fi fi if test "$my_libok" = no; then echo $ac_n "checking for TIFFGetVersion in -ltiff34""... $ac_c" 1>&6 -echo "configure:3906: checking for TIFFGetVersion in -ltiff34" >&5 +echo "configure:4087: checking for TIFFGetVersion in -ltiff34" >&5 ac_lib_var=`echo tiff34'_'TIFFGetVersion | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3910,7 +4091,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltiff34 $GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $GFXLIBS -lm $LIBS" cat > conftest.$ac_ext <<EOF -#line 3914 "configure" +#line 4095 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3921,7 +4102,7 @@ int main() { TIFFGetVersion() ; return 0; } EOF -if { (eval echo configure:3925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:4106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3949,17 +4130,17 @@ fi CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6 -echo "configure:3953: checking for tiffio.h" >&5 +echo "configure:4134: checking for tiffio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 3958 "configure" +#line 4139 "configure" #include "confdefs.h" #include <tiffio.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -4081,6 +4262,7 @@ wprefsdir=$with_appspath/WPrefs.app + # Check whether --enable-single-icon or --disable-single-icon was given. if test "${enable_single_icon+set}" = set; then enableval="$enable_single_icon" @@ -4096,13 +4278,14 @@ fi + echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:4101: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:4284: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4106 "configure" +#line 4289 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/wait.h> @@ -4118,7 +4301,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -4138,21 +4321,22 @@ EOF fi -for ac_hdr in fcntl.h limits.h sys/ioctl.h sys/time.h sys/types.h libintl.h sys/select.h +for ac_hdr in fcntl.h limits.h sys/ioctl.h sys/time.h sys/types.h\ + libintl.h sys/select.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4146: checking for $ac_hdr" >&5 +echo "configure:4330: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4151 "configure" +#line 4335 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4156: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -4182,12 +4366,12 @@ done echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 -echo "configure:4186: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +echo "configure:4370: checking for sys_siglist declaration in signal.h or unistd.h" >&5 if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4191 "configure" +#line 4375 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -4199,7 +4383,7 @@ int main() { char *msg = *(sys_siglist + 1); ; return 0; } EOF -if { (eval echo configure:4203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes else @@ -4220,12 +4404,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:4224: checking for working const" >&5 +echo "configure:4408: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4229 "configure" +#line 4413 "configure" #include "confdefs.h" int main() { @@ -4274,7 +4458,7 @@ ccp = (char const *const *) p; ; return 0; } EOF -if { (eval echo configure:4278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -4295,12 +4479,12 @@ EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:4299: checking for ANSI C header files" >&5 +echo "configure:4483: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4304 "configure" +#line 4488 "configure" #include "confdefs.h" #include <stdlib.h> #include <stdarg.h> @@ -4308,7 +4492,7 @@ else #include <float.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4312: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -4325,7 +4509,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 4329 "configure" +#line 4513 "configure" #include "confdefs.h" #include <string.h> EOF @@ -4343,7 +4527,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext <<EOF -#line 4347 "configure" +#line 4531 "configure" #include "confdefs.h" #include <stdlib.h> EOF @@ -4364,7 +4548,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext <<EOF -#line 4368 "configure" +#line 4552 "configure" #include "confdefs.h" #include <ctype.h> #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -4375,7 +4559,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:4379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -4399,12 +4583,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:4403: checking for size_t" >&5 +echo "configure:4587: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4408 "configure" +#line 4592 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -4432,12 +4616,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:4436: checking for pid_t" >&5 +echo "configure:4620: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4441 "configure" +#line 4625 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -4465,12 +4649,12 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:4469: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:4653: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 4474 "configure" +#line 4658 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/time.h> @@ -4479,7 +4663,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:4483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -4538,7 +4722,7 @@ if test "$enable_shared" = yes; then fi echo $ac_n "checking for shared library support""... $ac_c" 1>&6 -echo "configure:4542: checking for shared library support" >&5 +echo "configure:4726: checking for shared library support" >&5 test=tmptest$$ cat > $test.c <<EOF @@ -4676,10 +4860,12 @@ ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile po/Makefile util/Makefile test/Makefile wmlib/Makefile \ WINGs/Makefile WINGs/Resources/Makefile src/Makefile src/wconfig.h \ wrlib/Makefile doc/Makefile WindowMaker/Makefile \ - WindowMaker/Defaults/Makefile WindowMaker/Styles/Makefile \ - WindowMaker/Themes/Makefile WindowMaker/Backgrounds/Makefile \ - WindowMaker/Pixmaps/Makefile WindowMaker/Icons/Makefile \ - WindowMaker/IconSets/Makefile \ + WindowMaker/Backgrounds/Makefile WindowMaker/Defaults/Makefile \ + WindowMaker/IconSets/Makefile WindowMaker/Icons/Makefile \ + WindowMaker/Pixmaps/Makefile WindowMaker/Styles/Makefile \ + WindowMaker/Themes/Makefile \ + WindowMaker/Themes/Night.themed/Makefile \ + WindowMaker/Themes/Checker.themed/Makefile \ WPrefs.app/Makefile WPrefs.app/tiff/Makefile WPrefs.app/xpm/Makefile \ WPrefs.app/po/Makefile src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF @@ -4722,7 +4908,6 @@ s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g -s%@subdirs@%$subdirs%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g @@ -4730,7 +4915,10 @@ s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@CC@%$CC%g s%@RANLIB@%$RANLIB%g +s%@LD@%$LD%g s%@LN_S@%$LN_S%g +s%@LIBTOOL@%$LIBTOOL%g +s%@subdirs@%$subdirs%g s%@CPP@%$CPP%g s%@ALLOCA@%$ALLOCA%g s%@CPP_PATH@%$CPP_PATH%g @@ -4741,6 +4929,7 @@ s%@INTLIBS@%$INTLIBS%g s%@NLSDIR@%$NLSDIR%g s%@MOFILES@%$MOFILES%g s%@WPMOFILES@%$WPMOFILES%g +s%@LITE@%$LITE%g s%@X_CFLAGS@%$X_CFLAGS%g s%@X_PRE_LIBS@%$X_PRE_LIBS%g s%@X_LIBS@%$X_LIBS%g @@ -4804,10 +4993,12 @@ cat >> $CONFIG_STATUS <<EOF CONFIG_FILES=\${CONFIG_FILES-"Makefile po/Makefile util/Makefile test/Makefile wmlib/Makefile \ WINGs/Makefile WINGs/Resources/Makefile src/Makefile src/wconfig.h \ wrlib/Makefile doc/Makefile WindowMaker/Makefile \ - WindowMaker/Defaults/Makefile WindowMaker/Styles/Makefile \ - WindowMaker/Themes/Makefile WindowMaker/Backgrounds/Makefile \ - WindowMaker/Pixmaps/Makefile WindowMaker/Icons/Makefile \ - WindowMaker/IconSets/Makefile \ + WindowMaker/Backgrounds/Makefile WindowMaker/Defaults/Makefile \ + WindowMaker/IconSets/Makefile WindowMaker/Icons/Makefile \ + WindowMaker/Pixmaps/Makefile WindowMaker/Styles/Makefile \ + WindowMaker/Themes/Makefile \ + WindowMaker/Themes/Night.themed/Makefile \ + WindowMaker/Themes/Checker.themed/Makefile \ WPrefs.app/Makefile WPrefs.app/tiff/Makefile WPrefs.app/xpm/Makefile \ WPrefs.app/po/Makefile "} EOF @@ -5092,7 +5283,7 @@ fi echo "WFLAGS=\"$LIBPL_INC_PATH -I$prefix/include\"" > WINGs-flags echo "WLIBS=\"-L$exec_prefix/lib -lWINGs -lwraster $LIBPL_LIBS $GFXLIBS -lm\""\ - >> WINGs-flags + | sed -e 's|\$(prefix)|'"$prefix|" >> WINGs-flags @@ -5114,7 +5305,22 @@ echo "Graphic format libraries: $supported_gfx" echo "Sound support: $sound" echo "Translated message files to install: $mof" if test "x$MOFILES" != "x"; then - echo "Installation path of translated messages: $NLSDIR" + echo "Installation path of translated messages: $NLSDIR" | sed -e 's|\$(prefix)|'"$prefix|" +fi +if test x$kde_on != x; then + echo "KDE support enabled" +fi +if test x$LITE != x; then + echo "Duplicated stuff with KDE will be removed" +fi +if test x$gnome_on != x; then + echo "GNOME support enabled" +fi + +if test "$jpeg_not_found" = yes; then +echo "JPEG support will not be included because the JPEG library is" +echo "not installed correctly or was not found. Background images" +echo "from themes will not display as they usually are JPEG files." fi diff --git a/configure.in b/configure.in index 890bd08f..b05d446a 100644 --- a/configure.in +++ b/configure.in @@ -10,13 +10,9 @@ dnl AC_INIT(src/WindowMaker.h) -AM_INIT_AUTOMAKE(WindowMaker, 0.20.3) +AM_INIT_AUTOMAKE(WindowMaker, 0.50.0) - -dnl Shared Library Versions - -#WINGS_VER=0.0.1 -#WRASTER_VER=0.0.1 +AM_PROG_LIBTOOL dnl configure/build bundled libraries @@ -37,7 +33,7 @@ dnl =================== AC_ISC_POSIX AC_PROG_CC AC_PROG_MAKE_SET -AC_PROG_RANLIB +#AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_GCC_TRADITIONAL @@ -209,17 +205,6 @@ if test "x$NLSDIR" = "x"; then fi fi -dnl Put it back once we have some real gnome support... -dnl -dnl AC_ARG_WITH(gnome, -dnl [ --enable-gnome enable support for GNOME extensions ], -dnl [enable_gnome=$withval], [enable_gnome=yes]) -dnl if test "$enable_gnome" = yes; then -dnl GNOME="#define GNOME" -dnl else -dnl GNOME="#undef GNOME" -dnl fi -dnl AC_SUBST(GNOME) AC_SUBST(I18N) AC_SUBST(INTLIBS) @@ -228,6 +213,39 @@ AC_SUBST(MOFILES) AC_SUBST(WPMOFILES) + +dnl Support for various hint things +dnl =============================== + + +AC_ARG_ENABLE(gnome, + [ --enable-gnome enable stuff needed for GNOME ], + [if test x$enableval = xyes; then + AC_DEFINE(GNOME_STUFF) + gnome_on=yes + fi]) + + +AC_ARG_ENABLE(kde, + [ --enable-kde enable support for KDE window manager (kwm) hints ], + [if test x$enableval = xyes; then + AC_DEFINE(KWM_HINTS) + kde_on=yes + fi]) + + +dnl +dnl Disable some stuff that are duplicated in kde +dnl --------------------------------------------- +LITE= +AC_ARG_ENABLE(lite, + [ --enable-lite disable stuff duplicated in KDE/GNOME ], + [if test x$enableval = xyes; then + LITE=-DLITE + fi]) +AC_SUBST(LITE) + + dnl =========================================== dnl Stuff that uses X dnl =========================================== @@ -353,21 +371,16 @@ dnl =============================================== dnl End of stuff that uses X dnl =============================================== -dnl test for zlib -dnl ============= - -AC_CHECK_LIB(z, gzread, zlib=yes, zlib=no, $GFX_INC_PATH $GFXLFLAGS $XLFLAGS) - dnl PNG Support dnl =========== png=yes AC_ARG_ENABLE(png, [ --disable-png disable PNG support through libpng], - png=$enableval, png=yes) + png=$enableval, png=yes, png=no) -if test "$png" = yes -a "$zlib" = yes ; then +if test "$png" = yes ; then AC_CHECK_LIB(png, png_get_valid, my_libok=yes, my_libok=no, $GFX_INC_PATH $GFXLFLAGS $XLFLAGS -lz -lm) @@ -387,7 +400,7 @@ dnl ============ jpeg=yes AC_ARG_ENABLE(jpeg, [ --disable-jpeg disable JPEG support through libjpeg], - jpeg=$enableval, jpeg=yes) + jpeg=$enableval, jpeg=yes, jpeg=no) if test "$jpeg" = yes; then AC_CHECK_LIB(jpeg, jpeg_destroy_compress, my_libok=yes, my_libok=no, @@ -398,7 +411,7 @@ if test "$jpeg" = yes; then CPPFLAGS="$CPPFLAGS $GFX_INC_PATH $XCFLAGS" AC_TRY_CPP(jpeglib.h, [GFXLIBS="$GFXLIBS -ljpeg" GFXFLAGS="$GFXFLAGS -DUSE_JPEG" - supported_gfx="$supported_gfx JPEG"], ) + supported_gfx="$supported_gfx JPEG"], jpeg_not_found=yes) CPPFLAGS=$my_old_cppflags fi fi @@ -409,10 +422,10 @@ dnl ============ dnl dnl giflib uses dangerous function naming... (namespace clashing) dnl -jpeg=yes +gif=yes AC_ARG_ENABLE(gif, [ --disable-gif disable GIF support through libgif or libungif], - gif=$enableval, gif=yes) + gif=$enableval, gif=yes, gif=no) if test "$gif" = yes; then retry=no @@ -446,7 +459,7 @@ dnl TIFF Support dnl ============ AC_ARG_ENABLE(tiff, [ --disable-tiff disable use of TIFF images through libtiff], - tif=$enableval, tif=yes) + tif=$enableval, tif=yes, tif=no) # # TIFF can optionally have JPEG and/or zlib support. Must find out @@ -468,11 +481,9 @@ dnl Retry with zlib dnl unset ac_cv_lib_tiff_TIFFGetVersion if test "$my_libok" = no; then - if test "$zlib" = "yes"; then - AC_CHECK_LIB(tiff, TIFFGetVersion, + AC_CHECK_LIB(tiff, TIFFGetVersion, [my_libok=yes my_libname="-ltiff -lz"], my_libok=no, [$GFX_INC_PATH $GFXLFLAGS $XLFLAGS $XLIBS $GFXLIBS -lz -lm]) - fi fi if test "$my_libok" = no; then @@ -580,6 +591,7 @@ wprefsdir=$with_appspath/WPrefs.app AC_SUBST(wprefsdir) + dnl Enable single appicon per wm instance+class combo -cls dnl ===================================================== AC_ARG_ENABLE(single-icon, @@ -594,11 +606,13 @@ fi, ) AC_SUBST(REDUCE_APPICONS) + dnl Checks for header files. dnl ======================= dnl AC_HEADER_STDC AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h sys/types.h libintl.h sys/select.h) +AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h sys/types.h\ + libintl.h sys/select.h poll.h) @@ -709,10 +723,12 @@ dnl AC_SUBST(DOCTYPES) AC_OUTPUT(Makefile po/Makefile util/Makefile test/Makefile wmlib/Makefile \ WINGs/Makefile WINGs/Resources/Makefile src/Makefile src/wconfig.h \ wrlib/Makefile doc/Makefile WindowMaker/Makefile \ - WindowMaker/Defaults/Makefile WindowMaker/Styles/Makefile \ - WindowMaker/Themes/Makefile WindowMaker/Backgrounds/Makefile \ - WindowMaker/Pixmaps/Makefile WindowMaker/Icons/Makefile \ - WindowMaker/IconSets/Makefile \ + WindowMaker/Backgrounds/Makefile WindowMaker/Defaults/Makefile \ + WindowMaker/IconSets/Makefile WindowMaker/Icons/Makefile \ + WindowMaker/Pixmaps/Makefile WindowMaker/Styles/Makefile \ + WindowMaker/Themes/Makefile \ + WindowMaker/Themes/Night.themed/Makefile \ + WindowMaker/Themes/Checker.themed/Makefile \ WPrefs.app/Makefile WPrefs.app/tiff/Makefile WPrefs.app/xpm/Makefile \ WPrefs.app/po/Makefile ) @@ -725,7 +741,7 @@ dnl echo "WFLAGS=\"$LIBPL_INC_PATH -I$prefix/include\"" > WINGs-flags echo "WLIBS=\"-L$exec_prefix/lib -lWINGs -lwraster $LIBPL_LIBS $GFXLIBS -lm\""\ - >> WINGs-flags + | sed -e 's|\$(prefix)|'"$prefix|" >> WINGs-flags dnl @@ -750,7 +766,22 @@ echo "Graphic format libraries: $supported_gfx" echo "Sound support: $sound" echo "Translated message files to install: $mof" if test "x$MOFILES" != "x"; then - echo "Installation path of translated messages: $NLSDIR" + echo "Installation path of translated messages: $NLSDIR" | sed -e 's|\$(prefix)|'"$prefix|" +fi +if test x$kde_on != x; then + echo "KDE support enabled" +fi +if test x$LITE != x; then + echo "Duplicated stuff with KDE will be removed" +fi +if test x$gnome_on != x; then + echo "GNOME support enabled" +fi + +if test "$jpeg_not_found" = yes; then +echo "JPEG support will not be included because the JPEG library is" +echo "not installed correctly or was not found. Background images" +echo "from themes will not display as they usually are JPEG files." fi diff --git a/doc/Makefile.in b/doc/Makefile.in index fb17a6e4..3aeff285 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -222,6 +225,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/doc/getstyle.1x b/doc/getstyle.1x index b03263c1..0362d116 100644 --- a/doc/getstyle.1x +++ b/doc/getstyle.1x @@ -1,21 +1,40 @@ .\" Hey, Emacs! This is an -*- nroff -*- source file. -.TH getstyle 1x "March 1998" +.TH getstyle 1x "December 1998" .SH NAME -getstyle \- dumps the current Window Maker style related configuration +getstyle \- dumps the current Window Maker style related configuration or +creates a theme pack. .SH SYNOPSIS .B getstyle -[style file] +[[-t] [style file]] +[-p theme name] .SH DESCRIPTION .B getstyle -reads the WindowMaker domain, and dumps the following keys and its -values to stdout or -.I style file -: IconBack, WorkspaceBack, IconBack, TitleJustify, WindowTitleFont, -MenuTitleFont, MenuTextFont, IconTitleFont, ClipTitleFont, DisplayFont, -HighlightColor, HighlightTextColor, ClipTitleColor, CClipTitleColor, -FTitleColor, PTitleColor, UTitleColor, FTitleBack, PTitleBack, UTitleBack, -MenuTitleColor, MenuTextColor, MenuDisabledColor, MenuTitleBack and -MenuTextBack. +can either dump the current Window Maker style related configuration +information to a file/stdout or create a self-contained theme pack. A theme +pack is a directory that contains everything that is needed by a +redistributable theme, includig the style information and pixmaps used by it. + +Note that style information stored in the global configuration of the +system is not read. + +.SH OPTIONS +.TP +.B \-t +dumps theme related information too, which is the root background texture. +This option is always enabled when the \-p option is used. +.TP +.B \-p +creates a theme pack in the directory named by the theme name appended +with the .themed suffix. + +Options that are stored in the style file are: IconBack, WorkspaceBack, +IconBack, TitleJustify, WindowTitleFont, MenuTitleFont, MenuTextFont, +IconTitleFont, DisplayFont, HighlightColor, HighlightTextColor, +IconTitleColor, CClipTitleColor, IconBackColor, FTitleColor, PTitleColor, +UTitleColor, FTitleBack, PTitleBack, UTitleBack, MenuTitleColor, +MenuTextColor, MenuDisabledColor, MenuTitleBack and MenuTextBack. + + .SH ENVIRONMENT .IP GNUSTEP_USER_ROOT specifies the initial path for the Defaults directory. "Defaults/" is diff --git a/doc/setstyle.1x b/doc/setstyle.1x index c630670e..fb7c0128 100644 --- a/doc/setstyle.1x +++ b/doc/setstyle.1x @@ -1,16 +1,20 @@ .\" Hey, Emacs! This is an -*- nroff -*- source file. -.TH setstyle 1x "March 1998" +.TH setstyle 1x "December 1998" .SH NAME -setstyle \- set style related options for Window Maker +setstyle \- set style related options for Window Maker or loads a theme .SH SYNOPSIS .B setstyle +.I "[-nofonts]" .I stylefile .SH DESCRIPTION .B setstyle reads .I stylefile and writes its contents to the WindowMaker domain, efectively setting -the Window Maker style. +the Window Maker style. If the supplied path is a directory, it will +be treated as a theme pack and it will be loaded appropriately. If the +.B \-nofonts +flag is specified, font related options in the style file will be ignored. .SH ENVIRONMENT .IP GNUSTEP_USER_ROOT specifies the initial path for the Defaults directory. "Defaults/" is diff --git a/ltconfig b/ltconfig new file mode 100755 index 00000000..7bba4e6b --- /dev/null +++ b/ltconfig @@ -0,0 +1,1064 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# When updating this script, search for LINENUM and fix line number refs. +# Generated automatically from ltconfig.in by configure. +# Copyright (C) 1996, 1997, Free Software Foundation, Inc. +# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A lot of this script is taken from autoconf-2.10. + +# The name of this program. +progname=`echo "$0" | sed 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.0 +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking. +enable_static=yes +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +verify_host=yes +with_gcc=no +with_gnu_ld=no + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_RANLIB="$RANLIB" + +test -z "$AR" && AR=ar + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <<EOM +Usage: $progname [OPTION]... LTMAIN [HOST] + +Generate a system-specific libtool script. + + --disable-shared do not build shared libraries + --disable-static do not build static libraries + --help display this help and exit + --no-verify do not verify that HOST is a valid host type + --quiet same as \`--silent' + --silent don't print informational messages + --srcdir=DIR find \`config.guess' in DIR + --version output version information and exit + --with-gcc assume that the GNU C compiler will be used + --with-gnu-ld assume that the C compiler uses the GNU linker + +LTMAIN is the \`ltmain.sh' shell script fragment that provides basic libtool +functionality. + +HOST is the canonical host system name [default=guessed]. +EOM + exit 0 + ;; + + --disable-shared) enable_shared=no ;; + + --disable-static) enable_static=no ;; + + --quiet | --silent) silent=yes ;; + + --srcdir) prev=srcdir ;; + --srcdir=*) srcdir="$optarg" ;; + + --no-verify) verify_host=no ;; + + --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION"; exit 0 ;; + + --with-gcc) with_gcc=yes ;; + --with-gnu-ld) with_gnu_ld=yes ;; + + -*) + echo "$progname: unrecognized option \`$option'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# FIXME This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test -f "$ltmain"; then : +else + echo "$progname: warning: \`$ltmain' does not exist" 1>&2 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to ltmain.sh. + srcdir=`echo "$ltmain" | sed 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$ac_config_sub $host_alias` + echo "$ac_t""$host" 1>&6 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host" in +*-*-linux-gnu*) ;; +*-*-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo $ac_t "$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds;\$RANLIB \$oldlib" +fi + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + IFS="$save_ifs" + test -z "$dir" && dir=. + if test -f $dir/gcc; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + + trap "$rm conftest.c; exit 1" 1 2 15 + $rm conftest.c + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF + # LINENUM + if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo $ac_t "$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +profile_flag_pattern= +special_shlib_compile_flags= +wl= +link_static_flag= + +if test "$with_gcc" = yes; then + pic_flag='-fPIC' + profile_flag_pattern='-pg?' + wl='-Wl,' + link_static_flag='-static' +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # FIXME All rs/6000 code is PIC, but is there any non-rs/6000 AIX platform? + pic_flag= + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10*) + # FIXME is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag='${wl}-a ${wl}archive' + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + pic_flag= + ;; + + osf3* | osf4*) + # FIXME - pic_flag is probably required for hppa*-osf* and i860-osf* + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + *) + can_build_shared=no + ;; + esac +fi + +case "$host_cpu" in +rs6000 | powerpc | powerpcle) + # Yippee! All RS/6000 and PowerPC code is position-independent. + pic_flag= + ;; +esac + +if test -n "$pic_flag"; then + echo $ac_t "$pic_flag" 1>&6 + pic_flag=" $pic_flag" +else + echo $ac_t none 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +# See if we are using a broken GCC collect2 program. +if test "$with_gcc" = yes; then + echo $ac_n "checking for broken GCC collect2... $ac_c" 1>&6 + + # FIXME: Run a test here, instead of relying on the canonical system name. + case "$host_os" in + aix3*) + can_build_shared=no + echo $ac_t yes 1>&6 + echo "$progname: to build shared libraries, set the CC env variable to \`xlc' and reconfigure" 1>&2 + ;; + *) + echo $ac_t no 1>&6 + ;; + esac +fi + +echo $ac_n "checking for $compiler option to statically link programs... $ac_c" 1>&6 +if test -n "$link_static_flag"; then + echo $ac_t "$link_static_flag" 1>&6 +else + echo $ac_t none 1>&6 +fi + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + rm -f conftestdata + if ln -s X conftestdata 2>/dev/null; then + rm -f conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +if test "$with_gnu_ld" != yes || test -z "$LD"; then + if test -z "$LD"; then + if test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + else + echo $ac_n "checking for non-GNU ld... $ac_c" 1>&6 + fi + + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/ld"; then + LD="$ac_dir/ld" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + test "$with_gnu_ld" = yes && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + + if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi + fi + + echo $ac_n "checking whether we are using GNU ld... $ac_c" 1>&6 + # I'd rather use --version here, but apparently some GNU ld's only accept -v. + if $LD -v 2>&1 </dev/null | egrep '(GNU ld|with BFD)' > /dev/null; then + with_gnu_ld=yes + fi + echo $ac_t "$with_gnu_ld" 1>&6 +fi + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +archive_cmds= +export_dynamic_flag= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_runpath_var=no +hardcode_shlibpath_var=unsupported +runpath_var= + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # See if GNU ld supports shared libraries. + + case "$host_os" in + sunos4*) + ld_shlibs=yes + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + archive_cmds='$cc -shared ${wl}-soname $wl$soname -o $lib$libobjs$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath $wl$libdir' + export_dynamic_flag='${wl}-export-dynamic' + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + archive_cmds='/usr/ucb/nm$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE -lc$deplibs;$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + ;; + + aix4*) + allow_undefined_flag=unsupported + archive_cmds='/bin/nm -B$libobjs | egrep \" [BD] \" | sed \"s/^.* //\" > $lib.exp;$cc -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry$deplibs;$AR cru $lib $objdir/$soname' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # doesn't break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs /usr/lib/c++rt0.o' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 don't have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3, at last, uses gcc -shared to do shared libraries. + freebsd3*) + archive_cmds='$CC -shared -o $lib$libobjs$deplibs' + hardcode_direct=yes + hardcode_minusL=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs$deplibs;mv $objdir/$soname $lib' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + hpux10*) + archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs$deplibs' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + irix5* | irix6*) + archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + ;; + + netbsd* | openbsd*) + # Tested with NetBSD 1.2 ld + archive_cmds='$LD -Bshareable -o $lib$libobjs$deplibs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + osf3* | osf4*) + allow_undefined_flag=' -expect_unresolved' + archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs -lc$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -o $lib$libobjs$deplibs' + hardcode_direct=yes + ;; + + solaris2*) + archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + can_build_shared=no + ;; + esac +fi +echo $ac_t "$ld_shlibs" 1>&6 + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test "$hardcode_runpath_var" = yes; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && \ + test "$hardcode_minus_L" != no && \ + test "$hardcode_shlibpath_var" != no; then + + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +elif test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" != yes; then + # We can't hardcode anything. + hardcode_action=unsupported +else + # We can only hardcode existing directories. + hardcode_action=relink +fi +echo $ac_t "$hardcode_action" 1>&6 +test "$hardcode_action" = unsupported && can_build_shared=no + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linker may need a different reload flag. +reload_flag='-r' +echo $ac_t "$reload_flag" +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +soname_spec= +postinstall_cmds= +finish_cmds= +shlibpath_var= +version_type=none +dynamic_linker="$host_os ld.so" + +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3* | aix4*) + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='$libname.so.$major' + ;; + +freebsd2* | freebsd3*) + version_type=sunos + library_names_spec='$libname.so.$versuffix $libname.so' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +gnu*) + version_type=sunos + library_names_spec='$libname.so.$versuffix' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + shlibpath_var=SHLIB_PATH + library_names_spec='$libname.sl.$versuffix $libname.sl.$major $libname.sl' + soname_spec='$libname.sl.$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=osf + soname_spec='$libname.so' + library_names_spec='$libname.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd* | openbsd*) + version_type=sunos + library_names_spec='$libname.so.$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +osf3* | osf4*) + version_type=osf + soname_spec='$libname.so' + library_names_spec='$libname.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sco3.2v5*) + version_type=osf + soname_spec='$libname.so.$major' + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris2*) + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname.so.$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t""$dynamic_linker" +test "$dynamic_linker" = no && can_build_shared=no + +# FIXME need to add library stripping features +# strip -x works for most platforms, though not for static libraries on NetBSD +# HP-UX requires "-r" for library stripping +striplib= +old_striplib= + +#echo $ac_n "checking for static library strip program... $ac_c" 1>&6 +#if test -n "$old_striplib"; then +# echo $ac_t "$old_striplib" 1>&6 +#else +# echo $ac_t none 1>&6 +#fi + +#if test "$can_build_shared" = yes; then +# echo $ac_n "checking for shared library strip program... $ac_c" 1>&6 +# +# if test -n "$striplib"; then +# echo $ac_t "$striplib" 1>&6 +# else +# echo $ac_t none 1>&6 +# fi +#fi + +# Report the consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace. +case "$host_os" in +aix*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds;\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +esac + +echo "$ac_t""$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +ofile=libtool +trap "$rm $ofile; exit 1" 1 2 15 +echo creating $ofile +rm -fr $ofile +cat <<EOF > $ofile +#! /bin/sh + +# libtool - Provide generalized library-building support services. +# +# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION +# This program was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ +# LD="$old_LD" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# The version of $progname that generated this script. +LTCONFIG_VERSION="$VERSION" + +# Whether or not to build libtool libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build old-style libraries. +build_old_libs=$enable_static + +# The host system. +host_alias="$host_alias" +host="$host" + +# The archiver. +AR='$AR' + +# The linker used to build libraries. +LD='$LD' + +# Whether we need hard or soft links. +LN_S='$LN_S' + +# How to create reloadable object files. +reload_flag='$reload_flag' +reload_cmds='$reload_cmds' + +# How to pass a linker flag through the compiler. +wl='$wl' + +# Additional compiler flags for building library objects. +pic_flag='$pic_flag' + +# Compiler flag to prevent dynamic linking. +link_static_flag='$link_static_flag' + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag='$export_dynamic_flag' + +# Pattern to match compiler flags for creating libNAME_p libraries: +profile_flag_pattern='$profile_flag_pattern' + +# Library versioning type. +version_type=$version_type + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec='$library_names_spec' + +# The coded name of the library, if different from the real name. +soname_spec='$soname_spec' + +# Commands used to build and install an old-style archive. +RANLIB='$RANLIB' +old_archive_cmds='$old_archive_cmds' +old_postinstall_cmds='$old_postinstall_cmds' + +# Commands used to build and install a shared archive. +archive_cmds='$archive_cmds' +postinstall_cmds='$postinstall_cmds' + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag='$allow_undefined_flag' + +# Commands used to finish a libtool library installation in a directory. +finish_cmds='$finish_cmds' + +# How to strip a library file. +striplib='$striplib' +old_striplib='$old_striplib' + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec='$hardcode_libdir_flag_spec' + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator='$hardcode_libdir_separator' + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using RUNPATH_VAR=DIR during linking hardcodes DIR into the +# resulting binary. +hardcode_runpath_var=$hardcode_runpath_var + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +EOF + +# Detect if we are using a relative or absolute path to ltmain.sh. +case "$ltmain" in +/*) cat <<EOF2 >> $ofile +# Execute the libtool backend. +. $ltmain +EOF2 + ;; +*) cat <<EOF3 >> $ofile +# Find the path to this script. +thisdir=\`echo "\$0" | sed -e 's%/[^/]*\$%%'\` +test "X\$0" = "X\$thisdir" && thisdir=. + +# Execute the libtool backend. +. \$thisdir/$ltmain +EOF3 + ;; +esac + +echo 'exit 1' >> $ofile + +chmod +x $ofile +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 00000000..cf2ef915 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,1813 @@ +# ltmain.sh - Provide generalized library-building support services. +# Generated automatically from ltmain.sh.in by configure. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# The name of this program. +progname=`echo "$0" | sed 's%^.*/%%'` + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.0 + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +objdir=.libs +rm="rm -f" + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$progname: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$progname: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show=echo +show_help= + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`echo "$arg" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$arg" + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION" + exit 0 + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + -*) + echo "$progname: unrecognized option \`$arg'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + + +if test -n "$prevopt"; then + echo "$progname: option \`$prevopt' requires an argument" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *install*|cp) + mode=install + ;; + *rm) + mode=uninstall + ;; + *.la) + mode=dlname + ;; + *) + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + echo "$progname: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + echo "$progname: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + progname="$progname: compile" + # Get the compilation command and the source file. + base_compile="$nonopt" + lastarg= + srcfile= + + for arg + do + # Quote any args containing shell metacharacters. + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*|*\"*) + quote_arg="'$arg'" ;; + *) quote_arg="$arg" ;; + esac + + base_compile="$base_compile$lastarg" + srcfile="$quote_arg" + lastarg=" $srcfile" + done + + # Get the name of the library object. + libobj=`echo "$srcfile" | sed -e 's%^.*/%%'` + + # Recognize several different file suffixes. + xform='[cCFSf]' + case "$libobj" in + *.c++) xform='c++' ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform='for' ;; + esac + + libobj=`echo "$libobj" | sed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`echo "$libobj" | sed -e 's/\.lo$/.o/'` ;; + *) + echo "$progname: cannot determine name of library object from \`$srcfile'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + echo "$progname: you must specify a compilation command" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + $run $rm $obj $libobj + trap "$run $rm $obj $libobj; exit 1" 1 2 15 + else + $run $rm $libobj + trap "$run $rm $libobj; exit 1" 1 2 15 + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # All platforms use -DPIC, to notify preprocessed assembler code. + $show "$base_compile$pic_flag -DPIC $srcfile" + if $run eval "$base_compile$pic_flag -DPIC $srcfile"; then : + else + test -n "$obj" && $run $rm $obj + exit 1 + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag"; then + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj + exit $? + fi + + # Just move the object, then go on to compile the next one + $show "$mv $obj $libobj" + $run $mv $obj $libobj || exit 1 + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + $show "$base_compile $srcfile" + if $run eval "$base_compile $srcfile"; then : + else + $run $rm $obj $libobj + exit 1 + fi + fi + + # Create an invalid libtool object if no PIC, so that we don't accidentally + # link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + fi + + exit 0 + ;; + + # libtool link mode + link) + progname="$progname: link" + # Go through the arguments, transforming them on the way. + cc="$nonopt" + args="$cc" + allow_undefined=no + compile_command="$cc" + finalize_command="$cc" + compile_shlibpath= + finalize_shlibpath= + deplibs= + export_dynamic=no + hardcode_libdirs= + install_libdir= + libobjs= + link_against_libtool_libs= + link_static= + ltlibs= + objs= + prev= + prevarg= + perm_rpath= + temp_rpath= + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -static) + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + for arg + do + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + args="$args $arg" + ;; + esac + + eval "$prev=\$arg" + prev= + + continue + fi + + args="$args $arg" + prevarg="$arg" + + case "$arg" in + -allow-undefined) allow_undefined=yes ;; + + -export-dynamic) + export_dynamic=yes + compile_command="$compile_command $export_dynamic_flag" + finalize_command="$finalize_command $export_dynamic_flag" + continue + ;; + + -L*) + dir=`echo "$arg" | sed 's%^-L\(.*\)$%\1%'` + case "$dir" in + /*) + ;; + *) + echo "$progname: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + deplibs="$deplibs $arg" + ;; + + -l*) deplibs="$deplibs $arg" ;; + + -o) prev=output ;; + + -rpath) + prev=install_libdir + continue + ;; + + -static) + link_static="`eval echo \"$link_static_flag\"`" + compile_command="$compile_command $link_static" + continue + ;; + + -version-file) + echo "$progname: \`-version-file' has been replaced by \`-version-info'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + -version-info) + prev=vinfo + continue + ;; + + -*) cc="$cc $arg" ;; # Some other compiler flag. + + *.o) + # A standard object. + objs="$objs $arg" + ;; + + *.a) + # Find the relevant object directory and library name. + file=`echo "$arg" | sed 's%^.*/%%'` + dir=`echo "$arg" | sed 's%/[^/]*$%/%'` + test "$dir" = "$arg" && dir= + + # Standard archive. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : + else + echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If there is no directory component, then add one. + case "$arg" in + */*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + echo "$progname: \`$arg' contains no -rpath information" 1>&2 + exit 1 + fi + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + echo "$progname: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`echo "$arg" | sed 's%^.*/%%; s/\.la$//; s/^lib//'` + dir=`echo "$arg" | sed 's%/[^/]*$%%'` + if test "$dir" = "$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + + if test "$build_libtool_libs" = yes && test -n "$library_names"; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + "* $dir *") ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the libdirs. + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + libdir= + fi + fi + + if test -n "$libdir"; then + hardcode_libdir_flag=`eval echo \"$hardcode_libdir_flag_spec\"` + compile_command="$compile_command $hardcode_libdir_flag" + finalize_command="$finalize_command $hardcode_libdir_flag" + fi + elif test "$hardcode_runpath_var" = yes; then + # Do the same for the permanent run path. + case "$perm_rpath " in + "* $libdir *") ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + + + case "$hardcode_action" in + immediate) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = no; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + relink) + # We need an absolute path. + case "$dir" in + /*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + echo "$progname: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + *) + echo "$progname: \`$hardcode_action' is an unknown hardcode action" 1>&2 + exit 1 + ;; + esac + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + finalize_command="$finalize_command -L$libdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + finalize_shlibpath="$finalize_shlibpath$libdir:" + finalize_command="$finalize_command -l$name" + else + # We can't seem to hardcode it, guess we'll fake it. + finalize_command="$finalize_command -L$libdir -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + echo "$progname: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + fi + continue + ;; + + *) + echo "$progname: unknown file suffix for \`$arg'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + done + + if test -n "$prev"; then + echo "$progname: the \`$prevarg' option requires an argument" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + # Substitute the hardcoded libdirs into the compile commands. + if test "$hardcode_libdir_colon_separated" = yes; then + compile_command=`echo "$compile_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + finalize_command=`echo "$finalize_command" | sed "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + fi + + oldlib= + oldobjs= + case "$output" in + "") + echo "$progname: you must specify an output file" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + */*) + echo "$progname: output file \`$output' must have no directory components" 1>&2 + exit 1 + ;; + + *.la) + libname=`echo "$output" | sed 's/\.la$//'` + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + current=0 + revision=0 + age=0 + + if test -n "$objs"; then + echo "$progname: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + echo "$progname: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 + exit 1 + fi + + if test -z "$install_libdir"; then + echo "$progname: you must specify an installation directory with \`-rpath'" 1>&2 + exit 1 + fi + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo + IFS="$save_ifs" + + if test -n "$5"; then + echo "$progname: too many parameters to \`-version-info'" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + test -n "$2" && current="$2" + test -n "$3" && revision="$3" + test -n "$4" && age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: CURRENT \`$current' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: REVISION \`$revision' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + echo "$progname: AGE \`$age' is not a nonnegative integer" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + echo "$progname: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + echo "$progname: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + version_vars="version_type current age revision" + case "$version_type" in + none) ;; + + linux) + version_vars="$version_vars major versuffix" + major=`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + version_vars="$version_vars versuffix verstring" + major=`expr $current - $age` + versuffix="$current.$age.$revision" + verstring="$versuffix" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + version_vars="$version_vars major versuffix" + major="$current" + versuffix="$current.$revision" + ;; + + *) + echo "$progname: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Create the output directory, or remove our outputs if we need to. + if test -d $objdir; then + $show "$rm $objdir/$libname.*" + $run $rm $objdir/$libname.* + else + $show "$mkdir $objdir" + $run $mkdir $objdir || exit $? + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + echo "$progname: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + fi + else + # Clear the flag. + allow_undefined_flag= + fi + + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + library_names=`eval echo \"$library_names_spec\"` + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + soname=`eval echo \"$soname_spec\"` + else + soname="$realname" + fi + + lib="$objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are PIC. + test -z "$pic_flag" && libobjs=`echo "$libobjs " | sed 's/\.lo /.o /g; s/ $//g'` + + # Do each of the archive commands. + cmds=`eval echo \"$archive_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for link in $linknames; do + $show "(cd $objdir && $LN_S $realname $link)" + $run eval "(cd $objdir && $LN_S $realname $link)" || exit $? + done + + # If -export-dynamic was specified, set the dlname. + if test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o) + if test -n "$link_against_libtool_libs"; then + echo "$progname: error: cannot link libtool libraries into reloadable objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + echo "$progname: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 + fi + + if test -n "$install_libdir"; then + echo "$progname: warning: \`-rpath' is ignored while creating objects" 1>&2 + fi + + if test -n "$vinfo"; then + echo "$progname: warning: \`-version-info' is ignored while creating objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + echo "$progname: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`echo "$output" | sed 's/\.lo$/.o/'` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` + + output="$obj" + cmds=`eval echo \"$reload_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + cmds=`eval echo \"$reload_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit 1 + fi + + exit 0 + ;; + + *) + if test -n "$install_libdir"; then + echo "$progname: warning: \`-rpath' is ignored while linking programs" 1>&2 + fi + + if test -n "$vinfo"; then + echo "$progname: warning: \`-version-info' is ignored while linking programs" 1>&2 + fi + + if test -n "$libobjs"; then + # Transform all the library objects into standard objects. + compile_command=`echo "$compile_command " | sed 's/\.lo /.o /g; s/ $//'` + finalize_command=`echo "$finalize_command " | sed 's/\.lo /.o /g; s/ $//'` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$output"'%g'` + + # We have no uninstalled library dependencies, so finalize right now. + $show "$compile_command" + $run $compile_command + status=$? + + # If we failed to link statically, then try again. + if test $status -ne 0 && test -n "$link_static"; then + echo "$progname: cannot link \`$output' statically; retrying semi-dynamically" 1>&2 + compile_command=`echo "$compile_command " | sed "s% $link_static % %;s/ $//"` + $show "$finalize_command" + $run $finalize_command + status=$? + fi + exit $status + fi + + # Replace the output file specification. + compile_command=`echo "$compile_command" | sed 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`echo "$finalize_command" | sed 's%@OUTPUT@%'"$objdir/$output"'T%g'` + + # Create the binary in the object directory, then wrap it. + if test -d $objdir; then : + else + $show "$mkdir $objdir" + $run $mkdir $objdir || exit $? + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + # Delete the old output file. + $run $rm $output + + if test -n "$compile_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" + finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" + fi + + case "$hardcode_action" in + relink) + # AGH! Flame the AIX and HP-UX people for me, will ya? + echo "$progname: warning: using a buggy system linker" 1>&2 + echo "$progname: relinking will be required before \`$output' can be installed" 1>&2 + ;; + esac + + $show "$compile_command" + $run eval "$compile_command" || exit $? + + # Now create the wrapper script. + echo "creating $output" + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + cat > $output <<EOF +#! /bin/sh + +# $output - temporary wrapper script for $objdir/$output +# Generated by $PROGRAM - GNU $PACKAGE $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of \``pwd`'. +# If it is, it will not operate correctly. + +# This environment variable determines our operation mode. +if test "\$libtool_install_magic" = "$magic"; then + # install mode needs the following variables: + link_against_libtool_libs='$link_against_libtool_libs' + finalize_command='$finalize_command' +else + # Find the directory that this script lives in. + thisdir=\`echo \$0 | sed 's%/[^/]*$%%'\` + test "x\$thisdir" = "x\$0" && thisdir=. + + # Try to get the absolute directory name. + absdir=\`cd "\$thisdir" && pwd\` + test -n "\$absdir" && thisdir="\$absdir" + + progdir="\$thisdir/$objdir" + program="$output" + + if test -f "\$progdir/\$program"; then + # Run the actual program with our arguments. + args= + for arg + do + # Quote arguments (to preserve shell metacharacters). + args="\$args '\$arg'" + done + + # Export the path to the program. + PATH="\$progdir:\$PATH" + export PATH +EOF + + # Export our shlibpath_var if we have one. + if test -n "$shlibpath_var" && test -n "$temp_rpath"; then + cat >> $output <<EOF + + # Add our own library path to $shlibpath_var + $shlibpath_var="$temp_rpath\$$shlibpath_var" + + # Some systems cannot cope with colon-terminated $shlibpath_var + $shlibpath_var=\`echo \$$shlibpath_var | sed -e 's/:*\$//'\` + + export $shlibpath_var +EOF + fi + + cat >> $output <<EOF + + eval "exec \$program \$args" + + echo "\$0: cannot exec \$program \$args" + exit 1 + else + # The program doesn't exist. + echo "\$0: error: \$progdir/\$program does not exist" 1>&2 + echo "This script is just a wrapper for \$program." 1>&2 + echo "See the $PACKAGE documentation for more information." 1>&2 + exit 1 + fi +fi +EOF + chmod +x $output + fi + exit 0 + ;; + esac + + + # See if we need to build an old-fashioned archive. + if test "$build_old_libs" = "yes"; then + # Now set the variables for building old libraries. + oldlib="$objdir/$libname.a" + + # Transform .lo files to .o files. + oldobjs="$objs"`echo "$libobjs " | sed 's/[^ ]*\.a //g; s/\.lo /.o /g; s/ $//g'` + + if test -d "$objdir"; then + $show "$rm $oldlib" + $run $rm $oldlib + else + $show "$mkdir $objdir" + $run $mkdir $objdir + fi + + # Do each command in the archive commands. + cmds=`eval echo \"$old_archive_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.a" + + echo "creating $output" + + # Only create the output if not a dry run. + if test -z "$run"; then + cat > $output <<EOF +# $output - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Directory that this library needs to be installed in: +libdir='$install_libdir' +EOF + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $objdir && $LN_S ../$output $output)" + $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + progname="$progname: install" + + # The first argument is the name of the installation program. + install_prog="$nonopt" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir= + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + echo "$progname: you must specify an install program" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + echo "$progname: the \`$prev' option requires an argument" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + echo "$progname: no file or destination specified" 1>&2 + else + echo "$progname: you must specify a destination" 1>&2 + fi + echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`echo "$dest" | sed 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test -n "$isdir"; then + destdir="$dest" + destname= + else + destdir=`echo "$dest" | sed 's%/[^/]*$%%'` + test "$destdir" = "$dest" && destdir=. + destname=`echo "$dest" | sed 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + echo "$progname: \`$dest' is not a directory" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + echo "$progname: \`$destdir' must be an absolute directory name" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then : + else + echo "$progname: \`$file' is not a valid libtool archive" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "$destdir" = "$libdir"; then + case "$current_libdirs " in + "* $libdir *") ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + "* $libdir *") ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`echo "$file" | sed 's%/[^/]*$%%'`/" + test "$dir" = "$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + # Support stripping libraries. + if test -n "$stripme"; then + if test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run $striplib $destdir/$realname || exit $? + else + echo "$progname: warning: no library stripping program" 1>&2 + fi + fi + + if test $# -gt 0; then + # Delete the old symlinks. + rmcmd="$rm" + for linkname + do + rmcmd="$rmcmd $destdir/$linkname" + done + $show "$rmcmd" + $run $rmcmd + + # ... and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + $show "(cd $destdir && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $LN_S $realname $linkname)" + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=`eval echo \"$postinstall_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`echo "$file" | sed 's%^.*/%%'` + $show "$install_prog $file $destdir/$name" + $run $install_prog $file $destdir/$name || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`echo "$file" | sed 's%^.*/%%;'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`echo "$destfile" | sed 's/\.lo$/\.o/;'` + ;; + *.o) + staticdest="$destfile" + destfile= + ;; + *) + echo "$progname: cannot copy a libtool object to \`$destfile'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run $install_prog $file $destfile || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`echo "$file" | sed 's/\.lo$/\.o/;'` + + $show "$install_prog $staticobj $staticdest" + $run $install_prog $staticobj $staticdest || exit $? + fi + exit 0 + ;; + + *) + # Do a test to see if this is really a libtool program. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + link_against_libtool_libs= + finalize_command= + + # If there is no directory component, then add one. + case "$file" in + */*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then + echo "$progname: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`echo "$lib" | sed 's%^.*/%%g'`" + if test -z "$libdir"; then + echo "$progname: warning: \`$lib' contains no -rpath information" 1>&2 + elif test -f "$libfile"; then : + else + echo "$progname: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + if test "$hardcode_action" = relink; then + if test "$finalize" = yes; then + echo "$progname: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$finalize_command" + if $run $finalize_command; then : + else + echo "$progname: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$objdir/$file"T + else + echo "$progname: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + dir=`echo "$file" | sed 's%/[^/]*$%%'` + if test "$file" = "$dir"; then + file="$objdir/$file" + else + file="$dir/$objdir/`echo "$file" | sed 's%^.*/%%'`" + fi + fi + fi + + $show "$install_prog$stripme $file $dest" + $run $install_prog$stripme $file $dest || exit $? + ;; + esac + done + + for file in $staticlibs; do + name=`echo "$file" | sed 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run $install_prog $file $oldlib || exit $? + + # Support stripping libraries. + if test -n "$stripme"; then + if test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run $old_striplib $oldlib || exit $? + else + echo "$progname: warning: no static library stripping program" 1>&2 + fi + fi + + # Do each command in the postinstall commands. + cmds=`eval echo \"$old_postinstall_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + echo "$progname: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool dlname mode + dlname) + progname="$progname: dlname" + ltlibs="$nonopt" + for lib + do + ltlibs="$ltlibs $lib" + done + + if test -z "$ltlibs"; then + echo "$progname: you must specify at least one LTLIBRARY" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + # Now check to make sure each one is a valid libtool library. + status=0 + for lib in $ltlibs; do + dlname= + libdir= + library_names= + + # Check to see that this really is a libtool archive. + if egrep "^# Generated by $PROGRAM" $arg >/dev/null 2>&1; then : + else + echo "$progname: \`$arg' is not a valid libtool archive" 1>&2 + status=1 + continue + fi + + # If there is no directory component, then add one. + case "$arg" in + */*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + echo "$progname: \`$arg' contains no -rpath information" 1>&2 + status=1 + elif test -n "$dlname"; then + echo "$libdir/$dlname" + elif test -z "$library_names"; then + echo "$progname: \`$arg' is not a shared library" 1>&2 + status=1 + else + echo "$progname: \`$arg' was not linked with \`-export-dynamic'" 1>&2 + status=1 + fi + done + exit $status + ;; + + # libtool finish mode + finish) + progname="$progname: finish" + libdirs="$nonopt" + + if test -n "$finish_cmds" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + # Do each command in the postinstall commands. + cmds=`eval echo \"$finish_cmds\"` + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + done + fi + + echo "To link against installed libraries in LIBDIR, users may have to:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to their \`$shlibpath_var' environment variable" + fi + echo " - use the \`-LLIBDIR' linker flag" + exit 0 + ;; + + # libtool uninstall mode + uninstall) + progname="$progname: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + echo "$progname: you must specify an RM program" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`echo "$file" | sed -e 's%/[^/]*$%%'` + test "$dir" = "$file" && dir=. + name=`echo "$file" | sed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if egrep "^# Generated by $PROGRAM" $file >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`echo "$name" | sed 's/\.lo$/\.o/'` + rmfiles="$rmfiles $dir/$oldobj" + fi + ;; + esac + + $show "$rm $rmfiles" + $run $rm $rmfiles + done + exit 0 + ;; + + NONE) + echo "$progname: you must specify a MODE" 1>&2 + echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + echo "$progname: invalid operation mode \`$mode'" 1>&2 + echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +NONE) cat <<EOF +Usage: $progname [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + +-n, --dry-run display commands without modifying any files + --features display configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + dlname print filenames to use to \`dlopen' libtool libraries + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$progname --help --mode=MODE' for +a more detailed description of MODE. +EOF + ;; + +compile) + cat <<EOF +Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'. +EOF + ;; + +dlname) + cat <<EOF +Usage: $progname [OPTION]... --mode=dlname LTLIBRARY... + +Print filenames to use to \`dlopen' libtool libraries. + +Each LTLIBRARY is the name of a dynamically loadable libtool library (one that +was linked using the \`-export-dynamic' option). + +The names to use are printed to standard output, one per line. +EOF + ;; + +finish) + cat <<EOF +Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed. +EOF + ;; + +install) + cat <<EOF +Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized). +EOF + ;; + +link) + cat <<EOF +Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -allow-undefined allow a libtool library to reference undefined symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -static do not do any dynamic linking or shared library creation + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only +library objects (\`.lo' files) may be specified, and \`-rpath' is required. + +If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' +and \`ranlib'. + +If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is +created, otherwise an executable program is created. +EOF + ;; + +uninstall) + cat <<EOF +Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM. +EOF + ;; + +*) + echo "$progname: invalid operation mode \`$mode'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; +esac + +case "$mode" in +archive|compile) + echo + echo "Try \`$progname --help' for more information about other modes." + ;; +esac + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/po/Makefile.in b/po/Makefile.in index f1c440df..f56f458b 100644 --- a/po/Makefile.in +++ b/po/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -206,6 +209,7 @@ clean: clean-generic mostlyclean distclean: distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" diff --git a/po/README b/po/README index 1a76d111..3d0f3cf0 100644 --- a/po/README +++ b/po/README @@ -25,7 +25,7 @@ fi.po Finnish Ville Hautamaki <villeh@cs.joensuu.fi> Ramin Miraftabi <ramin@cs.joensuu.fi> hr.po Croatian 3 Toni Bilic <tbilic@efos.hr> el.po Greek Nikolaos Papagrigoriou <papanikos@usa.net> -pl.po Pollish Piotr Dembiñski <pdemb@aurora.put.poznan.pl> +pl.po Polish Piotr Dembiñski <pdemb@aurora.put.poznan.pl> ro.po Romanian Andrei Vuta <gigi_man@manag.pub.ro> diff --git a/po/cs.po b/po/cs.po index 15824228..f17b0e96 100644 --- a/po/cs.po +++ b/po/cs.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: WindowMaker 0.20.2\n" -"POT-Creation-Date: 1998-10-24 12:35+02:00\n" -"PO-Revision-Date: 1998-10-27 13:07+01:00\n" +"POT-Creation-Date: 1998-12-11 00:11+0100\n" +"PO-Revision-Date: 1998-12-11 00:27+01:00\n" "Last-Translator: David Sauer <xsauer@fel.cvut.cz>\n" "Language-Team: czech <cs@li.org>\n" "MIME-Version: 1.0\n" @@ -14,8 +14,8 @@ msgstr "" "Content-Transfer-Encoding: unknown\n" #: ../src/appicon.c:509 ../src/dialog.c:215 ../src/dialog.c:271 -#: ../src/dock.c:2955 ../src/dockedapp.c:206 ../src/winspector.c:279 -#: ../src/winspector.c:295 +#: ../src/dock.c:2963 ../src/dockedapp.c:206 ../src/winspector.c:281 +#: ../src/winspector.c:297 msgid "Error" msgstr "Chyba" @@ -25,8 +25,8 @@ msgstr "Nelze otev #: ../src/appicon.c:511 ../src/dialog.c:114 ../src/dialog.c:215 #: ../src/dialog.c:271 ../src/dialog.c:451 ../src/dock.c:420 -#: ../src/dock.c:2956 ../src/dockedapp.c:206 ../src/dockedapp.c:350 -#: ../src/winspector.c:280 ../src/winspector.c:296 +#: ../src/dock.c:2964 ../src/dockedapp.c:206 ../src/dockedapp.c:350 +#: ../src/winspector.c:282 ../src/winspector.c:298 msgid "OK" msgstr "OK" @@ -52,11 +52,11 @@ msgstr "Ano" msgid "No" msgstr "Ne" -#: ../src/appicon.c:548 ../src/dock.c:1030 +#: ../src/appicon.c:548 ../src/dock.c:1027 msgid "Unhide Here" msgstr "Odkryj zde" -#: ../src/appicon.c:549 ../src/dock.c:1032 +#: ../src/appicon.c:549 ../src/dock.c:1029 msgid "(Un)Hide" msgstr "Skrýt/Odkrýt" @@ -64,195 +64,198 @@ msgstr "Skr msgid "Set Icon..." msgstr "Nastavit ikonu..." -#: ../src/appicon.c:551 ../src/dock.c:1036 ../src/winmenu.c:260 +#: ../src/appicon.c:551 ../src/dock.c:1033 ../src/rootmenu.c:268 +#: ../src/rootmenu.c:282 ../src/winmenu.c:347 msgid "Kill" msgstr "Ukonèit" -#: ../src/defaults.c:687 ../src/startup.c:681 ../src/startup.c:699 -#: ../src/startup.c:705 +#: ../src/defaults.c:704 ../src/startup.c:704 ../src/startup.c:722 +#: ../src/startup.c:728 #, c-format msgid "could not read domain \"%s\" from defaults database" msgstr "z databáze standardù nelze naèíst doménu \"%s\"" -#: ../src/defaults.c:733 ../src/defaults.c:857 ../src/defaults.c:896 -#: ../src/defaults.c:926 +#: ../src/defaults.c:750 ../src/defaults.c:874 ../src/defaults.c:913 +#: ../src/defaults.c:943 #, c-format msgid "Domain %s (%s) of defaults database is corrupted!" msgstr "V databázi standardù jsou po¹kozena doména %s (%s)!" -#: ../src/defaults.c:738 ../src/defaults.c:878 ../src/defaults.c:909 -#: ../src/defaults.c:935 +#: ../src/defaults.c:755 ../src/defaults.c:895 ../src/defaults.c:926 +#: ../src/defaults.c:952 #, c-format msgid "could not load domain %s from user defaults database" msgstr "z u¾ivatelovy databáze standardù nelze naèíst doménu \"%s\"" -#: ../src/defaults.c:749 ../src/defaults.c:842 +#: ../src/defaults.c:766 ../src/defaults.c:859 #, c-format msgid "Domain %s (%s) of global defaults database is corrupted!" msgstr "V globální databázi standardù je po¹kozena doména %s (%s)" -#: ../src/defaults.c:768 ../src/defaults.c:847 +#: ../src/defaults.c:785 ../src/defaults.c:864 #, c-format msgid "could not load domain %s from global defaults database" msgstr "z globální databáze standardù nelze naèíst doménu \"%s\"" -#: ../src/defaults.c:1237 +#: ../src/defaults.c:1254 #, c-format msgid "wrong option value for key \"%s\". Should be one of %s" msgstr "Chybný formát volby pro klíè \"%s\". Má být jeden z %s" -#: ../src/defaults.c:1284 +#: ../src/defaults.c:1301 #, c-format msgid "can't convert \"%s\" to boolean for key \"%s\"" msgstr "\"%s\" nelze zkonvertovat pro klíè \"%s\" na boolean " -#: ../src/defaults.c:1289 ../src/defaults.c:1323 ../src/defaults.c:1355 -#: ../src/defaults.c:1368 ../src/defaults.c:1383 ../src/defaults.c:1398 -#: ../src/defaults.c:1469 ../src/defaults.c:1481 ../src/defaults.c:1736 -#: ../src/defaults.c:1750 ../src/defaults.c:1788 ../src/defaults.c:1800 -#: ../src/defaults.c:1812 ../src/defaults.c:1835 ../src/defaults.c:1862 -#: ../src/defaults.c:1875 ../src/defaults.c:1888 ../src/defaults.c:1918 -#: ../src/defaults.c:1959 ../src/defaults.c:1971 ../src/defaults.c:1983 -#: ../src/defaults.c:2009 ../src/defaults.c:2029 ../src/defaults.c:2042 -#: ../src/defaults.c:2057 ../src/defaults.c:2096 ../src/defaults.c:2161 +#: ../src/defaults.c:1306 ../src/defaults.c:1340 ../src/defaults.c:1372 +#: ../src/defaults.c:1385 ../src/defaults.c:1400 ../src/defaults.c:1414 +#: ../src/defaults.c:1485 ../src/defaults.c:1497 ../src/defaults.c:1752 +#: ../src/defaults.c:1769 ../src/defaults.c:1782 ../src/defaults.c:1820 +#: ../src/defaults.c:1832 ../src/defaults.c:1844 ../src/defaults.c:1867 +#: ../src/defaults.c:1894 ../src/defaults.c:1907 ../src/defaults.c:1920 +#: ../src/defaults.c:1950 ../src/defaults.c:1991 ../src/defaults.c:2003 +#: ../src/defaults.c:2015 ../src/defaults.c:2041 ../src/defaults.c:2061 +#: ../src/defaults.c:2074 ../src/defaults.c:2089 ../src/defaults.c:2128 +#: ../src/defaults.c:2193 #, c-format msgid "using default \"%s\" instead" msgstr "pou¾iji implicitní %s" -#: ../src/defaults.c:1320 +#: ../src/defaults.c:1337 #, c-format msgid "can't convert \"%s\" to integer for key \"%s\"" msgstr "\"%s\" nelze zkonvertovat pro klíè \"%s\" na integer" -#: ../src/defaults.c:1350 ../src/defaults.c:1464 ../src/defaults.c:1731 -#: ../src/defaults.c:1783 ../src/defaults.c:1954 ../src/wdefaults.c:544 -#: ../src/wdefaults.c:580 +#: ../src/defaults.c:1367 ../src/defaults.c:1480 ../src/defaults.c:1747 +#: ../src/defaults.c:1764 ../src/defaults.c:1815 ../src/defaults.c:1986 +#: ../src/wdefaults.c:551 ../src/wdefaults.c:587 #, c-format msgid "Wrong option format for key \"%s\". Should be %s." msgstr "Chybný formát volby pro klíè \"%s\". Má být %s." -#: ../src/defaults.c:1363 +#: ../src/defaults.c:1380 #, c-format msgid "Incorrect number of elements in array for key \"%s\"." msgstr "Pro klíè %s je v poli chybný poèet prvkù." -#: ../src/defaults.c:1378 +#: ../src/defaults.c:1395 #, c-format msgid "Wrong value for key \"%s\". Should be Coordinate." msgstr "Chybná hodnota pro klíè \"%s\". Má být Coordinate." -#: ../src/defaults.c:1393 +#: ../src/defaults.c:1410 #, c-format msgid "can't convert array to integers for \"%s\"." msgstr "pole nelze konvertovat na èísla typu integer(pro %s)." -#: ../src/defaults.c:1577 ../src/defaults.c:1608 ../src/defaults.c:1620 -#: ../src/defaults.c:1662 ../src/defaults.c:1702 +#: ../src/defaults.c:1593 ../src/defaults.c:1624 ../src/defaults.c:1636 +#: ../src/defaults.c:1678 ../src/defaults.c:1718 #, c-format msgid "\"%s\" is not a valid color name" msgstr "%s není správné jméno barvy" -#: ../src/defaults.c:1589 +#: ../src/defaults.c:1605 msgid "bad number of arguments in gradient specification" msgstr "chybný poèet argumetù ve specifikaci gradientu" -#: ../src/defaults.c:1635 +#: ../src/defaults.c:1651 msgid "too few arguments in multicolor gradient specification" msgstr "nedostatek argumentù pøi specifikaci vícebarevného gradientu" -#: ../src/defaults.c:1745 +#: ../src/defaults.c:1777 #, c-format msgid "Error in texture specification for key \"%s\"" msgstr "Chyba ve specifikaci textury pro klíè \"%s\"" -#: ../src/defaults.c:1796 ../src/defaults.c:1831 ../src/defaults.c:1967 -#: ../src/defaults.c:2005 +#: ../src/defaults.c:1828 ../src/defaults.c:1863 ../src/defaults.c:1999 +#: ../src/defaults.c:2037 msgid "Too few elements in array for key \"WorkspaceBack\"." msgstr "Pro klíè \"WorkspaceBack\" není v poli dostatek prvkù." -#: ../src/defaults.c:1808 ../src/defaults.c:1979 +#: ../src/defaults.c:1840 ../src/defaults.c:2011 msgid "Wrong type for workspace background. Should be Texture." msgstr "Chybný typ pro pozadí pracovní plochy. Má být 'Texture'." -#: ../src/defaults.c:1858 ../src/defaults.c:2025 +#: ../src/defaults.c:1890 ../src/defaults.c:2057 msgid "Cannot get color entry for key \"WorkspaceBack\"." msgstr "Nelze získat barevnou polo¾ku pro klíè \"WorkspaceBack\"." -#: ../src/defaults.c:1870 ../src/defaults.c:2037 +#: ../src/defaults.c:1902 ../src/defaults.c:2069 #, c-format msgid "key \"WorkspaceBack\" has invalid color \"%s\"" msgstr "klíè \"WorkspaceBack\" má chybné jméno barvy \"%s\"" -#: ../src/defaults.c:1884 ../src/defaults.c:2053 +#: ../src/defaults.c:1916 ../src/defaults.c:2085 msgid "Cannot get file entry for key \"WorkspaceBack\"." msgstr "Pro klíè \"WorkspaceBack\" nelze získat polo¾ku souboru." -#: ../src/defaults.c:1897 ../src/defaults.c:2078 +#: ../src/defaults.c:1929 ../src/defaults.c:2110 #, c-format msgid "could not find background image \"%s\"" msgstr "nelze získat pozadí obrázku \"%s\"" -#: ../src/defaults.c:1914 ../src/defaults.c:2092 +#: ../src/defaults.c:1946 ../src/defaults.c:2124 msgid "Error in texture specification for key \"WorkspaceBack\"" msgstr "Chyba ve specifikaci textury pro klíè \"WorkspaceBack\"" -#: ../src/defaults.c:2073 +#: ../src/defaults.c:2105 #, c-format msgid "could not run \"%s\"" msgstr "nelze provést pøíkaz \"%s\"" -#: ../src/defaults.c:2126 +#: ../src/defaults.c:2158 msgid "could not load any usable font" msgstr "nelze naèíst ¾ádný pou¾itelný font" -#: ../src/defaults.c:2156 +#: ../src/defaults.c:2188 #, c-format msgid "could not get color for key \"%s\"" msgstr "nelze získat barvu pro klíè \"%s\"" -#: ../src/defaults.c:2215 ../src/rootmenu.c:440 +#: ../src/defaults.c:2247 ../src/rootmenu.c:512 #, c-format msgid "%s:invalid key modifier \"%s\"" msgstr "%s:chybný modifikátor klávesy \"%s\"" -#: ../src/defaults.c:2227 +#: ../src/defaults.c:2259 #, c-format msgid "%s:invalid kbd shortcut specification \"%s\"" msgstr "%s:chybná specifikace klávesové zkratky \"%s\"" -#: ../src/defaults.c:2234 +#: ../src/defaults.c:2266 #, c-format msgid "%s:invalid key in shortcut \"%s\"" msgstr "%s:chybná klávesa v klávesové zkratce \"%s\"" -#: ../src/defaults.c:2260 +#: ../src/defaults.c:2292 #, c-format msgid "%s: modifier key %s is not valid" msgstr "%s: klávesa modifikátoru %s není v poøádku" -#: ../src/defaults.c:2336 +#: ../src/defaults.c:2368 msgid "could not render texture for icon background" msgstr "pro pozadí ikony nelze vykreslit texturu" -#: ../src/defaults.c:2692 +#: ../src/defaults.c:2724 msgid "background texture rendering was unsuccessfull" msgstr "vykreslení textury pozadí není v poøádku" -#: ../src/defaults.c:2719 +#: ../src/defaults.c:2751 #, c-format msgid "could not load image %s for option %s:%s\n" msgstr "pro volbu %2$s:%3$s nelze naèíst obrázek loga %1$s\n" -#: ../src/defaults.c:2735 +#: ../src/defaults.c:2767 msgid "could not spawn texture rendering subprocess for option" msgstr "pro vykreslení textury nelze zalo¾it podproces pro volbu" -#: ../src/defaults.c:2789 ../src/defaults.c:2877 +#: ../src/defaults.c:2821 ../src/defaults.c:2909 msgid "could not render texture for workspace background" msgstr "pro pozadí pracovní plochy nelze vykreslit texturu" #: ../src/dialog.c:114 ../src/dialog.c:458 ../src/dock.c:420 -#: ../src/dockedapp.c:356 ../src/rootmenu.c:207 ../src/rootmenu.c:236 +#: ../src/dockedapp.c:356 ../src/rootmenu.c:217 ../src/rootmenu.c:268 +#: ../src/rootmenu.c:282 msgid "Cancel" msgstr "Nic" @@ -289,7 +292,7 @@ msgstr "V msgid "Type the name for workspace %i:" msgstr "Zadejte jméno pro plochu %i:" -#: ../src/dock.c:210 ../src/dock.c:1009 +#: ../src/dock.c:210 ../src/dock.c:1006 msgid "Rename Workspace" msgstr "Pøejmenovat plochu" @@ -301,107 +304,103 @@ msgstr "Sponka" msgid "All selected icons will be removed!" msgstr "V¹echny vybrané ikony budou odstranìny!" -#: ../src/dock.c:469 +#: ../src/dock.c:466 msgid "Keep Icon" msgstr "Dr¾et ikonu" -#: ../src/dock.c:470 ../src/dock.c:1926 ../src/dock.c:2048 +#: ../src/dock.c:467 ../src/dock.c:1918 ../src/dock.c:2047 msgid "Type the command used to launch the application" msgstr "Zadejte pøíkaz, který spustí aplikaci" -#: ../src/dock.c:833 +#: ../src/dock.c:830 #, c-format msgid "could not launch application %s\n" msgstr "aplikaci %s nelze odstartovat\n" -#: ../src/dock.c:888 +#: ../src/dock.c:885 msgid "could not create workspace submenu for Clip menu" msgstr "nelze vytvoøit submenu pracovní plochy pro menu Sponky" -#: ../src/dock.c:946 +#: ../src/dock.c:943 msgid "could not create options submenu for Clip menu" msgstr "nelze vytvoøit submenu voleb pro menu Sponky" -#: ../src/dock.c:950 -msgid "Keep Clip On Top" -msgstr "Sponka v¾dy navrchu" +#: ../src/dock.c:947 ../src/dock.c:995 +msgid "Keep on top" +msgstr "V¾dy navrchu" -#: ../src/dock.c:956 +#: ../src/dock.c:953 msgid "Collapsed" msgstr "Svinuto" -#: ../src/dock.c:962 +#: ../src/dock.c:959 msgid "AutoCollapse" msgstr "Automaticky svinout" -#: ../src/dock.c:968 +#: ../src/dock.c:965 msgid "AutoAttract Icons" msgstr "Automaticky chytat iony" -#: ../src/dock.c:974 +#: ../src/dock.c:971 msgid "Keep Attracted Icons" msgstr "Dr¾ chycené ikony" -#: ../src/dock.c:998 -msgid "Keep Dock On Top" -msgstr "Dok v¾dy navrchu" - -#: ../src/dock.c:1004 +#: ../src/dock.c:1001 msgid "Clip Options" msgstr "Volby Sponky" -#: ../src/dock.c:1011 +#: ../src/dock.c:1008 msgid "(Un)Select Icon" msgstr "(Od)Oznaè ikonu" -#: ../src/dock.c:1013 +#: ../src/dock.c:1010 msgid "(Un)Select All Icons" msgstr "(Od)Oznaè v¹echny ikony" -#: ../src/dock.c:1016 +#: ../src/dock.c:1013 msgid "Keep Icon(s)" msgstr "Dr¾ ikonu/ikony" -#: ../src/dock.c:1018 +#: ../src/dock.c:1015 msgid "Move Icon(s) To" msgstr "Pøesunou ikonu/ikony na" -#: ../src/dock.c:1023 +#: ../src/dock.c:1020 msgid "Remove Icon(s)" msgstr "Odstraò ikonu/ikony" -#: ../src/dock.c:1025 +#: ../src/dock.c:1022 msgid "Attract Icons" msgstr "Chytej ikony" -#: ../src/dock.c:1028 +#: ../src/dock.c:1025 msgid "Launch" msgstr "Odstartovat" -#: ../src/dock.c:1034 +#: ../src/dock.c:1031 msgid "Settings..." msgstr "Nastavení..." -#: ../src/dock.c:1418 ../src/dock.c:1432 ../src/dock.c:1446 ../src/dock.c:1456 +#: ../src/dock.c:1410 ../src/dock.c:1424 ../src/dock.c:1438 ../src/dock.c:1448 #, c-format msgid "bad value in docked icon state info %s" msgstr "chybná hodnota stavu ukotvené ikony %s" -#: ../src/dock.c:1464 +#: ../src/dock.c:1456 #, c-format msgid "bad value in docked icon position %i,%i" msgstr "chybná hodnota pozice ukotvené ikony %i,%i" -#: ../src/dock.c:1693 +#: ../src/dock.c:1685 msgid "there are too many icons stored in dock. Ignoring what doesn't fit" msgstr "v doku je pøíli¹ mnoho ikon. Co se nevejde, je zanedbáno" #. icon->forced_dock = 1; -#: ../src/dock.c:1925 ../src/dock.c:2047 +#: ../src/dock.c:1917 ../src/dock.c:2046 msgid "Dock Icon" msgstr "Ukotvit ikonu" -#: ../src/dock.c:2948 ../src/dock.c:2952 +#: ../src/dock.c:2956 ../src/dock.c:2960 #, c-format msgid "Could not execute command \"%s\"" msgstr "Nelze provést pøíkaz \"%s\"" @@ -441,7 +440,7 @@ msgstr "DNS podpora nebylo zakompilov msgid "Icon Image" msgstr "Ikona" -#: ../src/dockedapp.c:343 ../src/winspector.c:1191 +#: ../src/dockedapp.c:343 ../src/winspector.c:1201 msgid "Browse..." msgstr "Hledat..." @@ -449,7 +448,7 @@ msgstr "Hledat..." msgid "Docked Application Settings" msgstr "Nastavení pro aplikaci v doku" -#: ../src/event.c:385 +#: ../src/event.c:393 msgid "stack overflow: too many dead processes" msgstr "pøeteèení zásobníku: pøíli¹ mnoho procesù ve stavu dead" @@ -465,7 +464,7 @@ msgstr "nelze vykreslit gradient: %s" msgid "error rendering image:%s" msgstr "nelze vykreslit obrázek:%s" -#: ../src/icon.c:182 ../src/wdefaults.c:402 +#: ../src/icon.c:182 ../src/wdefaults.c:408 #, c-format msgid "error loading image file \"%s\"" msgstr "ze souboru \"%s\" nelze naèíst obrázek" @@ -485,94 +484,99 @@ msgstr "nelze naj msgid "could not load default icon \"%s\":%s" msgstr "nelze naèíst standardní ikonu \"%s\":%s" -#: ../src/main.c:189 +#: ../src/main.c:204 msgid "could not exec window manager" msgstr "nelze spustit správce oken" -#: ../src/main.c:190 +#: ../src/main.c:205 msgid "Restart failed!!!" msgstr "Operace \"RESTART\" selhala!!!" -#: ../src/main.c:237 +#: ../src/main.c:252 #, c-format msgid "%s aborted.\n" msgstr "%s pøeru¹en.\n" -#: ../src/main.c:248 +#: ../src/main.c:263 #, c-format msgid "usage: %s [-options]\n" msgstr "pou¾ití: %s [-volby]\n" -#: ../src/main.c:249 +#: ../src/main.c:264 msgid "options:" msgstr "volby:" -#: ../src/main.c:251 +#: ../src/main.c:266 msgid " -nocpp \t\tdisable preprocessing of configuration files" msgstr " -nocpp \t\tneprovádìj pøedzpracování konfiguraèních souborù" -#: ../src/main.c:253 +#: ../src/main.c:268 msgid " -nodock\t\tdo not open the application Dock" msgstr " -nodock\t\tnezobrazuj \"hnízdo\" pro ikony" -#: ../src/main.c:254 +#: ../src/main.c:269 msgid " -noclip\t\tdo not open the workspace Clip" msgstr " -noclip\t\tneotvírat aplikaci Sponku" #. #. puts(_(" -locale locale locale to use")); #. -#: ../src/main.c:258 +#: ../src/main.c:273 msgid " -visualid visualid\tvisual id of visual to use" msgstr "" " -visualid visualid\\tèíslo obrazového módu(visual id), který bude pou¾it" -#: ../src/main.c:259 +#: ../src/main.c:274 msgid " -display host:dpy\tdisplay to use" msgstr " -display host:dpy\tkterý display pou¾ít" -#: ../src/main.c:260 +#: ../src/main.c:275 +msgid " -static\t\tdo not update or save configurations" +msgstr " -static\t\tneobnovovat a neukládat konfigurace" + +#: ../src/main.c:276 msgid " -version\t\tprint version and exit" msgstr " -version\t\tzobraz verzi a konec" -#: ../src/main.c:272 +#: ../src/main.c:288 #, c-format msgid "" "could not find user GNUstep directory (%s).\n" "Make sure you have installed Window Maker correctly and run wmaker.inst" msgstr "" "nelze najít u¾ivatelùv adresáø GNUstep (%s).\n" -"Ujistìte se, ¾e máte Window Maker správnì nainstalován, pøípadnì proveïte wmaker.inst" +"Ujistìte se, ¾e máte Window Maker správnì nainstalován, pøípadnì proveïte " +"wmaker.inst" -#: ../src/main.c:294 +#: ../src/main.c:309 #, c-format msgid "%s:could not execute initialization script" msgstr "%s:nelze provést inicializaèní skript" -#: ../src/main.c:313 +#: ../src/main.c:328 #, c-format msgid "%s:could not execute exit script" msgstr "%s:nelze provést ukonèovací skript" -#: ../src/main.c:370 ../src/main.c:377 ../src/main.c:384 +#: ../src/main.c:382 ../src/main.c:389 ../src/main.c:396 ../src/main.c:410 #, c-format msgid "too few arguments for %s" msgstr "nedostatek argumetù pro %s" -#: ../src/main.c:388 +#: ../src/main.c:400 #, c-format msgid "bad value for visualid: \"%s\"" msgstr "chybná hodnota pro typ visual: \"%s\"" -#: ../src/main.c:429 +#: ../src/main.c:458 msgid "X server does not support locale" msgstr "X server nepodporuje nastavení místních zvyklostí" -#: ../src/main.c:432 +#: ../src/main.c:461 msgid "cannot set locale modifiers" msgstr "nelze nastavit modifikátory místních zvyklostí" -#: ../src/main.c:449 +#: ../src/main.c:478 #, c-format msgid "could not open display \"%s\"" msgstr "nelze otevøít displej \"%s\"" @@ -603,53 +607,53 @@ msgstr "" msgid "your machine is misconfigured. HOST is set to %s" msgstr "vá¹ poèítaè není správnì nakonfigurován. Promìnná HOST nastavena na %s" -#: ../src/misc.c:810 +#: ../src/misc.c:843 msgid "selection timed-out" msgstr "time out pøi výbìru" -#: ../src/misc.c:825 +#: ../src/misc.c:858 msgid "Program Arguments" msgstr "Argumenty Programu" -#: ../src/misc.c:844 +#: ../src/misc.c:877 msgid "Enter command arguments:" msgstr "Zadejte argumenty pro pøíkaz:" -#: ../src/misc.c:870 +#: ../src/misc.c:903 msgid "unable to get dropped data from DND drop" msgstr "nelze získat data z DND operace drop" -#: ../src/misc.c:878 +#: ../src/misc.c:911 msgid "error getting dropped data from DND drop" msgstr "chyba pøi získávání dat z operace DND drop" -#: ../src/misc.c:884 +#: ../src/misc.c:917 msgid "out of memory while getting data from DND drop" msgstr "nedostatek pamìti pøi ètení dat z DND operace drop" -#: ../src/misc.c:928 ../src/misc.c:1048 +#: ../src/misc.c:961 ../src/misc.c:1081 #, c-format msgid "out of memory during expansion of \"%s\"" msgstr "nedostatek pamìti pøi expanzi \"%s\"" -#: ../src/misc.c:982 +#: ../src/misc.c:1015 msgid "out of memory during expansion of \"%w\"" msgstr "nedostatek pamìti pøi expanzi \"%w\"" -#: ../src/misc.c:1001 +#: ../src/misc.c:1034 msgid "out of memory during expansion of \"%a\"" msgstr "nedostatek pamìti pøi expanzi \"%a\"" -#: ../src/misc.c:1027 +#: ../src/misc.c:1060 #, c-format msgid "out of memory during expansion of \"%d\"" msgstr "nedostatek pamìti pøi expanzi \"%d\"" -#: ../src/misc.c:1041 +#: ../src/misc.c:1074 msgid "selection not available" msgstr "výbìr není dostupný" -#: ../src/misc.c:1114 ../src/misc.c:1120 +#: ../src/misc.c:1146 ../src/misc.c:1152 #, c-format msgid "bad window name value in %s state info" msgstr "chybné jméno okna ve stavové informaci %s" @@ -751,67 +755,83 @@ msgstr "nelze zpracovat barvu \"%s\"" msgid "could not allocate color \"%s\"" msgstr "nelze alokovat polo¾ku pro barvu \"%s\"" -#: ../src/rootmenu.c:205 ../src/rootmenu.c:207 ../src/rootmenu.c:236 +#: ../src/rootmenu.c:215 ../src/rootmenu.c:217 msgid "Exit" msgstr "Konec" -#: ../src/rootmenu.c:206 +#: ../src/rootmenu.c:216 msgid "Exit window manager?" msgstr "Ukonèit mana¾era oken?" -#: ../src/rootmenu.c:234 +#: ../src/rootmenu.c:265 msgid "Close X session" msgstr "Ukonèit sezení X" -#: ../src/rootmenu.c:235 +#: ../src/rootmenu.c:266 msgid "" "Close Window System session?\n" +"Kill might close applications with unsaved data." +msgstr "" +"Ukonèit sezení?\n" +"Ukonèením aplikací mù¾e dojít ke ztrátì dat." + +#: ../src/rootmenu.c:268 ../src/winmenu.c:340 +msgid "Close" +msgstr "Uzavøi" + +#: ../src/rootmenu.c:279 +msgid "Kill X session" +msgstr "Ukonèit sezení X" + +#: ../src/rootmenu.c:280 +msgid "" +"Kill Window System session?\n" "(all applications will be closed)" msgstr "" "Ukonèit sezení?\n" "(v¹echny aplikace budou uzavøeny)" -#: ../src/rootmenu.c:454 +#: ../src/rootmenu.c:526 #, c-format msgid "%s:invalid kbd shortcut specification \"%s\" for entry %s" msgstr "%s:chybná specifikace klávesové zkratky \"%s\" pro polo¾ku %s" -#: ../src/rootmenu.c:462 +#: ../src/rootmenu.c:534 #, c-format msgid "%s:invalid key in shortcut \"%s\" for entry %s" msgstr "%s:chybná klávesa v klávesové zkratce \"%s\" pro polo¾ku %s" -#: ../src/rootmenu.c:515 +#: ../src/rootmenu.c:587 #, c-format msgid "%s: unmatched '\"' in menu file" msgstr "%s: neodpovídající '\"' v souboru s menu" -#: ../src/rootmenu.c:565 +#: ../src/rootmenu.c:637 #, c-format msgid "%s: missing command" msgstr "%s: oèekávám pøíkaz" -#: ../src/rootmenu.c:598 +#: ../src/rootmenu.c:670 #, c-format msgid "invalid OPEN_MENU specification: %s" msgstr "chybná specifikace OPEN_MENU: %s" -#: ../src/rootmenu.c:663 +#: ../src/rootmenu.c:735 #, c-format msgid "%s:could not stat menu" msgstr "%s:nelze provést operaci 'stat' na menu" -#: ../src/rootmenu.c:671 +#: ../src/rootmenu.c:743 #, c-format msgid "%s:could not stat menu :%s" msgstr "%s:nelze provést operaci 'stat' na menu: %s" -#: ../src/rootmenu.c:689 +#: ../src/rootmenu.c:761 #, c-format msgid "too many parameters in OPEN_MENU: %s" msgstr "pøíli¹ mnoho parametrù pro pøíkaz OPEN_MENU: %s" -#: ../src/rootmenu.c:725 +#: ../src/rootmenu.c:797 msgid "" "There are more than one WORKSPACE_MENU commands in the applications menu. " "Only one is allowed." @@ -819,151 +839,177 @@ msgstr "" "V aplikaèním menu je více ne¾ jeden pøíkaz WORKSPACE_MENU. Je povolen jen " "jeden." -#: ../src/rootmenu.c:754 ../src/rootmenu.c:772 +#: ../src/rootmenu.c:826 ../src/rootmenu.c:844 #, c-format msgid "%s:missing parameter for menu command \"%s\"" msgstr "%s:pro pøíkaz menu \"%s\" oèekávám parametr" -#: ../src/rootmenu.c:835 +#: ../src/rootmenu.c:907 #, c-format msgid "%s:unknown command \"%s\" in menu config." msgstr "%s:neznámý pøíkaz \"%s\" v konfiguraci menu." -#: ../src/rootmenu.c:843 +#: ../src/rootmenu.c:915 #, c-format msgid "%s:can't add shortcut for entry \"%s\"" msgstr "%s: pro polo¾ku \"%s\" nelze pøidat klávesou zkratku" -#: ../src/rootmenu.c:980 +#: ../src/rootmenu.c:1052 #, c-format msgid "%s:maximal line size exceeded in menu config: %s" msgstr "%s:v konfiguraci menu %s byla pøekroèena maximální délka øádky" -#: ../src/rootmenu.c:1002 ../src/rootmenu.c:1094 ../src/rootmenu.c:1195 +#: ../src/rootmenu.c:1074 ../src/rootmenu.c:1166 ../src/rootmenu.c:1267 #, c-format msgid "%s:missing command in menu config: %s" msgstr "%s:v konfiguraci menu %s oèekávám pøíkaz" -#: ../src/rootmenu.c:1032 +#: ../src/rootmenu.c:1104 #, c-format msgid "%s:syntax error in menu file:END declaration missing" msgstr "%s:syntaktická chyba v souboru s menu: oèekávána deklarace END" -#: ../src/rootmenu.c:1061 ../src/rootmenu.c:1160 +#: ../src/rootmenu.c:1133 ../src/rootmenu.c:1232 msgid "could not make arguments for menu file preprocessor" msgstr "nelze vytvoøit argumety pro preprocesor souboru s menu" -#: ../src/rootmenu.c:1067 ../src/rootmenu.c:1167 +#: ../src/rootmenu.c:1139 ../src/rootmenu.c:1239 #, c-format msgid "%s:could not open/preprocess menu file" msgstr "%s: nelze otevøít nebo pøedzpracovat soubor s menu" -#: ../src/rootmenu.c:1079 ../src/rootmenu.c:1180 +#: ../src/rootmenu.c:1151 ../src/rootmenu.c:1252 #, c-format msgid "%s:could not open menu file" msgstr "%s:nelze otevøít soubor s menu" -#: ../src/rootmenu.c:1106 +#: ../src/rootmenu.c:1178 #, c-format msgid "%s:invalid menu file. MENU command is missing" msgstr "%s:syntaktická chyba v souboru s menu: oèekáván pøíkaz MENU" -#: ../src/rootmenu.c:1115 +#: ../src/rootmenu.c:1187 msgid "error reading preprocessed menu data" msgstr "chyba pøi ètení pøedzpracovaného souboru s menu" -#: ../src/rootmenu.c:1207 +#: ../src/rootmenu.c:1279 #, c-format msgid "%s:no title given for the root menu" msgstr "%s: pro hlavní menu nebyl urèen titulek" -#: ../src/rootmenu.c:1261 ../src/rootmenu.c:1324 ../src/rootmenu.c:1368 +#: ../src/rootmenu.c:1336 ../src/rootmenu.c:1399 ../src/rootmenu.c:1443 #, c-format msgid "out of memory while constructing directory menu %s" msgstr "nedostatek pamìti pøi konstrukci menu z obsahu adresáøe %s" -#: ../src/rootmenu.c:1271 +#: ../src/rootmenu.c:1346 #, c-format msgid "%s:could not stat file \"%s\" in menu directory" msgstr "%s:nelze provést 'stat' na soubory \"%s\" v adresáøi s menu" -#: ../src/rootmenu.c:1417 +#: ../src/rootmenu.c:1492 msgid "Commands" msgstr "Pøíkazy" -#: ../src/rootmenu.c:1419 +#: ../src/rootmenu.c:1494 msgid "Exit..." msgstr "Konec..." -#: ../src/rootmenu.c:1486 +#: ../src/rootmenu.c:1567 #, c-format msgid "could not find menu file \"%s\" referenced in WMRootMenu" msgstr "nelze najít soubor s menu \"%s\", odkazovaný z WMRootMenu" -#: ../src/rootmenu.c:1493 +#: ../src/rootmenu.c:1574 #, c-format msgid "could not access menu \"%s\" referenced in WMRootMenu" msgstr "není pøístup k souboru s menu \"%s\", odkazovaném z WMRootMenu" -#: ../src/rootmenu.c:1521 ../src/rootmenu.c:1576 +#: ../src/rootmenu.c:1585 +#, c-format +msgid "" +"using default menu file \"%s\" as the menu referenced in WMRootMenu could " +"not be found " +msgstr "pou¾itý soubor s menu \"%s\", odkazovaný z WMRootMenu není nalezen " + +#: ../src/rootmenu.c:1608 ../src/rootmenu.c:1663 #, c-format msgid "%s:format error in root menu configuration \"%s\"" msgstr "%s:chybný formát v konfiguraci hlavního menu \"%s\"" -#: ../src/screen.c:402 +#: ../src/screen.c:412 msgid "could not load logo image for panels" msgstr "pro panely nelze naèíst logo" -#: ../src/screen.c:405 +#: ../src/screen.c:415 #, c-format msgid "error making logo image for panel:%s" msgstr "chyba pøi vytváøení obrázku s logem pro panel:%s" -#: ../src/screen.c:584 +#: ../src/screen.c:594 #, c-format msgid "could not initialize graphics library context: %s" msgstr "nelze inicializovat kontext grafické knihovny: %s" -#: ../src/session.c:113 ../src/wdefaults.c:562 ../src/winspector.c:343 +#: ../src/screen.c:805 +#, c-format +msgid "could not save session state in %s" +msgstr "stav sezení nelze do %s ulo¾it" + +#: ../src/session.c:138 ../src/wdefaults.c:569 ../src/winspector.c:345 #, c-format msgid "can't convert \"%s\" to boolean" msgstr "\"%s\" nelze zkonvertovat na boolean" -#: ../src/stacking.c:88 +#: ../src/session.c:625 ../src/session.c:719 +msgid "end of memory while saving session state" +msgstr "nedostatek pamìti pøi ukládání stavu sezení" + +#. This is not fatal but can mean the session manager exited. +#. * If the session manager exited normally we would get a +#. * Die message, so this probably means an abnormal exit. +#. * If the sm was the last client of session, then we'll die +#. * anyway, otherwise we can continue doing our stuff. +#. +#: ../src/session.c:856 +msgid "connection to the session manager was lost" +msgstr "pøipojení ke správci sezení se ztratilo" + +#: ../src/stacking.c:69 msgid "could not get window list!!" msgstr "nelze získat seznam oken!!!" -#: ../src/startup.c:187 +#: ../src/startup.c:197 #, c-format msgid "internal X error: %s\n" msgstr "interní chyba systému X: %s\n" -#: ../src/startup.c:250 +#: ../src/startup.c:259 #, c-format msgid "got signal %i (%s) - restarting\n" msgstr "pøijat signál %i (%s) - restartuji\n" -#: ../src/startup.c:252 +#: ../src/startup.c:261 #, c-format msgid "got signal %i - restarting\n" msgstr "pøijat signál %i - restartuji\n" -#: ../src/startup.c:266 +#: ../src/startup.c:275 #, c-format msgid "%s: Received signal SIGTERM. Exiting..." msgstr "%s: Pøijat signál SIGTERM. Konèím..." -#: ../src/startup.c:278 +#: ../src/startup.c:287 #, c-format msgid "got signal %i (%s)\n" msgstr "pøijat signál %i (%s)\n" -#: ../src/startup.c:280 +#: ../src/startup.c:289 #, c-format msgid "got signal %i\n" msgstr "získán signál %i\n" -#: ../src/startup.c:285 +#: ../src/startup.c:294 msgid "" "crashed while trying to do some post-crash cleanup. Aborting immediatelly." msgstr "" @@ -971,29 +1017,29 @@ msgstr "" #. restart another window manager so that the X session doesn't #. * go to space -#: ../src/startup.c:296 +#: ../src/startup.c:305 msgid "trying to start alternative window manager..." msgstr "zkou¹ím odstartovat jiný okenní mana¾er" -#: ../src/startup.c:691 +#: ../src/startup.c:714 #, c-format msgid "icon size is configured to %i, but it's too small. Using 16, instead\n" msgstr "je nakonfigurována velikost ikony %i, to je ov¹em málo. Pou¾iji 16\n" -#: ../src/startup.c:735 +#: ../src/startup.c:758 msgid "it seems that there already is a window manager running" msgstr "mám ten pocit, ¾e zde ji¾ jeden mana¾er oken bì¾í" -#: ../src/startup.c:741 +#: ../src/startup.c:764 #, c-format msgid "could not manage screen %i" msgstr "nelze pøipojit obrazovku %i" -#: ../src/startup.c:797 +#: ../src/startup.c:820 msgid "could not manage any screen" msgstr "nelze pøipojit ¾ádnou obrazovku" -#: ../src/switchmenu.c:124 +#: ../src/switchmenu.c:112 msgid "Windows" msgstr "Okna" @@ -1012,12 +1058,12 @@ msgstr "nelze na msgid "could not render texture: %s" msgstr "nelze vykreslit texturu: %s" -#: ../src/wdefaults.c:396 +#: ../src/wdefaults.c:402 #, c-format msgid "could not find icon file \"%s\"" msgstr "nelze získat soubor s ikonou \"%s\"" -#: ../src/window.c:2213 ../src/window.c:2356 +#: ../src/window.c:2303 ../src/window.c:2435 msgid "" "the NumLock, ScrollLock or similar key seems to be turned on.\n" "Turn it off or some mouse actions and keyboard shortcuts will not work." @@ -1025,98 +1071,98 @@ msgstr "" "Klávesa NumLock, ScrollLock nebo podobná je zøejmì zapnuta..\n" "Vypnìte ji, nebo nìkteré akce my¹i a klávesové zkratky nebudou fungovat." -#: ../src/winmenu.c:182 -msgid "could not create workspace submenu for window menu" -msgstr "nelze vytvoøit submenu pracovní plochy pro menu oken" +#: ../src/winmenu.c:197 ../src/winmenu.c:205 +msgid "Shortcut" +msgstr "Zkratka" + +#: ../src/winmenu.c:247 ../src/winmenu.c:263 +msgid "could not create submenu for window menu" +msgstr "nelze vytvoøit submenu pro menu oken" #. #. * Warning: If you make some change that affects the order of the #. * entries, you must update the command #defines in the top of #. * this file. #. -#: ../src/winmenu.c:204 +#: ../src/winmenu.c:289 msgid "(Un)Maximize" msgstr "(De)Maximalizace" -#: ../src/winmenu.c:212 +#: ../src/winmenu.c:297 msgid "Miniaturize" msgstr "Miniaturizace" -#: ../src/winmenu.c:221 +#: ../src/winmenu.c:306 msgid "(Un)Shade" msgstr "Titulek/Okno" -#: ../src/winmenu.c:229 +#: ../src/winmenu.c:314 msgid "Hide" msgstr "Skryj" -#: ../src/winmenu.c:236 -msgid "Hide Others" -msgstr "Skryj ostatní" - -#: ../src/winmenu.c:238 +#: ../src/winmenu.c:322 msgid "Select" msgstr "Vyber" -#: ../src/winmenu.c:246 +#: ../src/winmenu.c:330 msgid "Move To" msgstr "Pøesuò na" -#: ../src/winmenu.c:251 +#: ../src/winmenu.c:335 msgid "Attributes..." msgstr "Atributy..." -#: ../src/winmenu.c:253 -msgid "Close" -msgstr "Uzavøi" +#: ../src/winmenu.c:337 +msgid "Select Shortcut" +msgstr "Vybrat zkratku" -#: ../src/winspector.c:277 +#: ../src/winspector.c:279 #, c-format msgid "Could not find icon \"%s\" specified for this window" msgstr "Pro toto okno nelze najít specifikovanou ikonu (%s)" -#: ../src/winspector.c:293 +#: ../src/winspector.c:295 #, c-format msgid "Could not open specified icon \"%s\":%s" msgstr "Nelze otevøít pecifikovanou ikonu \"%s\":%s" -#: ../src/winspector.c:989 +#: ../src/winspector.c:993 msgid "Save" msgstr "Ulo¾" -#: ../src/winspector.c:995 +#: ../src/winspector.c:1001 msgid "Apply" msgstr "Nastav" -#: ../src/winspector.c:1001 +#: ../src/winspector.c:1007 msgid "Revert" msgstr "Zpìt" -#: ../src/winspector.c:1010 ../src/winspector.c:1020 +#: ../src/winspector.c:1016 ../src/winspector.c:1026 msgid "Window Specification" msgstr "Specifikace okna" -#: ../src/winspector.c:1011 +#: ../src/winspector.c:1017 msgid "Window Attributes" msgstr "Atributy okna" -#: ../src/winspector.c:1012 +#: ../src/winspector.c:1018 msgid "Advanced Options" msgstr "Dal¹í volby" -#: ../src/winspector.c:1013 +#: ../src/winspector.c:1019 msgid "Icon and Initial Workspace" msgstr "Ikona a poèáteèní plocha" -#: ../src/winspector.c:1014 +#: ../src/winspector.c:1020 msgid "Application Specific" msgstr "Atributy aplikace" -#: ../src/winspector.c:1028 +#: ../src/winspector.c:1034 msgid "Defaults for all windows" msgstr "Standard pro v¹echna okna" -#: ../src/winspector.c:1064 +#: ../src/winspector.c:1070 msgid "" "The configuration will apply to all\n" "windows that have their WM_CLASS property set to the above selected\n" @@ -1126,139 +1172,144 @@ msgstr "" "kteøí mají nastavenu vlastnost WM_CLASS na vybranou vý¹e\n" "(pøi ulo¾ení této konfigurace)" -#: ../src/winspector.c:1071 +#: ../src/winspector.c:1077 msgid "Attributes" msgstr "Atributy" -#: ../src/winspector.c:1081 +#: ../src/winspector.c:1087 msgid "Disable titlebar" msgstr "Zaka¾ titulek" -#: ../src/winspector.c:1085 +#: ../src/winspector.c:1091 msgid "Disable resizebar" msgstr "Nelze zvìt¹it" -#: ../src/winspector.c:1089 +#: ../src/winspector.c:1095 msgid "Disable close button" msgstr "Zaka¾ prvek pro uzavøení" -#: ../src/winspector.c:1093 +#: ../src/winspector.c:1099 msgid "Disable miniaturize button" msgstr "Zaka¾ minimalizaci" -#: ../src/winspector.c:1097 -msgid "Keep on top" -msgstr "V¾dy navrchu" +#: ../src/winspector.c:1103 +msgid "Keep on top / floating" +msgstr "V¾dy navrch / plovoucí" -#: ../src/winspector.c:1101 +#: ../src/winspector.c:1107 +msgid "Keep on bottom / sunken" +msgstr "Dr¾et vespod" + +#: ../src/winspector.c:1111 msgid "Omnipresent" msgstr "V¹echny plochy" -#: ../src/winspector.c:1105 +#: ../src/winspector.c:1115 msgid "Start Miniaturized" msgstr "Odstartovat jako ikonu" -#: ../src/winspector.c:1109 +#: ../src/winspector.c:1119 msgid "Skip window list" msgstr "Vynechat ze seznamu oken" -#: ../src/winspector.c:1123 +#: ../src/winspector.c:1133 msgid "Advanced" msgstr "Dal¹í volby" -#: ../src/winspector.c:1133 +#: ../src/winspector.c:1143 msgid "Ignore HideOthers" msgstr "Ignoruj \"Skryj Ostatní\"" -#: ../src/winspector.c:1137 +#: ../src/winspector.c:1147 msgid "Don't bind keyboard shortcuts" msgstr "Klávesnice jen pro aplikaci" -#: ../src/winspector.c:1141 +#: ../src/winspector.c:1151 msgid "Don't bind mouse clicks" msgstr "My¹ jen pro aplikaci" -#: ../src/winspector.c:1145 +#: ../src/winspector.c:1155 msgid "Keep inside screen" msgstr "V¾dy na obrazovce" -#: ../src/winspector.c:1149 +#: ../src/winspector.c:1159 msgid "Don't let it take focus" msgstr "Nepovol zamìøení" -#: ../src/winspector.c:1153 +#: ../src/winspector.c:1163 msgid "Don't Save Session" msgstr "Neukládat stav sezení" -#: ../src/winspector.c:1157 +#: ../src/winspector.c:1167 msgid "Emulate Application Icon" msgstr "Emulovat aplikaèní ikonu" -#: ../src/winspector.c:1172 +#: ../src/winspector.c:1182 msgid "" "Enable the \"Don't bind...\" options to allow the application to receive all " "mouse or keyboard events." msgstr "" -"Povolte volby \"...jen pro aplikaci\", aby aplikace mohla získat v¹echny události od " -"klávesnice a my¹i." +"Povolte volby \"...jen pro aplikaci\", aby aplikace mohla získat v¹echny " +"události od klávesnice a my¹i." -#: ../src/winspector.c:1179 +#: ../src/winspector.c:1189 msgid "Miniwindow Image" msgstr "Ikona" -#: ../src/winspector.c:1198 +#: ../src/winspector.c:1208 msgid "Update" msgstr "Zapi¹" -#: ../src/winspector.c:1213 +#: ../src/winspector.c:1223 msgid "Icon file name:" msgstr "Soubor ikony:" -#: ../src/winspector.c:1225 +#: ../src/winspector.c:1235 msgid "Ignore client supplied icon" msgstr "Ignoruj klientovy ikony" -#: ../src/winspector.c:1232 +#: ../src/winspector.c:1242 msgid "Initial Workspace" msgstr "Poèáteèní plocha" -#: ../src/winspector.c:1237 +#: ../src/winspector.c:1247 msgid "Nowhere in particular" msgstr "Nikde neurèeno" -#: ../src/winspector.c:1271 +#: ../src/winspector.c:1281 msgid "Application Wide" msgstr "Atributy aplikace" -#: ../src/winspector.c:1281 +#: ../src/winspector.c:1291 msgid "Start Hidden" msgstr "Startuj skrytì" -#: ../src/winspector.c:1285 +#: ../src/winspector.c:1295 msgid "No application icon" msgstr "Bez aplikaèní ikony" -#: ../src/workspace.c:89 ../src/workspace.c:90 ../src/workspace.c:423 +#: ../src/workspace.c:96 ../src/workspace.c:97 ../src/workspace.c:465 #, c-format msgid "Workspace %i" msgstr "Plocha %i" -#: ../src/workspace.c:471 +#: ../src/workspace.c:513 msgid "Workspaces" msgstr "Pracovní plochy" -#: ../src/workspace.c:473 +#: ../src/workspace.c:515 msgid "could not create Workspace menu" msgstr "nelze vytvoøit menu pracovních ploch" -#: ../src/workspace.c:480 +#: ../src/workspace.c:522 msgid "New" msgstr "Nová" -#: ../src/workspace.c:481 +#: ../src/workspace.c:523 msgid "Destroy Last" msgstr "Zru¹ poslední" #: ../src/xutil.c:228 msgid "invalid data in selection" msgstr "ve výbìru jsou nepøípustná data" +� \ No newline at end of file diff --git a/po/ko.po b/po/ko.po index 48cad4bf..d495deda 100644 --- a/po/ko.po +++ b/po/ko.po @@ -1,32 +1,45 @@ -# Korean message file for WindowMaker -# Last Update: version 0.20.2 +# WindowMaker-0.20.3 main po file. +# Copyright (C) 1998 Free Software Foundation, Inc. +# Byeong-Chan, Kim <redhands@linux.sarang.net>, 1998. +# Update: CHOI Junho <cjh@kr.freebsd.org>, 1998/12. # msgid "" msgstr "" -"Date: 1998-07-21 00:20:01+0900\n" -"From: Byeong-Chan, Kim <redhands@linux.sarang.net>\n" +"POT-Creation-Date: 1998-12-07 19:14+0900\n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=EUC-KR\n" "Content-Transfer-Encoding: 8-bit\n" +"Date: 1998-07-21 00:20:01+0900\n" +"From: Byeong-Chan, Kim <redhands@linux.sarang.net>\n" "Xgettext-Options: --default-domain=WindowMaker --add-comments --keyword=_\n" -"Files: ../main.c ../event.c ../window.c ../startup.c ../shutdown.c ../wcore.c ../properties.c ../texture.c ../actions.c ../menu.c ../client.c ../pixmap.c ../image.c ../gradient.c ../button.c ../screen.c ../icon.c ../rootmenu.c ../dialog.c ../resource.c ../moveres.c ../application.c ../colormap.c ../raster.c ../placement.c ../misc.c ../appmenu.c ../keybind.c ../stacking.c ../appicon.c ../switchmenu.c ../dock.c ../winmenu.c\n" - -#: ../src/appicon.c:509 ../src/dialog.c:215 ../src/dialog.c:271 ../src/dock.c:2955 ../src/dockedapp.c:206 ../src/winspector.c:279 ../src/winspector.c:295 +"Files: ../main.c ../event.c ../window.c ../startup.c ../shutdown.c " +"../wcore.c ../properties.c ../texture.c ../actions.c ../menu.c ../client.c " +"../pixmap.c ../image.c ../gradient.c ../button.c ../screen.c ../icon.c " +"../rootmenu.c ../dialog.c ../resource.c ../moveres.c ../application.c " +"../colormap.c ../raster.c ../placement.c ../misc.c ../appmenu.c ../keybind.c " +"../stacking.c ../appicon.c ../switchmenu.c ../dock.c ../winmenu.c\n" + +#: ../src/appicon.c:509 ../src/dialog.c:215 ../src/dialog.c:271 +#: ../src/dock.c:2963 ../src/dockedapp.c:206 ../src/winspector.c:281 +#: ../src/winspector.c:297 msgid "Error" -msgstr "¿¡·¯" +msgstr "¿À·ù" #: ../src/appicon.c:510 msgid "Could not open specified icon file" -msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜ ¿­Áö ¸øÇÔ" +msgstr "ÁöÁ¤ÇÑ ¾ÆÀÌÄÜÀ» ¿­Áö ¸øÇÔ." -#: ../src/appicon.c:511 ../src/dialog.c:114 ../src/dialog.c:215 ../src/dialog.c:271 ../src/dialog.c:451 ../src/dock.c:420 ../src/dock.c:2956 ../src/dockedapp.c:206 ../src/dockedapp.c:350 ../src/winspector.c:280 ../src/winspector.c:296 +#: ../src/appicon.c:511 ../src/dialog.c:114 ../src/dialog.c:215 +#: ../src/dialog.c:271 ../src/dialog.c:451 ../src/dock.c:420 +#: ../src/dock.c:2964 ../src/dockedapp.c:206 ../src/dockedapp.c:350 +#: ../src/winspector.c:282 ../src/winspector.c:298 msgid "OK" -msgstr "" +msgstr "È®ÀÎ" #: ../src/appicon.c:532 ../src/dock.c:268 ../src/winmenu.c:85 msgid "Kill Application" -msgstr "°­Á¦ Á¾·á" +msgstr "¾îÇø®ÄÉÀÌ¼Ç Á¾·á" #: ../src/appicon.c:533 ../src/dock.c:269 ../src/winmenu.c:86 msgid "" @@ -35,8 +48,8 @@ msgid "" "Please confirm." msgstr "" "¾ÖÇø®ÄÉÀ̼ÇÀ» °­Á¦ Á¾·áÇÕ´Ï´Ù.\n" -"ÀúÀåµÇÁö ¾ÊÀº º´°æ »çÇ×À» ÀÒ°Ô µË´Ï´Ù.\n" -"Á¾·áÇϽðڽÀ´Ï±î?" +"ÀúÀåÇÏÁö ¾ÊÀº º¯°æ »çÇ×Àº ÀÒ°Ô µË´Ï´Ù.\n" +"°è¼Ó ÇϽðڽÀ´Ï±î?" #: ../src/appicon.c:534 ../src/dock.c:270 ../src/winmenu.c:87 msgid "Yes" @@ -46,177 +59,220 @@ msgstr " msgid "No" msgstr "¾Æ´Ï¿À" -#: ../src/appicon.c:548 ../src/dock.c:1030 +#: ../src/appicon.c:548 ../src/dock.c:1027 msgid "Unhide Here" msgstr "¼û±ä °Í ÀÌ°÷¿¡ º¸ÀÓ" -#: ../src/appicon.c:549 ../src/dock.c:1032 +#: ../src/appicon.c:549 ../src/dock.c:1029 msgid "(Un)Hide" msgstr "(¾È)¼û±è" #: ../src/appicon.c:550 msgid "Set Icon..." -msgstr "¾ÆÀÌÄÜ ¼³Á¤" +msgstr "¾ÆÀÌÄÜ ÁöÁ¤..." -#: ../src/appicon.c:551 ../src/dock.c:1036 ../src/winmenu.c:260 +#: ../src/appicon.c:551 ../src/dock.c:1033 ../src/rootmenu.c:268 +#: ../src/rootmenu.c:282 ../src/winmenu.c:347 msgid "Kill" -msgstr "°­Á¦ Á¾·á" +msgstr "Á¾·á" -#: ../src/defaults.c:670 ../src/startup.c:681 ../src/startup.c:699 ../src/startup.c:705 +#: ../src/defaults.c:689 ../src/startup.c:704 ../src/startup.c:722 +#: ../src/startup.c:728 +#, c-format msgid "could not read domain \"%s\" from defaults database" -msgstr "" +msgstr "±âº» µ¥ÀÌÅͺ£À̽º¿¡¼­ µµ¸ÞÀÎ \"%s\"¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:716 ../src/defaults.c:840 ../src/defaults.c:879 ../src/defaults.c:909 +#: ../src/defaults.c:735 ../src/defaults.c:859 ../src/defaults.c:898 +#: ../src/defaults.c:928 +#, c-format msgid "Domain %s (%s) of defaults database is corrupted!" -msgstr "" +msgstr "±âº» µ¥ÀÌÅͺ£À̽ºÀÇ µµ¸ÞÀÎ %s (%s)ÀÌ ±úÁ³½À´Ï´Ù!" -#: ../src/defaults.c:721 ../src/defaults.c:861 ../src/defaults.c:892 ../src/defaults.c:918 +#: ../src/defaults.c:740 ../src/defaults.c:880 ../src/defaults.c:911 +#: ../src/defaults.c:937 +#, c-format msgid "could not load domain %s from user defaults database" -msgstr "" +msgstr "»ç¿ëÀÚ ±âº» µ¥ÀÌÅͺ£À̽º¿¡¼­ µµ¸ÞÀÎ %s¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:732 ../src/defaults.c:825 +#: ../src/defaults.c:751 ../src/defaults.c:844 +#, c-format msgid "Domain %s (%s) of global defaults database is corrupted!" -msgstr "" +msgstr "Àü¿ª ±âº» µ¥ÀÌÅͺ£À̽ºÀÇ µµ¸ÞÀÎ %s (%s)´Â ±úÁ³½À´Ï´Ù!" -#: ../src/defaults.c:751 ../src/defaults.c:830 +#: ../src/defaults.c:770 ../src/defaults.c:849 +#, c-format msgid "could not load domain %s from global defaults database" -msgstr "" +msgstr "Àü¿ª ±âº» µ¥ÀÌÅͺ£À̽º¿¡¼­ µµ¸ÞÀÎ %s¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:1220 +#: ../src/defaults.c:1239 +#, c-format msgid "wrong option value for key \"%s\". Should be one of %s" -msgstr "" +msgstr "Å° \"%s\"ÀÇ ¿É¼Ç Æ÷¸ËÀÌ À߸øµÊ. %sÁß ÇϳªÀ̾î¾ß ÇÕ´Ï´Ù" -#: ../src/defaults.c:1267 +#: ../src/defaults.c:1286 +#, c-format msgid "can't convert \"%s\" to boolean for key \"%s\"" -msgstr "" - -#: ../src/defaults.c:1272 ../src/defaults.c:1306 ../src/defaults.c:1338 ../src/defaults.c:1351 ../src/defaults.c:1366 ../src/defaults.c:1381 ../src/defaults.c:1452 ../src/defaults.c:1464 ../src/defaults.c:1719 ../src/defaults.c:1733 ../src/defaults.c:1771 ../src/defaults.c:1783 ../src/defaults.c:1795 ../src/defaults.c:1818 ../src/defaults.c:1845 ../src/defaults.c:1858 ../src/defaults.c:1871 ../src/defaults.c:1901 ../src/defaults.c:1942 ../src/defaults.c:1954 ../src/defaults.c:1966 ../src/defaults.c:1992 ../src/defaults.c:2012 ../src/defaults.c:2025 ../src/defaults.c:2040 ../src/defaults.c:2079 ../src/defaults.c:2144 +msgstr "\"%s\"¸¦ Å° \"%s\"¿¡ ´ëÇØ ºÎ¿ï °ªÀ¸·Î º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù" + +#: ../src/defaults.c:1291 ../src/defaults.c:1325 ../src/defaults.c:1357 +#: ../src/defaults.c:1370 ../src/defaults.c:1385 ../src/defaults.c:1399 +#: ../src/defaults.c:1470 ../src/defaults.c:1482 ../src/defaults.c:1737 +#: ../src/defaults.c:1754 ../src/defaults.c:1767 ../src/defaults.c:1805 +#: ../src/defaults.c:1817 ../src/defaults.c:1829 ../src/defaults.c:1852 +#: ../src/defaults.c:1879 ../src/defaults.c:1892 ../src/defaults.c:1905 +#: ../src/defaults.c:1935 ../src/defaults.c:1976 ../src/defaults.c:1988 +#: ../src/defaults.c:2000 ../src/defaults.c:2026 ../src/defaults.c:2046 +#: ../src/defaults.c:2059 ../src/defaults.c:2074 ../src/defaults.c:2113 +#: ../src/defaults.c:2178 +#, c-format msgid "using default \"%s\" instead" -msgstr "±âº»°ª \"%s\" ¸¦ ´ë½Å »ç¿ë" +msgstr "±âº»°ªÀÎ \"%s\" ¸¦ ´ë½Å »ç¿ëÇÔ" -#: ../src/defaults.c:1303 +#: ../src/defaults.c:1322 +#, c-format msgid "can't convert \"%s\" to integer for key \"%s\"" -msgstr "\"%s\" ÀÎ \"%s\" Å°ÀÇ °ªÀ» Á¤¼öÇüÀ¸·Î º¯È¯ ¸øÇÔ" +msgstr "\"%s\"¸¦ Å° \"%s\"¿¡ ´ëÇØ Á¤¼ö°ªÀ¸·Î º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:1333 ../src/defaults.c:1447 ../src/defaults.c:1714 ../src/defaults.c:1766 ../src/defaults.c:1937 ../src/wdefaults.c:544 ../src/wdefaults.c:580 +#: ../src/defaults.c:1352 ../src/defaults.c:1465 ../src/defaults.c:1732 +#: ../src/defaults.c:1749 ../src/defaults.c:1800 ../src/defaults.c:1971 +#: ../src/wdefaults.c:551 ../src/wdefaults.c:587 +#, c-format msgid "Wrong option format for key \"%s\". Should be %s." -msgstr "\"%s\" Å° ¿É¼Ç Æ÷¸ËÀÌ À߸øµÊ. %sÀÎ °Å °°À½." +msgstr "\"%s\" Å°ÀÇ ¿É¼Ç Æ÷¸ËÀÌ À߸øµÊ. %s À̾î¾ß ÇÕ´Ï´Ù." -#: ../src/defaults.c:1346 +#: ../src/defaults.c:1365 +#, c-format msgid "Incorrect number of elements in array for key \"%s\"." -msgstr "\"%s\" Å° ºÎºÐÀÇ ÀÎÀÚ ¼ö°¡ ¸ÂÁö ¾ÊÀ½" +msgstr "Å° \"%s\"¿¡ ´ëÇÑ ¹è¿­ÀÇ ¿ø¼Ò ¼ö°¡ À߸øµÇ¾ú½À´Ï´Ù." -#: ../src/defaults.c:1361 +#: ../src/defaults.c:1380 +#, c-format msgid "Wrong value for key \"%s\". Should be Coordinate." -msgstr "\"%s\" Å° °ªÀÌ À߸øµÊ. ÁÂÇ¥·Î º¸ÀÓ." +msgstr "\"%s\" Å° °ªÀÌ À߸øµÊ. ÁÂÇ¥°¡ µÇ¾î¾ß ÇÕ´Ï´Ù." -#: ../src/defaults.c:1376 +#: ../src/defaults.c:1395 +#, c-format msgid "can't convert array to integers for \"%s\"." -msgstr "\"%s\" ÀÇ °ªÀ» Á¤¼öÇüÀ¸·Î º¯È¯Ä¡ ¸øÇÔ." +msgstr "\"%s\"¿¡ ´ëÇØ ¹è¿­À» Á¤¼ö°ªÀ¸·Î º¯È¯ÇÒ ¼ö ¾øÀ½." -#: ../src/defaults.c:1560 ../src/defaults.c:1591 ../src/defaults.c:1603 ../src/defaults.c:1645 ../src/defaults.c:1685 +#: ../src/defaults.c:1578 ../src/defaults.c:1609 ../src/defaults.c:1621 +#: ../src/defaults.c:1663 ../src/defaults.c:1703 +#, c-format msgid "\"%s\" is not a valid color name" -msgstr "\"%s\" ´Â Á¦´ë·Î µÈ »ö»ó¸íÀÌ ¾Æ´Ô" +msgstr "\"%s\" ´Â ¿Ã¹Ù¸¥ »ö»ó¸íÀÌ ¾Æ´Ô" -#: ../src/defaults.c:1572 +#: ../src/defaults.c:1590 msgid "bad number of arguments in gradient specification" -msgstr "Gradient ½ºÆåÀÇ ÀÎÀÚ°¡ ¸ÂÁö ¾ÊÀ½" +msgstr "±×·¡µð¾ðÆ® ÁöÁ¤½Ã ÀμöÀÇ ¼ö°¡ À߸øµÇ¾ú½À´Ï´Ù" -#: ../src/defaults.c:1618 +#: ../src/defaults.c:1636 msgid "too few arguments in multicolor gradient specification" -msgstr "´Ù»ö gradient ½ºÆåÀÇ Àμö°¡ ³Ê¹« ÀÛÀ½" +msgstr "´ÙÁß»ö ±×·¡µð¾ðÆ® ÁöÁ¤½Ã ÀμöÀÇ ¼ö°¡ ³Ê¹« Àû½À´Ï´Ù" -#: ../src/defaults.c:1728 +#: ../src/defaults.c:1762 +#, c-format msgid "Error in texture specification for key \"%s\"" -msgstr "" +msgstr "Å° \"%s\"ÀÇ ÅؽºÃ³ ÁöÁ¤¿¡ ¿À·ù°¡ ÀÖ½À´Ï´Ù" -#: ../src/defaults.c:1779 ../src/defaults.c:1814 ../src/defaults.c:1950 ../src/defaults.c:1988 +#: ../src/defaults.c:1813 ../src/defaults.c:1848 ../src/defaults.c:1984 +#: ../src/defaults.c:2022 msgid "Too few elements in array for key \"WorkspaceBack\"." -msgstr "WorkspaceBack Å° ºÎºÐÀÇ ÀÎÀÚ°¡ ³Ê¹« ÀûÀ½" +msgstr "Å° \"WorkspaceBack\" ÀÇ ¹è¿­ ¿ø¼Ò ¼ö°¡ ³Ê¹« Àû½À´Ï´Ù." -#: ../src/defaults.c:1791 ../src/defaults.c:1962 +#: ../src/defaults.c:1825 ../src/defaults.c:1996 msgid "Wrong type for workspace background. Should be Texture." -msgstr "¹è°æ»ö ¼³Á¤ÀÌ À߸øµÊ. Texture·Î º¸ÀÓ." +msgstr "ÀÛ¾÷°ø°£ ¹è°æ Á¾·ù°¡ À߸øµÇ¾ú½À´Ï´Ù. ÅؽºÃ³À̾î¾ß ÇÕ´Ï´Ù." -#: ../src/defaults.c:1841 ../src/defaults.c:2008 +#: ../src/defaults.c:1875 ../src/defaults.c:2042 msgid "Cannot get color entry for key \"WorkspaceBack\"." -msgstr "\"WorkspaceBack\" Å°¿¡ Ä÷¯ Ç׸ñÀ» °¡Á®¿Ã ¼ö ¾øÀ½." +msgstr "Å° \"WorkspaceBack\"ÀÇ »ö»ó ¿£Æ®¸®¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù." -#: ../src/defaults.c:1853 ../src/defaults.c:2020 +#: ../src/defaults.c:1887 ../src/defaults.c:2054 +#, c-format msgid "key \"WorkspaceBack\" has invalid color \"%s\"" -msgstr "\"WorkspaceBack\" Å°¿¡ ÀûÀýÄ¡ ¾ÊÀº »ö»ó \"%s\"" +msgstr "Å° \"WorkspaceBack\"¿¡ À߸øµÈ »ö \"%s\"" -#: ../src/defaults.c:1867 ../src/defaults.c:2036 +#: ../src/defaults.c:1901 ../src/defaults.c:2070 msgid "Cannot get file entry for key \"WorkspaceBack\"." -msgstr "\"WorkspaceBack\" Å°¿¡¼­ ÆÄÀÏ Ç׸ñÀ» °¡Á®¿Ã ¼ö ¾øÀ½." +msgstr "Å° \"WorkspaceBack\"¿¡¼­ ÆÄÀÏ ¿£Æ®¸®¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù." -#: ../src/defaults.c:1880 ../src/defaults.c:2061 +#: ../src/defaults.c:1914 ../src/defaults.c:2095 +#, c-format msgid "could not find background image \"%s\"" -msgstr "¹è°æ À̹ÌÁö \"%s\" ¸¦ ãÁö ¸øÇÔ" +msgstr "¹è°æ À̹ÌÁö \"%s\" ¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:1897 ../src/defaults.c:2075 +#: ../src/defaults.c:1931 ../src/defaults.c:2109 msgid "Error in texture specification for key \"WorkspaceBack\"" -msgstr "" +msgstr "Å° \"WorkspaceBack\"¿¡ ´ëÇÑ ÅؽºÃ³ ÁöÁ¤¿¡ ¿À·ù°¡ ÀÖ½À´Ï´Ù" -#: ../src/defaults.c:2056 +#: ../src/defaults.c:2090 +#, c-format msgid "could not run \"%s\"" -msgstr "\"%s\" ¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½" +msgstr "\"%s\"¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½" -#: ../src/defaults.c:2109 +#: ../src/defaults.c:2143 msgid "could not load any usable font" -msgstr "»ç¿ë °¡´ÉÇÑ ±Û²ÃÀÌ ¾øÀ½" +msgstr "»ç¿ë °¡´ÉÇÑ ±Û²ÃÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:2139 +#: ../src/defaults.c:2173 +#, c-format msgid "could not get color for key \"%s\"" -msgstr "\"%s\" Å°¿¡ ÁöÁ¤µÈ »öÀ» ÇÒ´çÇÒ ¼ö ¾øÀ½" +msgstr "Å° \"%s\"ÀÇ »öÀ» ¾òÀ» ¼ö ¾øÀ½" -#: ../src/defaults.c:2198 ../src/rootmenu.c:440 +#: ../src/defaults.c:2232 ../src/rootmenu.c:512 +#, c-format msgid "%s:invalid key modifier \"%s\"" -msgstr "%s:Å° Modifier \"%s\" °¡ ÀûÀýÄ¡ ¾ÊÀ½" +msgstr "%s:À߸øµÈ Å° ¼öÁ¤ÀÚ \"%s\"" -#: ../src/defaults.c:2210 +#: ../src/defaults.c:2244 +#, c-format msgid "%s:invalid kbd shortcut specification \"%s\"" -msgstr "%s:Å°º¸µå ´ÜÃàÅ° \"%s\" °¡ ÀûÀýÄ¡ ¾ÊÀ½" +msgstr "%s:À߸øµÈ Å°º¸µå ´ÜÃàÅ° ÁöÁ¤ \"%s\"" -#: ../src/defaults.c:2217 +#: ../src/defaults.c:2251 +#, c-format msgid "%s:invalid key in shortcut \"%s\"" -msgstr "%s:\"%s\" ´ÜÃàÅ°¿¡ ÀûÀýÄ¡ ¾ÊÀº Å°°¡ Á¸ÀçÇÔ" +msgstr "%s:»¡¸®°¡±â \"%s\"¿¡ À߸øµÈ Å°" -#: ../src/defaults.c:2243 +#: ../src/defaults.c:2277 +#, c-format msgid "%s: modifier key %s is not valid" -msgstr "%s: Modifier Å° %s °¡ Àû´çÄ¡ ¾ÊÀ½" +msgstr "%s: À߸øµÈ ¼öÁ¤ÀÚ Å° %s" -#: ../src/defaults.c:2319 +#: ../src/defaults.c:2353 msgid "could not render texture for icon background" -msgstr "¾ÆÀÌÄÜ ¹è°æ À̹ÌÁö¸¦ ±×¸®Áö ¸øÇÔ" +msgstr "¾ÆÀÌÄÜ ¹è°æÀÇ ÅؽºÃ³¸¦ ±×¸± ¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:2675 +#: ../src/defaults.c:2709 msgid "background texture rendering was unsuccessfull" -msgstr "¹è°æ È­¸é »ý¼º¿¡ ½ÇÆÐÇÔ" +msgstr "¹è°æ ÅؽºÃ³ ·»´õ¸µÀº ¼º°øÀûÀÌÁö ¾Ê¾Ò½À´Ï´Ù" -#: ../src/defaults.c:2702 +#: ../src/defaults.c:2736 +#, c-format msgid "could not load image %s for option %s:%s\n" -msgstr "À̹ÌÁö %s ¸¦ ÀÐÁö ¸øÇÔ. ¿É¼Ç %s:%s" +msgstr "À̹ÌÁö %s(¿É¼Ç %s:%s)¸¦ ÀоîµéÀÏ ¼ö ¾ø½À´Ï´Ù\n" -#: ../src/defaults.c:2718 +#: ../src/defaults.c:2752 msgid "could not spawn texture rendering subprocess for option" -msgstr "" +msgstr "¿É¼ÇÀÇ ÅؽºÃ³ ·£´õ¸µ ºÎÇÁ·Î¼¼½º¸¦ ¸¸µé¼ö ¾ø½À´Ï´Ù" -#: ../src/defaults.c:2772 ../src/defaults.c:2860 +#: ../src/defaults.c:2806 ../src/defaults.c:2894 msgid "could not render texture for workspace background" -msgstr "ÀÛ¾÷°ø°£ ¹è°æ À̹ÌÁö¸¦ ±×¸®Áö ¸øÇÔ" +msgstr "ÀÛ¾÷°ø°£ ¹è°æ À̹ÌÁö ÅؽºÃ³¸¦ ·£´õ¸µ ÇÒ ¼ö ¾ø½À´Ï´Ù" -#: ../src/dialog.c:114 ../src/dialog.c:458 ../src/dock.c:420 ../src/dockedapp.c:356 ../src/rootmenu.c:207 ../src/rootmenu.c:236 +#: ../src/dialog.c:114 ../src/dialog.c:458 ../src/dock.c:420 +#: ../src/dockedapp.c:356 ../src/rootmenu.c:217 ../src/rootmenu.c:268 +#: ../src/rootmenu.c:282 msgid "Cancel" msgstr "Ãë¼Ò" #: ../src/dialog.c:210 msgid "Could not open directory " -msgstr "µð·ºÅ丮¸¦ ¿­ ¼ö ¾øÀ½ " +msgstr "µð·ºÅ丮¸¦ ¿­ ¼ö ¾øÀ½: " #: ../src/dialog.c:266 msgid "Could not load image file " -msgstr "À̹ÌÁö ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾øÀ½ " +msgstr "À̹ÌÁö ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾øÀ½: " #: ../src/dialog.c:395 msgid "Directories" @@ -236,157 +292,162 @@ msgstr " #: ../src/dialog.c:474 msgid "Icon Chooser" -msgstr "¾ÆÀÌÄÜ ¼±ÅÃ" +msgstr "¾ÆÀÌÄÜ ¼±Åñâ" #: ../src/dock.c:209 +#, c-format msgid "Type the name for workspace %i:" -msgstr "ÀÛ¾÷°ø°£ %i ÀÇ À̸§À» ÀÔ·Â:" +msgstr "ÀÛ¾÷°ø°£ %i ÀÇ À̸§À» ÀÔ·ÂÇϼ¼¿ä:" -#: ../src/dock.c:210 ../src/dock.c:1009 +#: ../src/dock.c:210 ../src/dock.c:1006 msgid "Rename Workspace" msgstr "ÀÛ¾÷°ø°£ À̸§ ¹Ù²Þ" #: ../src/dock.c:418 msgid "Workspace Clip" -msgstr "" +msgstr "ÀÛ¾÷°ø°£ Ŭ¸³" #: ../src/dock.c:419 msgid "All selected icons will be removed!" -msgstr "¼±ÅÃÇÑ ¸ðµç ¾ÆÀÌÄÜÀÌ ¾ø¾îÁý´Ï´Ù!!" +msgstr "¼±ÅÃÇÑ ¸ðµç ¾ÆÀÌÄÜÀÌ ¾ø¾îÁú °ÍÀÔ´Ï´Ù!!" -#: ../src/dock.c:469 +#: ../src/dock.c:466 msgid "Keep Icon" msgstr "¾ÆÀÌÄÜ À¯Áö" -#: ../src/dock.c:470 ../src/dock.c:1926 ../src/dock.c:2048 +#: ../src/dock.c:467 ../src/dock.c:1918 ../src/dock.c:2047 msgid "Type the command used to launch the application" -msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇà ¸í·É" +msgstr "¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇشµ¥ ÇÊ¿äÇÑ ¸í·ÉÀ» ÀÔ·ÂÇÕ´Ï´Ù" -#: ../src/dock.c:833 +#: ../src/dock.c:830 +#, c-format msgid "could not launch application %s\n" -msgstr "%s ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¼ö ¾øÀ½\n" +msgstr "¾îÇø®ÄÉÀÌ¼Ç %sÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù\n" -#: ../src/dock.c:888 +#: ../src/dock.c:885 msgid "could not create workspace submenu for Clip menu" -msgstr "Clip ¸Þ´º¸¦ À§ÇÑ ÀÛ¾÷°ø°£ ºÎ¼Ó¸Þ´º¸¦ ¸¸µéÁö ¸øÇÔ" +msgstr "Ŭ¸³ ¸Þ´º¸¦ À§ÇÑ ÀÛ¾÷°ø°£ ºÎ¸Þ´º¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù" -#: ../src/dock.c:946 +#: ../src/dock.c:943 msgid "could not create options submenu for Clip menu" -msgstr "Clip ¸Þ´º¸¦ À§ÇÑ ¿É¼Ç ºÎ¼Ó¸Þ´º¸¦ ¸¸µéÁö ¸øÇÔ" +msgstr "Ŭ¸³ ¸Þ´º¸¦ À§ÇÑ ¿É¼Ç ºÎ¸Þ´º¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù" -#: ../src/dock.c:950 -msgid "Keep Clip On Top" -msgstr "Clip Ç×»ó º¸ÀÓ" +#: ../src/dock.c:947 ../src/dock.c:995 +msgid "Keep on top" +msgstr "Ç×»ó À§·Î" -#: ../src/dock.c:956 +#: ../src/dock.c:953 msgid "Collapsed" msgstr "¾ÆÀÌÄÜ ¼û±è" -#: ../src/dock.c:962 +#: ../src/dock.c:959 msgid "AutoCollapse" msgstr "ÀÚµ¿ ¼û±è" -#: ../src/dock.c:968 +#: ../src/dock.c:965 msgid "AutoAttract Icons" msgstr "¾ÆÀÌÄÜ ÀÚµ¿ ¸ðÀ½" -#: ../src/dock.c:974 +#: ../src/dock.c:971 msgid "Keep Attracted Icons" msgstr "¸ðÀº ¾ÆÀÌÄÜ À¯Áö" -#: ../src/dock.c:998 -msgid "Keep Dock On Top" -msgstr "Dock Ç×»ó º¸ÀÓ" - -#: ../src/dock.c:1004 +#: ../src/dock.c:1001 msgid "Clip Options" -msgstr "Clip ¿É¼Ç" +msgstr "Ŭ¸³ ¿É¼Ç" -#: ../src/dock.c:1011 +#: ../src/dock.c:1008 msgid "(Un)Select Icon" msgstr "¾ÆÀÌÄÜ (¾È)¼±ÅÃ" -#: ../src/dock.c:1013 +#: ../src/dock.c:1010 msgid "(Un)Select All Icons" msgstr "¸ðµç ¾ÆÀÌÄÜ (¾È)¼±ÅÃ" -#: ../src/dock.c:1016 +#: ../src/dock.c:1013 msgid "Keep Icon(s)" msgstr "¾ÆÀÌÄÜ À¯Áö" -#: ../src/dock.c:1018 +#: ../src/dock.c:1015 msgid "Move Icon(s) To" -msgstr "¾ÆÀÌÄÜ ¿Å±è" +msgstr "¾ÆÀÌÄÜ ¿Å±è :" -#: ../src/dock.c:1023 +#: ../src/dock.c:1020 msgid "Remove Icon(s)" msgstr "¾ÆÀÌÄÜ ¾ø¾Ú" -#: ../src/dock.c:1025 +#: ../src/dock.c:1022 msgid "Attract Icons" msgstr "¾ÆÀÌÄÜ ¸ðÀ½" -#: ../src/dock.c:1028 +#: ../src/dock.c:1025 msgid "Launch" msgstr "½ÇÇà" -#: ../src/dock.c:1034 +#: ../src/dock.c:1031 msgid "Settings..." msgstr "¼³Á¤..." -#: ../src/dock.c:1418 ../src/dock.c:1432 ../src/dock.c:1446 ../src/dock.c:1456 +#: ../src/dock.c:1410 ../src/dock.c:1424 ../src/dock.c:1438 ../src/dock.c:1448 +#, c-format msgid "bad value in docked icon state info %s" msgstr "Dock ¾ÆÀÌÄÜÀÇ »óÅÂÁ¤º¸¿¡ À߸øµÈ °ª %s" -#: ../src/dock.c:1464 +#: ../src/dock.c:1456 +#, c-format msgid "bad value in docked icon position %i,%i" msgstr "Dock ¾ÆÀÌÄÜÀÇ À§Ä¡°ª %i,%i ´Â À߸øµÈ °ª" -#: ../src/dock.c:1693 +#: ../src/dock.c:1685 msgid "there are too many icons stored in dock. Ignoring what doesn't fit" -msgstr "Dock ¿¡ µé¾î°£ ¾ÆÀÌÄÜÀÌ ³Ê¹« ¸¹À½. ÇÊ¿ä ¾ø´Â °ÍÀ» Áö¿ì½Ê½Ã¿À" +msgstr "Dock ¿¡ µé¾î°£ ¾ÆÀÌÄÜÀÌ ³Ê¹« ¸¹À½. ¸ÂÁö ¾Ê´Â °ÍÀº ¹«½ÃÇÕ´Ï´Ù" -#: ../src/dock.c:1925 ../src/dock.c:2047 +#. icon->forced_dock = 1; +#: ../src/dock.c:1917 ../src/dock.c:2046 msgid "Dock Icon" -msgstr "" +msgstr "Dock ¾ÆÀÌÄÜ" -#: ../src/dock.c:2948 ../src/dock.c:2952 +#: ../src/dock.c:2956 ../src/dock.c:2960 +#, c-format msgid "Could not execute command \"%s\"" msgstr "\"%s\" ¸í·ÉÀ» ½ÇÇàÇÒ ¼ö ¾øÀ½." #: ../src/dockedapp.c:128 +#, c-format msgid "could not find icon %s, used in a docked application" -msgstr "µµÅ·µÈ ¾ÖÇÿ¡ »ç¿ëÇÒ %s ¾ÆÀÌÄÜÀ» ãÀ» ¼ö ¾øÀ½" +msgstr "µµÅ·µÈ ¾îÇø®ÄÉÀ̼ǿ¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ %sÀ» ãÀ» ¼ö ¾øÀ½" #: ../src/dockedapp.c:205 +#, c-format msgid "Could not open specified icon file:%s" -msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜÀ» ¿­ ¼ö ¾øÀ½:%s" +msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜ ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½:%s" #: ../src/dockedapp.c:291 msgid "Start when WindowMaker is started" -msgstr "À©µµ¿ì¸ÞÀÌÄ¿°¡ ½ÇÇàµÉ¶§ ½ÇÇàÇÔ" +msgstr "WindowMaker¸¦ ½ÇÇàÇÒ¶§ ½ÃÀÛÇÔ" #: ../src/dockedapp.c:298 msgid "Application path and arguments" -msgstr "¾ÖÇø®ÄÉÀÌ¼Ç PATH, ¸í·É¾î" +msgstr "¾ÖÇø®ÄÉÀÌ¼Ç °æ·Î¿Í Àμö" #: ../src/dockedapp.c:309 msgid "Command for files dropped with DND" -msgstr "DND ·Î ½ÇÇàÇÒ ¸í·É¾î" +msgstr "µå·¢¿£µå·ÓÀ¸·Î ½ÇÇàÇÒ ¸í·É¾î" #: ../src/dockedapp.c:321 +#, c-format msgid "%d will be replaced with the file name" -msgstr "%d ¿¡ ³Ñ°Ü ¹ÞÀº ÆÄÀϸíÀ» ´ëÀÔÇÔ" +msgstr "%d´Â ÆÄÀÏ À̸§À¸·Î ´ëüÇÕ´Ï´Ù" #: ../src/dockedapp.c:325 msgid "DND support was not compiled in" -msgstr "ÄÄÆÄÀϽà DND Áö¿øÀÌ Æ÷ÇÔµÇÁö ¾ÊÀ½" +msgstr "ÄÄÆÄÀϽà DND Áö¿øÀÌ Æ÷ÇÔµÇÁö ¾Ê¾Ò½À´Ï´Ù" #: ../src/dockedapp.c:331 msgid "Icon Image" msgstr "¾ÆÀÌÄÜ À̹ÌÁö" -#: ../src/dockedapp.c:343 ../src/winspector.c:1191 +#: ../src/dockedapp.c:343 ../src/winspector.c:1201 msgid "Browse..." msgstr "ã±â" @@ -394,114 +455,135 @@ msgstr "ã msgid "Docked Application Settings" msgstr "Dock ¾ÖÇø®ÄÉÀÌ¼Ç ¼³Á¤" -#: ../src/event.c:366 +#: ../src/event.c:372 msgid "stack overflow: too many dead processes" -msgstr "½ºÅà ¿À¹öÇ÷οì: Á×Àº ÇÁ·Î¼¼½º°¡ ¸¹À½" +msgstr "½ºÅà ¿À¹öÇ÷οì: Á×Àº ÇÁ·Î¼¼½º°¡ ³Ê¹« ¸¹À½" #: ../src/framewin.c:526 +#, c-format msgid "could not render gradient: %s" -msgstr "Gradient ¸¦ Ç¥ÇöÇÏÁö ¸øÇÔ: %s" +msgstr "±×·¡µð¾ðÆ®¸¦ Ç¥ÇöÇÏÁö ¸øÇÔ: %s" -#: ../src/framewin.c:542 ../src/framewin.c:557 ../src/framewin.c:568 ../src/framewin.c:575 ../src/framewin.c:582 ../src/icon.c:296 ../src/texture.c:492 +#: ../src/framewin.c:542 ../src/framewin.c:557 ../src/framewin.c:568 +#: ../src/framewin.c:575 ../src/framewin.c:582 ../src/icon.c:296 +#: ../src/texture.c:492 +#, c-format msgid "error rendering image:%s" msgstr "À̹ÌÁö ·»´õ¸µ ¿¡·¯:%s" -#: ../src/icon.c:182 ../src/wdefaults.c:402 +#: ../src/icon.c:182 ../src/wdefaults.c:408 +#, c-format msgid "error loading image file \"%s\"" msgstr "À̹ÌÁö ÆÄÀÏ \"%s\"¸¦ Àд Áß ¿¡·¯" #: ../src/icon.c:428 ../src/icon.c:437 +#, c-format msgid "could not create directory %s" -msgstr "%s µð·ºÅ丮 »ý¼º ½ÇÆÐ" +msgstr "µð·ºÅ丮 %s¸¦ ¸¸µé ¼ö ¾øÀ½" #: ../src/icon.c:702 +#, c-format msgid "could not find default icon \"%s\"" -msgstr "±âº» ¾ÆÀÌÄÜ \"%s\" ãÁö ¸øÇÔ" +msgstr "±âº» ¾ÆÀÌÄÜ \"%s\"¸¦ ãÁö ¸øÇÔ" #: ../src/icon.c:708 +#, c-format msgid "could not load default icon \"%s\":%s" -msgstr "±âº» ¾ÆÀÌÄÜ \"%s\":%s ÀÐÁö ¸øÇÔ" +msgstr "±âº» ¾ÆÀÌÄÜ \"%s\"¸¦ ÀÐÁö ¸øÇÔ:%s" -#: ../src/main.c:185 +#: ../src/main.c:199 msgid "could not exec window manager" -msgstr "À©µµ¿ì °ü¸®ÀÚ¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½" +msgstr "â °ü¸®ÀÚ¸¦ ½ÇÇàÇÒ ¼ö ¾øÀ½" -#: ../src/main.c:186 +#: ../src/main.c:200 msgid "Restart failed!!!" msgstr "Àç½ÃÀÛ ½ÇÆÐ!!!" -#: ../src/main.c:233 +#: ../src/main.c:247 +#, c-format msgid "%s aborted.\n" -msgstr "%s Á¾·á.\n" +msgstr "%s´Â ÁߴܵǾú½À´Ï´Ù.\n" -#: ../src/main.c:244 +#: ../src/main.c:258 +#, c-format msgid "usage: %s [-options]\n" msgstr "»ç¿ë¹ý: %s [-¿É¼Ç]\n" -#: ../src/main.c:245 +#: ../src/main.c:259 msgid "options:" msgstr "¿É¼Ç:" -#: ../src/main.c:247 +#: ../src/main.c:261 msgid " -nocpp \t\tdisable preprocessing of configuration files" -msgstr " -nocpp \t\t¼³Á¤ÆÄÀÏÀÇ ½Ç½Ã°£ Àû¿ëÀ» »ç¿ë ¾ÈÇÔ" +msgstr " -nocpp \t\t¼³Á¤ÆÄÀÏÀÇ Àü󸮸¦ ÇÏÁö ¾ÊÀ½" -#: ../src/main.c:249 +#: ../src/main.c:263 msgid " -nodock\t\tdo not open the application Dock" -msgstr " -nodock\t\t¾ÖÇø®ÄÉÀÌ¼Ç Dock À» »ç¿ë ¾ÈÇÔ" +msgstr " -nodock\t\t¾ÖÇø®ÄÉÀÌ¼Ç DockÀ» ¿­Áö ¾ÊÀ½" -#: ../src/main.c:250 +#: ../src/main.c:264 msgid " -noclip\t\tdo not open the workspace Clip" -msgstr "-noclip\t\tClip À» »ç¿ë ¾ÈÇÔ" +msgstr "-noclip\t\tÀÛ¾÷°ø°£ Ŭ¸³À» ¿­Áö ¾ÊÀ½" #. #. puts(_(" -locale locale locale to use")); #. -#: ../src/main.c:254 +#: ../src/main.c:268 msgid " -visualid visualid\tvisual id of visual to use" -msgstr "-visualid visualid\tvisual id ¸¦ »ç¿ëÇÔ" +msgstr "-visualid ºñÁÖ¾óID\t»ç¿ëÇÒ ºñÁÖ¾óÀÇ ºñÁÖ¾ó ID" -#: ../src/main.c:255 +#: ../src/main.c:269 msgid " -display host:dpy\tdisplay to use" msgstr " -display È£½ºÆ®:µð½ºÇ÷¹ÀÌ\t»ç¿ëÇÒ µð½ºÇ÷¹ÀÌ" -#: ../src/main.c:256 +#: ../src/main.c:270 +msgid " -static\t\tdo not update or save configurations" +msgstr " -static\t\t¼³Á¤À» °»½ÅÇϰųª ÀúÀåÇÏÁö ¾Ê´Â´Ù" + +#: ../src/main.c:271 msgid " -version\t\tprint version and exit" -msgstr " -version\t\t¹öÁ¯À» Ç¥½ÃÇÏ°í Á¾·á" +msgstr " -version\t\t¹öÀüÀ» Ç¥½ÃÇÏ°í Á¾·á" -#: ../src/main.c:268 +#: ../src/main.c:283 +#, c-format msgid "" "could not find user GNUstep directory (%s).\n" "Make sure you have installed Window Maker correctly and run wmaker.inst" msgstr "" -"»ç¿ëÀÚÀÇ GNUstep µð·ºÅ丮 (%s)¸¦ ãÀ» ¼ö ¾øÀ½.\n" -"À©µµ¿ì ¸ÞÀÌÄ¿¸¦ Á¦´ë·Î ¼³Ä¡Çß´ÂÁö È®ÀÎÇÏ°í wmaker.inst ¸¦ ½ÇÇàÇϽÿÀ" +"GNUstep µð·ºÅ丮(%s)¸¦ ãÀ»¼ö ¾ø½À´Ï´Ù.\n" +"WindowMaker°¡ Á¦´ë·Î ¼³Ä¡µÇ¾ú´ÂÁö ´Ù½Ã È®ÀÎ ÈÄ wmaker.inst ¸¦ ½ÇÇàÇϽñâ " +"¹Ù¶ø´Ï´Ù." -#: ../src/main.c:290 +#: ../src/main.c:304 +#, c-format msgid "%s:could not execute initialization script" msgstr "%s: ÃʱâÈ­ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù." -#: ../src/main.c:309 +#: ../src/main.c:323 +#, c-format msgid "%s:could not execute exit script" -msgstr "%s:Á¾·á ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏÁö ¸øÇÔ" +msgstr "%s:Á¾·á ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù." -#: ../src/main.c:366 ../src/main.c:373 ../src/main.c:380 +#: ../src/main.c:377 ../src/main.c:384 ../src/main.c:391 ../src/main.c:405 +#, c-format msgid "too few arguments for %s" -msgstr "%s ¸¦ À§ÇÑ ÀÎÀÚ°¡ ºÎÁ·ÇÔ" +msgstr "%s ¸¦ À§ÇÑ ÀÎÀÚ°¡ ºÎÁ·ÇÕ´Ï´Ù" -#: ../src/main.c:384 +#: ../src/main.c:395 +#, c-format msgid "bad value for visualid: \"%s\"" -msgstr "Visualid ÀÇ À߸øµÈ °ª: \"%s\"" +msgstr "ºñÁÖ¾ó IdÀÇ À߸øµÈ °ª: \"%s\"" -#: ../src/main.c:425 +#: ../src/main.c:453 msgid "X server does not support locale" -msgstr "X ¼­¹ö°¡ ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾ÊÀ½" +msgstr "X ¼­¹ö´Â ·ÎÄÉÀÏÀ» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù" -#: ../src/main.c:428 +#: ../src/main.c:456 msgid "cannot set locale modifiers" -msgstr "·ÎÄÉÀÏ modifier ¸¦ ¼³Á¤ÇÒ ¼ö ¾øÀ½" +msgstr "·ÎÄÉÀÏ ¼öÁ¤ÀÚ(modifier)¸¦ ¼³Á¤ÇÒ ¼ö ¾øÀ½" -#: ../src/main.c:445 +#: ../src/main.c:473 +#, c-format msgid "could not open display \"%s\"" msgstr "\"%s\" µð½ºÇ÷¹À̸¦ ¿­Áö ¸øÇÔ." @@ -510,20 +592,24 @@ msgid "wrealloc() failed while trying to add menu item" msgstr "¸Þ´º ¾ÆÀÌÅÛ Ãß°¡ ½ÃµµÁß wrealloc() ½ÇÆÐ" #: ../src/misc.c:71 +#, c-format msgid "could not define value for %s for cpp" -msgstr "cpp ÀÇ %s ¸¦ À§ÇÑ °ªÀÌ Á¤ÀǵÇÁö ¾ÊÀ½" +msgstr "cppÀÇ %s¸¦ À§ÇÑ °ªÀÌ Á¤ÀǵÇÁö ¾ÊÀ½" #: ../src/misc.c:101 +#, c-format msgid "could not get password entry for UID %i" -msgstr "UID %i ÀÇ Æнº¿öµå ºÎºÐÀ» ÀÐÀ» ¼ö ¾øÀ½" +msgstr "UID %i ÀÇ ¾ÏÈ£¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù" #: ../src/misc.c:125 +#, c-format msgid "your machine is misconfigured. HOSTNAME is set to %s" -msgstr "½Ã½ºÅÛ ¼³Á¤ÀÌ À߸øµÊ. HOSTNAME À» %s ·Î ¼³Á¤ÇÔ" +msgstr "½Ã½ºÅÛ ¼³Á¤ÀÌ À߸øµÇ¾ú½À´Ï´Ù. HOSTNAMEÀ» %s ·Î ¼³Á¤ÇÕ´Ï´Ù" #: ../src/misc.c:131 +#, c-format msgid "your machine is misconfigured. HOST is set to %s" -msgstr "½Ã½ºÅÛ ¼³Á¤ÀÌ À߸øµÊ. HOST ¸¦ %s ·Î ¼³Á¤ÇÔ" +msgstr "½Ã½ºÅÛ ¼³Á¤ÀÌ À߸øµÇ¾ú½À´Ï´Ù. HOST¸¦ %s·Î ¼³Á¤ÇÕ´Ï´Ù" #: ../src/misc.c:773 msgid "selection timed-out" @@ -531,25 +617,26 @@ msgstr " #: ../src/misc.c:788 msgid "Program Arguments" -msgstr "ÇÁ·Î±×·¥ ¿É¼Ç" +msgstr "ÇÁ·Î±×·¥ Àμö" #: ../src/misc.c:807 msgid "Enter command arguments:" -msgstr "¸í·É¾î:" +msgstr "¸í·É¾î Àμö¸¦ ÀÔ·ÂÇϼ¼¿ä:" #: ../src/misc.c:833 msgid "unable to get dropped data from DND drop" -msgstr "" +msgstr "DND µå·Ó¿¡¼­ ¶³¾î¶ß¸° µ¥ÀÌÅ͸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù" #: ../src/misc.c:841 msgid "error getting dropped data from DND drop" -msgstr "" +msgstr "DND µå·Ó¿¡¼­ ¶³¾î¶ß¸° µ¥ÀÌÅ͸¦ ¾ò´Âµ¥ ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù" #: ../src/misc.c:847 msgid "out of memory while getting data from DND drop" -msgstr "" +msgstr "DND µå·Ó¿¡¼­ ¶³¾î¶ß¸° µ¥ÀÌÅ͸¦ ¾ò´Âµ¥ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù" #: ../src/misc.c:891 ../src/misc.c:1011 +#, c-format msgid "out of memory during expansion of \"%s\"" msgstr "\"%s\" ÀÇ È®Àå Áß ¸Þ¸ð¸® ºÎÁ·" @@ -562,6 +649,7 @@ msgid "out of memory during expansion of \"%a\"" msgstr "\"%a\" ÀÇ È®Àå Áß ¸Þ¸ð¸® ºÎÁ·" #: ../src/misc.c:990 +#, c-format msgid "out of memory during expansion of \"%d\"" msgstr "\"%d\" ÀÇ È®Àå Áß ¸Þ¸ð¸® ºÎÁ·" @@ -569,529 +657,646 @@ msgstr "\"%d\" msgid "selection not available" msgstr "¼±Åà ºÒ°¡´É" -#: ../src/misc.c:1077 ../src/misc.c:1083 +#: ../src/misc.c:1076 ../src/misc.c:1082 +#, c-format msgid "bad window name value in %s state info" -msgstr "%s »óÅ Á¤º¸ÀÇ À©µµ¿ì À̸§ÀÌ À߸øµÊ" +msgstr "»óÅ Á¤º¸ %sÀÇ Ã¢ À̸§ÀÌ À߸øµÊ" #: ../src/pixmap.c:235 +#, c-format msgid "could not load mask bitmap file \"%s\". Won't use mask" -msgstr "" +msgstr "ºñÆ®¸Ê ÆÄÀÏ \"%s\"¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¸¶½ºÅ©¸¦ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù" #: ../src/proplist.c:180 msgid "unterminated string" -msgstr "" +msgstr "Á¾·áÇÏÁö ¾ÊÀº ¹®ÀÚ¿­" #: ../src/proplist.c:247 msgid "unterminated array" -msgstr "" +msgstr "Á¾·áÇÏÁö ¾ÊÀº ¹®ÀÚ¿­" #: ../src/proplist.c:256 msgid "missing , in array or unterminated array" -msgstr "" +msgstr "¹è¿­¿¡¼­ ½°Ç¥°¡ ºüÁ³°Å³ª Á¾·áÇÏÁö ¾ÊÀº ¹è¿­" #: ../src/proplist.c:267 msgid "could not get array element" -msgstr "¹è¿­ÀÇ ÀÎÀÚ¸¦ °¡Á®¿ÀÁö ¸øÇÔ" +msgstr "¹è¿­ ¿ø¼Ò¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù" #: ../src/proplist.c:297 msgid "unterminated dictionary" -msgstr "" +msgstr "Á¾·áÇÏÁö ¾ÊÀº »çÀü" #: ../src/proplist.c:315 msgid "missing dictionary key" -msgstr "" +msgstr "»çÀü Å° ¾øÀ½" #: ../src/proplist.c:317 msgid "missing dictionary entry key or unterminated dictionary" -msgstr "" +msgstr "»çÀü ¿£Æ®¸® Å°°¡ ¾ø°Å³ª Á¾·áÇÏÁö ¾ÊÀº »çÀü" #: ../src/proplist.c:323 msgid "error parsing dictionary key" -msgstr "" +msgstr "»çÀü Å°¸¦ Çؼ®Çϴµ¥ ¿À·ùÀÔ´Ï´Ù" #: ../src/proplist.c:332 msgid "missing = in dictionary entry" -msgstr "" +msgstr "»çÀü ¿£Æ®¸®¿¡ = °¡ ºüÁ® ÀÖ½À´Ï´Ù" #: ../src/proplist.c:351 msgid "missing ; in dictionary entry" -msgstr "" +msgstr "»çÀü ¿£Æ®¸®¿¡ ;°¡ ºüÁ® ÀÖ½À´Ï´Ù" #: ../src/proplist.c:432 msgid "was expecting a string, dictionary, data or array." -msgstr "" +msgstr "´Â ¹®ÀÚ¿­, »çÀü, µ¥ÀÌÅÍ ¶Ç´Â ¹è¿­ÀÌ ÇÊ¿äÇÕ´Ï´Ù" #: ../src/proplist.c:434 msgid "Comments are not allowed inside WindowMaker owned domain files." -msgstr "" +msgstr "ÁÖ¼®¹®Àº WindowMaker µµ¸ÞÀÎ ÆÄÀÏ ³»¿¡¼­´Â Çã¿ëµÇÁö ¾Ê½À´Ï´Ù." #: ../src/proplist.c:453 +#, c-format msgid "could not open domain file %s" -msgstr "" +msgstr "µµ¸ÞÀÎ ÆÄÀÏ %s¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù" #: ../src/proplist.c:466 msgid "extra data after end of file" -msgstr "" +msgstr "ÆÄÀÏ ³¡ µÚ¿¡ µ¥ÀÌÅÍ°¡ ¶Ç ÀÖ½À´Ï´Ù" #: ../src/resources.c:71 +#, c-format msgid "The following character sets are missing in %s:" -msgstr "" +msgstr "´ÙÀ½ ¹®ÀÚ ¼ÂÀº %s¿¡¼­ ºüÁ® ÀÖ½À´Ï´Ù:" #: ../src/resources.c:76 +#, c-format msgid "The string \"%s\" will be used in place" -msgstr "" +msgstr "¹®ÀÚ¿­ \"%s\"ÀÌ ÀÌ ¹®ÀÚ¼ÂÀÇ ±ÛÀÚ¸¦" #: ../src/resources.c:78 msgid "of any characters from those sets." -msgstr "" +msgstr "´ë½ÅÇÏ¿© »ç¿ëµË´Ï´Ù." #: ../src/resources.c:81 +#, c-format msgid "could not create font set %s. Trying fixed" -msgstr "%s ±Û²Ã ¼ÂÀ» ¸¸µéÁö ¸øÇÔ. ±âº» ±Û²Ã·Î Àç½Ãµµ" +msgstr "%s ±Û²Ã ¼ÂÀ» ¸¸µéÁö ¸øÇÔ. fixed·Î ´ëüÇÕ´Ï´Ù" #: ../src/resources.c:98 +#, c-format msgid "could not load font %s. Trying fixed" -msgstr "%s ±Û²ÃÀÌ ¾øÀ½. ±âº» ±Û²Ã·Î Àç½Ãµµ" +msgstr "%s ±Û²ÃÀÌ ¾øÀ½. fixed·Î ´ëüÇÕ´Ï´Ù" #: ../src/resources.c:136 +#, c-format msgid "could not parse color \"%s\"" -msgstr "\"%s\" »öÀ» ÀνÄÇÒ ¼ö ¾øÀ½" +msgstr "»ö \"%s\"À» Çؼ®ÇÒ ¼ö ¾ø½À´Ï´Ù" #: ../src/resources.c:140 +#, c-format msgid "could not allocate color \"%s\"" -msgstr "\"%s\" »öÀ» ÇÒ´çÇÒ ¼ö ¾øÀ½" +msgstr "»ö \"%s\"À» ÇÒ´çÇÒ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:205 ../src/rootmenu.c:207 ../src/rootmenu.c:236 +#: ../src/rootmenu.c:215 ../src/rootmenu.c:217 msgid "Exit" msgstr "Á¾·á" -#: ../src/rootmenu.c:206 +#: ../src/rootmenu.c:216 msgid "Exit window manager?" -msgstr "À©µµ¿ì °ü¸®ÀÚ¸¦ Á¾·áÇϽðڽÀ´Ï±î?" +msgstr "â °ü¸®ÀÚ¸¦ Á¾·áÇϽðڽÀ´Ï±î?" -#: ../src/rootmenu.c:234 +#: ../src/rootmenu.c:265 msgid "Close X session" -msgstr "X ¸¦ Á¾·áÇÕ´Ï´Ù!" +msgstr "X ¼¼¼Ç ´Ý±â" -#: ../src/rootmenu.c:235 +#: ../src/rootmenu.c:266 msgid "" "Close Window System session?\n" +"Kill might close applications with unsaved data." +msgstr "" +"À©µµ¿ì ½Ã½ºÅÛ ¼¼¼ÇÀ» Á¾·áÇÏ°Ú½À´Ï±î?\n" +"¾îÇø®ÄÉÀ̼ÇÀÌ Á¾·áµÇ°í ÀúÀåÇÏÁö ¾ÊÀº ÀÚ·á´Â ÀÒ½À´Ï´Ù." + +#: ../src/rootmenu.c:268 ../src/winmenu.c:340 +msgid "Close" +msgstr "´Ý±â" + +#: ../src/rootmenu.c:279 +msgid "Kill X session" +msgstr "X ¼¼¼Ç Á¾·á" + +#: ../src/rootmenu.c:280 +msgid "" +"Kill Window System session?\n" "(all applications will be closed)" msgstr "" -"X ¸¦ Á¾·áÇϽðڽÀ´Ï±î?\n" +"À©µµ¿ì ½Ã½ºÅÛ ¼¼¼ÇÀ» Á¾·áÇÏ°Ú½À´Ï±î?\n" "(¸ðµç ¾ÖÇø®ÄÉÀ̼ÇÀÌ Á¾·áµË´Ï´Ù)" -#: ../src/rootmenu.c:454 +#: ../src/rootmenu.c:526 +#, c-format msgid "%s:invalid kbd shortcut specification \"%s\" for entry %s" -msgstr "" +msgstr "%s: À߸øµÈ Å°º¸µå ´ÜÃàÅ° ÁöÁ¤ \"%s\"(¿£Æ®¸® %s)" -#: ../src/rootmenu.c:462 +#: ../src/rootmenu.c:534 +#, c-format msgid "%s:invalid key in shortcut \"%s\" for entry %s" -msgstr "" +msgstr "%s: »¡¸®°¡±â \"%s\"(¿£Æ®¸® %s)¿¡ À߸øµÈ Å°" -#: ../src/rootmenu.c:515 +#: ../src/rootmenu.c:587 +#, c-format msgid "%s: unmatched '\"' in menu file" -msgstr "¸Þ´º ÆÄÀÏÀÇ '\"' ¦ÀÌ ¸ÂÁö ¾ÊÀ½ " +msgstr "%s: ¸Þ´º ÆÄÀÏÀÇ '\"' ¦ÀÌ ¸ÂÁö ¾ÊÀ½" -#: ../src/rootmenu.c:565 +#: ../src/rootmenu.c:637 +#, c-format msgid "%s: missing command" msgstr "%s: ¸í·É¾î°¡ ¾øÀ½" -#: ../src/rootmenu.c:598 +#: ../src/rootmenu.c:670 +#, c-format msgid "invalid OPEN_MENU specification: %s" -msgstr "OPEN_MENU ½ºÆåÀÌ ÀûÀýÄ¡ ¾ÊÀ½: %s" +msgstr "OPEN_MENU ÁöÁ¤ÀÌ À߸øµÊ: %s" -#: ../src/rootmenu.c:663 +#: ../src/rootmenu.c:735 +#, c-format msgid "%s:could not stat menu" -msgstr "" +msgstr "%s: ¸Þ´º ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:671 +#: ../src/rootmenu.c:743 +#, c-format msgid "%s:could not stat menu :%s" -msgstr "" +msgstr "%s: ¸Þ´º ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾øÀ½ :%s" -#: ../src/rootmenu.c:689 +#: ../src/rootmenu.c:761 +#, c-format msgid "too many parameters in OPEN_MENU: %s" -msgstr "OPEN_MENU ¿¡ ¸Å°³ º¯¼ö°¡ ³Ê¹« ¸¹À½: %s" +msgstr "OPEN_MENU¿¡ Àμö°¡ ³Ê¹« ¸¹À½: %s" -#: ../src/rootmenu.c:725 -msgid "There are more than one WORKSPACE_MENU commands in the applications menu. Only one is allowed." +#: ../src/rootmenu.c:797 +msgid "" +"There are more than one WORKSPACE_MENU commands in the applications menu. " +"Only one is allowed." msgstr "" +"¾îÇø®ÄÉÀÌ¼Ç ¸Þ´º¿¡ WORKSPACE_MENU ¸í·ÉÀÌ µÑ ÀÌ»ó ÀÖ½À´Ï´Ù. Çϳª¸¸ ÀÖ¾î¾ß " +"ÇÕ´Ï´Ù. " -#: ../src/rootmenu.c:754 ../src/rootmenu.c:772 +#: ../src/rootmenu.c:826 ../src/rootmenu.c:844 +#, c-format msgid "%s:missing parameter for menu command \"%s\"" msgstr "%s: ¸Þ´º ¸í·É¾î \"%s\" ÀÇ Àμö°¡ ºüÁ³À½" -#: ../src/rootmenu.c:835 +#: ../src/rootmenu.c:907 +#, c-format msgid "%s:unknown command \"%s\" in menu config." msgstr "%s:¸Þ´º ¼³Á¤ÀÇ \"%s\" ¸í·ÉÀ» ¾Ë ¼ö ¾øÀ½." -#: ../src/rootmenu.c:843 +#: ../src/rootmenu.c:915 +#, c-format msgid "%s:can't add shortcut for entry \"%s\"" -msgstr "" +msgstr "%s: ¿£Æ®¸® \"%s\"¿¡ »¡¸®°¡±â¸¦ Ãß°¡ÇÒ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:980 +#: ../src/rootmenu.c:1052 +#, c-format msgid "%s:maximal line size exceeded in menu config: %s" msgstr "%s:¸Þ´º ¼³Á¤ÀÇ ÃÖ´ë ÁÙ¼ö¸¦ ÃÊ°úÇÔ: %s" -#: ../src/rootmenu.c:1002 ../src/rootmenu.c:1094 ../src/rootmenu.c:1195 +#: ../src/rootmenu.c:1074 ../src/rootmenu.c:1166 ../src/rootmenu.c:1267 +#, c-format msgid "%s:missing command in menu config: %s" -msgstr "%s:¸Þ´º¿¡ µî·ÏµÈ ¸í·ÉÀ» ãÀ» ¼ö ¾øÀ½: %s" +msgstr "%s:¸Þ´º ¼³Á¤¿¡¼­ ¸í·ÉÀ» ãÀ» ¼ö ¾øÀ½: %s" -#: ../src/rootmenu.c:1032 +#: ../src/rootmenu.c:1104 +#, c-format msgid "%s:syntax error in menu file:END declaration missing" msgstr "%s:¸Þ´ºÆÄÀÏ ¹®¹ý¿¡·¯:END ¼±¾ð¹® ¾øÀ½" -#: ../src/rootmenu.c:1061 ../src/rootmenu.c:1160 +#: ../src/rootmenu.c:1133 ../src/rootmenu.c:1232 msgid "could not make arguments for menu file preprocessor" -msgstr "" +msgstr "¸Þ´º ÆÄÀÏ Àü󸮱⸦ À§ÇÑ Àμö¸¦ ¸¸µé ¼ö ¾øÀ½" -#: ../src/rootmenu.c:1067 ../src/rootmenu.c:1167 +#: ../src/rootmenu.c:1139 ../src/rootmenu.c:1239 +#, c-format msgid "%s:could not open/preprocess menu file" -msgstr "%s:¸Þ´º ÆÄÀÏÀ» ¿­±â/ºÐ¼® ¸øÇÔ" +msgstr "%s: ¸Þ´º ÆÄÀÏÀ» ¿­°Å³ª Àüó¸®ÇÒ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:1079 ../src/rootmenu.c:1180 +#: ../src/rootmenu.c:1151 ../src/rootmenu.c:1252 +#, c-format msgid "%s:could not open menu file" -msgstr "%s:¸Þ´º ÆÄÀÏÀ» ¿­Áö ¸øÇÔ" +msgstr "%s:¸Þ´º ÆÄÀÏÀ» ¿­ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:1106 +#: ../src/rootmenu.c:1178 +#, c-format msgid "%s:invalid menu file. MENU command is missing" -msgstr "%s:À߸øµÈ ¸Þ´º ÆÄÀÏ. MENU Ç׸ñÀÌ ¾øÀ½" +msgstr "%s:À߸øµÈ ¸Þ´º ÆÄÀÏ. MENU ¸í·ÉÀÌ ºüÁ³½À´Ï´Ù" -#: ../src/rootmenu.c:1115 +#: ../src/rootmenu.c:1187 msgid "error reading preprocessed menu data" -msgstr "" +msgstr "Àüó¸®µÈ ¸Þ´º µ¥ÀÌÅ͸¦ Àдµ¥ ¿À·ù" -#: ../src/rootmenu.c:1207 +#: ../src/rootmenu.c:1279 +#, c-format msgid "%s:no title given for the root menu" -msgstr "%s:±âº» ¸Þ´º Á¦¸ñ ÁöÁ¤µÇÁö ¾ÊÀ½" +msgstr "%s:ÃÖ»óÀ§ ¸Þ´º¿¡ Á¦¸ñÀÌ ¾ø½À´Ï´Ù" -#: ../src/rootmenu.c:1261 ../src/rootmenu.c:1324 ../src/rootmenu.c:1368 +#: ../src/rootmenu.c:1336 ../src/rootmenu.c:1399 ../src/rootmenu.c:1443 +#, c-format msgid "out of memory while constructing directory menu %s" -msgstr "%s µð·ºÅ丮 ¸Þ´º »ý¼º Áß ¸Þ¸ð¸® ºÎÁ·" +msgstr "µð·ºÅ丮 ¸Þ´º %s »ý¼º Áß ¸Þ¸ð¸® ºÎÁ·" -#: ../src/rootmenu.c:1271 +#: ../src/rootmenu.c:1346 +#, c-format msgid "%s:could not stat file \"%s\" in menu directory" -msgstr "" +msgstr "%s: ¸Þ´º µð·ºÅ丮ÀÇ ÆÄÀÏ \"%s\"¿¡ Á¢±ÙÇÒ ¼ö ¾øÀ½" -#: ../src/rootmenu.c:1417 +#: ../src/rootmenu.c:1492 msgid "Commands" msgstr "¸í·É¾î" -#: ../src/rootmenu.c:1419 +#: ../src/rootmenu.c:1494 msgid "Exit..." msgstr "Á¾·á..." -#: ../src/rootmenu.c:1486 +#: ../src/rootmenu.c:1567 +#, c-format msgid "could not find menu file \"%s\" referenced in WMRootMenu" -msgstr "WMRootMenu ¿¡ ÁöÁ¤µÈ \"%s\" ¸Þ´º ÆÄÀÏÀ» ãÁö ¸øÇÔ" +msgstr "WMRootMenu¿¡¼­ ÂüÁ¶ÇÏ´Â ¸Þ´º ÆÄÀÏ \"%s\"¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù" -#: ../src/rootmenu.c:1493 +#: ../src/rootmenu.c:1574 +#, c-format msgid "could not access menu \"%s\" referenced in WMRootMenu" -msgstr "WMRootMenu ¿¡ ÁöÁ¤µÈ \"%s\" ¸Þ´º ÆÄÀÏ¿¡ Á¢±Ù ¸øÇÔ" +msgstr "WMRootMenu¿¡¼­ ÂüÁ¶ÇÏ´Â ¸Þ´º \"%s\"¿¡ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù" + +#: ../src/rootmenu.c:1585 +#, c-format +msgid "" +"using default menu file \"%s\" as the menu referenced in WMRootMenu could " +"not be found " +msgstr "" +"WMRootMenu¿¡¼­ ÂüÁ¶ÇÏ´Â ¸Þ´º ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ¸¹Ç·Î \"%s\"¸¦ ±âº» " +"¸Þ´º ÆÄÀÏ·Î »ç¿ëÇÕ´Ï´Ù" -#: ../src/rootmenu.c:1521 ../src/rootmenu.c:1576 +#: ../src/rootmenu.c:1608 ../src/rootmenu.c:1663 +#, c-format msgid "%s:format error in root menu configuration \"%s\"" -msgstr "%s: ·çÆ® ¸Þ´º ¼³Á¤ÀÇ \"%s\" Æ÷¸Ë ¿¡·¯" +msgstr "%s: ÃÖ»óÀ§ ¸Þ´º ¼³Á¤ \"%s\"ÀÇ Çü½Ä ¿À·ù" -#: ../src/screen.c:402 +#: ../src/screen.c:412 msgid "could not load logo image for panels" msgstr "Æгο¡ ¾²ÀÏ ·Î°í À̹ÌÁö¸¦ ÀÐÁö ¸øÇÔ" -#: ../src/screen.c:405 +#: ../src/screen.c:415 +#, c-format msgid "error making logo image for panel:%s" msgstr "Æгο¡ ¾²ÀÏ ·Î°í À̹ÌÁö¸¦ ¸¸µéÁö ¸øÇÔ:%s" -#: ../src/screen.c:584 +#: ../src/screen.c:594 +#, c-format msgid "could not initialize graphics library context: %s" -msgstr "±×·¡ÇÈ ¶óÀ̺귯¸® ȯ°æÀ» ÃʱâÈ­ ÇÒ¼ö ¾øÀ½" +msgstr "±×·¡ÇÈ ¶óÀ̺귯¸® ȯ°æÀ» ÃʱâÈ­ ÇÒ¼ö ¾øÀ½: %s" + +#: ../src/screen.c:805 +#, c-format +msgid "could not save session state in %s" +msgstr "%sÀÇ ¼¼¼Ç »óŸ¦ ÀúÀåÇÏÁö ¸øÇÔ" -#: ../src/session.c:113 ../src/wdefaults.c:562 ../src/winspector.c:343 +#: ../src/session.c:138 ../src/wdefaults.c:569 ../src/winspector.c:345 +#, c-format msgid "can't convert \"%s\" to boolean" -msgstr "" +msgstr "\"%s\"¸¦ ºÎ¿ï °ªÀ¸·Î ¹Ù²Ü ¼ö ¾øÀ½" + +#: ../src/session.c:625 ../src/session.c:719 +msgid "end of memory while saving session state" +msgstr "¼¼¼Ç »óŸ¦ ÀúÀåÇÏ´Â Áß¿¡ ¸Þ¸ð¸®°¡ ¸ðÀÚ¶ø´Ï´Ù" + +#. This is not fatal but can mean the session manager exited. +#. * If the session manager exited normally we would get a +#. * Die message, so this probably means an abnormal exit. +#. * If the sm was the last client of session, then we'll die +#. * anyway, otherwise we can continue doing our stuff. +#. +#: ../src/session.c:856 +msgid "connection to the session manager was lost" +msgstr "¼¼¼Ç °ü¸®ÀÚÀÇ ¿¬°áÀÌ ²÷¾îÁ³½À´Ï´Ù" -#: ../src/stacking.c:88 +#: ../src/stacking.c:69 msgid "could not get window list!!" -msgstr "À©µµ¿ì ¸®½ºÆ®¸¦ °¡Á® ¿Ã ¼ö ¾øÀ½!!" +msgstr "â ¸ñ·Ï¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù!!" -#: ../src/startup.c:187 +#: ../src/startup.c:197 +#, c-format msgid "internal X error: %s\n" msgstr "X ³»ºÎ ¿¡·¯: %s\n" -#: ../src/startup.c:250 +#: ../src/startup.c:259 +#, c-format msgid "got signal %i (%s) - restarting\n" -msgstr "%i (%s) ½ÅÈ£ °¨Áö - Àç½Ãµ¿\n" +msgstr "½ÅÈ£ %i (%s) °¨Áö - Àç½Ãµ¿ÇÕ´Ï´Ù\n" -#: ../src/startup.c:252 +#: ../src/startup.c:261 +#, c-format msgid "got signal %i - restarting\n" -msgstr "%i ½ÅÈ£ °¨Áö - Àç½Ãµ¿ÇÔ\n" +msgstr "½ÅÈ£ %i °¨Áö - Àç½Ãµ¿ÇÔ\n" -#: ../src/startup.c:266 +#: ../src/startup.c:275 +#, c-format msgid "%s: Received signal SIGTERM. Exiting..." msgstr "%s: SIGTERM ½ÅÈ£ ¹ÞÀ½. Á¾·á..." -#: ../src/startup.c:278 +#: ../src/startup.c:287 +#, c-format msgid "got signal %i (%s)\n" -msgstr "%i (%s) ½ÅÈ£ °¨Áö\n" +msgstr "½ÅÈ£ %i (%s) °¨Áö\n" -#: ../src/startup.c:280 +#: ../src/startup.c:289 +#, c-format msgid "got signal %i\n" -msgstr "%i ½ÅÈ£ °¨Áö\n" +msgstr "½ÅÈ£ %i °¨Áö\n" -#: ../src/startup.c:285 -msgid "crashed while trying to do some post-crash cleanup. Aborting immediatelly." +#: ../src/startup.c:294 +msgid "" +"crashed while trying to do some post-crash cleanup. Aborting immediatelly." msgstr "" +"ºñÁ¤»ó Á¾·áÈÄ Ã³¸®¸¦ ÇÏ·Á´Â µ¿¾È¿¡ ºñÁ¤»ó Á¾·áµÇ¾ú½À´Ï´Ù. Áï½Ã Á¾·áÇÕ´Ï´Ù." -#: ../src/startup.c:296 +#. restart another window manager so that the X session doesn't +#. * go to space +#: ../src/startup.c:305 msgid "trying to start alternative window manager..." -msgstr "" +msgstr "´ëü¿ë â °ü¸®ÀÚ¸¦ ½ÃÀÛÇÏ°Ú½À´Ï´Ù..." -#: ../src/startup.c:691 +#: ../src/startup.c:714 +#, c-format msgid "icon size is configured to %i, but it's too small. Using 16, instead\n" -msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜ Å©±â(%i)°¡ ³Ê¹« ÀÛÀ½. 16À¸·Î ¹Ù²Þ\n" +msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜ Å©±â(%i)°¡ ³Ê¹« ÀÛÀ½. ´ë½Å 16À¸·Î ¹Ù²ß´Ï´Ù\n" -#: ../src/startup.c:735 +#: ../src/startup.c:758 msgid "it seems that there already is a window manager running" -msgstr "ÀÌ¹Ì ´Ù¸¥ À©µµ¿ì ¸Þ´ÏÁ®°¡ ÀÛµ¿ Áß" +msgstr "ÀÌ¹Ì ´Ù¸¥ â °ü¸®ÀÚ°¡ µ¿ÀÛÇÏ°í ÀÖ´Â °Í °°½À´Ï´Ù" -#: ../src/startup.c:741 +#: ../src/startup.c:764 +#, c-format msgid "could not manage screen %i" -msgstr "" +msgstr "È­¸é %i¸¦ ´Ù·ê ¼ö ¾øÀ½" -#: ../src/startup.c:797 +#: ../src/startup.c:820 msgid "could not manage any screen" -msgstr "" +msgstr "¸ðµç È­¸éÀ» ´Ù·ê ¼ö ¾øÀ½" -#: ../src/switchmenu.c:124 +#: ../src/switchmenu.c:112 msgid "Windows" -msgstr "À©µµ¿ì ¸®½ºÆ®" +msgstr "â" #: ../src/texture.c:267 +#, c-format msgid "image file \"%s\" used as texture could not be found." -msgstr "\"%s\" À̹ÌÁö ÆÄÀÏÀ» ãÀ» ¼ö ¾øÀ½." +msgstr "ÅؽºÃ³·Î »ç¿ëÇÏ´Â À̹ÌÁö ÆÄÀÏ \"%s\"À» ãÀ» ¼ö ¾ø½À´Ï´Ù." #: ../src/texture.c:273 +#, c-format msgid "could not load texture pixmap \"%s\":%s" -msgstr "Texture pixmap \"%s\"À» ¿­ ¼ö°¡ ¾øÀ½." +msgstr "ÅؽºÃ³ ÇȽº¸Ê \"%s\"À» ¿­ ¼ö°¡ ¾øÀ½: %s" #: ../src/texture.c:377 ../src/texture.c:488 +#, c-format msgid "could not render texture: %s" -msgstr "Texture ·»´õ¸µÀ» ÇÒ ¼ö ¾øÀ½: %s" +msgstr "ÅؽºÃ³ ·»´õ¸µÀ» ÇÒ ¼ö ¾øÀ½: %s" -#: ../src/wdefaults.c:396 +#: ../src/wdefaults.c:402 +#, c-format msgid "could not find icon file \"%s\"" -msgstr "\"%s\" ¾ÆÀÌÄÜÀ» ãÁö ¸øÇÔ" +msgstr "¾ÆÀÌÄÜ ÆÄÀÏ \"%s\"À» ãÁö ¸øÇß½À´Ï´Ù" -#: ../src/window.c:2201 ../src/window.c:2344 +#: ../src/window.c:2281 ../src/window.c:2413 msgid "" "the NumLock, ScrollLock or similar key seems to be turned on.\n" "Turn it off or some mouse actions and keyboard shortcuts will not work." msgstr "" +"NumLock, ScrollLock À̳ª ´Ù¸¥ ºñ½ÁÇÑ Á¾·ùÀÇ Å°°¡ ÄÑÁ® ÀÖ´Â °Í\n" +"°°½À´Ï´Ù. ²ôÁö ¾ÊÀ¸¸é ÀϺΠ¸¶¿ì½º µ¿ÀÛÀ̳ª Å°º¸µå ´ÜÃàÅ°°¡ µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù." -#: ../src/winmenu.c:182 -msgid "could not create workspace submenu for window menu" -msgstr "À©µµ¿ì¸Þ´º¸¦ À§ÇÑ ÀÛ¾÷°ø°£ ºÎ¼Ó¸Þ´º¸¦ ¸¸µé ¼ö ¾øÀ½" +#: ../src/winmenu.c:197 ../src/winmenu.c:205 +msgid "Shortcut" +msgstr "´ÜÃàÅ°" -#: ../src/winmenu.c:204 +#: ../src/winmenu.c:247 ../src/winmenu.c:263 +msgid "could not create submenu for window menu" +msgstr "â ¸Þ´º¸¦ À§ÇÑ ºÎ¸Þ´º¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù" + +#. +#. * Warning: If you make some change that affects the order of the +#. * entries, you must update the command #defines in the top of +#. * this file. +#. +#: ../src/winmenu.c:289 msgid "(Un)Maximize" msgstr "(¾È)ÃÖ´ëÈ­" -#: ../src/winmenu.c:212 +#: ../src/winmenu.c:297 msgid "Miniaturize" msgstr "ÃÖ¼ÒÈ­" -#: ../src/winmenu.c:221 +#: ../src/winmenu.c:306 msgid "(Un)Shade" msgstr "(¾È)°¡¸²" -#: ../src/winmenu.c:229 +#: ../src/winmenu.c:314 msgid "Hide" msgstr "¼û±è" -#: ../src/winmenu.c:236 -msgid "Hide Others" -msgstr "´Ù¸¥ °Íµé ¼û±è" - -#: ../src/winmenu.c:238 +#: ../src/winmenu.c:322 msgid "Select" msgstr "¼±ÅÃ" -#: ../src/winmenu.c:246 +#: ../src/winmenu.c:330 msgid "Move To" -msgstr "¿Å±è" +msgstr "À̵¿" -#: ../src/winmenu.c:251 +#: ../src/winmenu.c:335 msgid "Attributes..." -msgstr "¼Ó¼º ¼³Á¤" +msgstr "¼Ó¼º ¼³Á¤..." -#: ../src/winmenu.c:253 -msgid "Close" -msgstr "´Ý±â" +#: ../src/winmenu.c:337 +msgid "Select Shortcut" +msgstr "´ÜÃàÅ° ¼±ÅÃ" -#: ../src/winspector.c:277 +#: ../src/winspector.c:279 +#, c-format msgid "Could not find icon \"%s\" specified for this window" -msgstr "ÀÌ À©µµ¿ì¿¡¼­ »ç¿ëÇÏ´Â \"%s\" ¾ÆÀÌÄÜÀ» ãÀ» ¼ö ¾øÀ½" +msgstr "ÀÌ Ã¢¿¡¼­ ÁöÁ¤ÇÑ ¾ÆÀÌÄÜ \"%s\"À» ãÀ» ¼ö ¾øÀ½" -#: ../src/winspector.c:293 +#: ../src/winspector.c:295 +#, c-format msgid "Could not open specified icon \"%s\":%s" -msgstr "ÁöÁ¤µÈ \"%s\" ¾ÆÀÌÄÜÀ» ¿­ ¼ö ¾øÀ½:%s" +msgstr "ÁöÁ¤µÈ ¾ÆÀÌÄÜ \"%s\"À» ¿­ ¼ö ¾øÀ½:%s" -#: ../src/winspector.c:989 +#: ../src/winspector.c:993 msgid "Save" msgstr "ÀúÀå" -#: ../src/winspector.c:995 +#: ../src/winspector.c:1001 msgid "Apply" msgstr "Àû¿ë" -#: ../src/winspector.c:1001 +#: ../src/winspector.c:1007 msgid "Revert" msgstr "º¹±¸" -#: ../src/winspector.c:1010 ../src/winspector.c:1020 +#: ../src/winspector.c:1016 ../src/winspector.c:1026 msgid "Window Specification" -msgstr "À©µµ¿ì ¼±ÅÃ" +msgstr "â ¼±ÅÃ" -#: ../src/winspector.c:1011 +#: ../src/winspector.c:1017 msgid "Window Attributes" -msgstr "À©µµ¿ì ¼Ó¼º" +msgstr "â ¼Ó¼º" -#: ../src/winspector.c:1012 +#: ../src/winspector.c:1018 msgid "Advanced Options" msgstr "°í±Þ ¿É¼Ç" -#: ../src/winspector.c:1013 +#: ../src/winspector.c:1019 msgid "Icon and Initial Workspace" -msgstr "¾ÆÀÌÄÜ, Ãʱâ ÀÛ¾÷°ø°£" +msgstr "¾ÆÀÌÄÜ°ú Ãʱâ ÀÛ¾÷°ø°£" -#: ../src/winspector.c:1014 +#: ../src/winspector.c:1020 msgid "Application Specific" -msgstr "¾ÖÇø®ÄÉÀ̼Ç" +msgstr "¾îÇø®ÄÉÀ̼ǿ¡ µû¶ó ´Ù¸¥ ¼³Á¤" -#: ../src/winspector.c:1028 +#: ../src/winspector.c:1034 msgid "Defaults for all windows" -msgstr "À©µµ¿ì ±âº»°ª" +msgstr "¸ðµç âÀÇ ±âº»°ªÀ¸·Î" -#: ../src/winspector.c:1064 +#: ../src/winspector.c:1070 msgid "" "The configuration will apply to all\n" "windows that have their WM_CLASS property set to the above selected\n" "name, when saved." msgstr "" -"¼³Á¤À» ÀúÀåÇϸé À§¿¡ ¼±ÅÃÇÑ À̸§À» Æ÷ÇÔÇÏ´Â WM_CLASS ¼Ó¼ºÀ» °¡Áö´Â ¸ðµç\n" -"À©µµ¿ì¿¡ ±× ¼³Á¤ÀÌ Àû¿ëµË´Ï´Ù.\n" -" " +"¼³Á¤À» ÀúÀåÇϸé WM_CLASS Ư¼º°ªÀÌ À§¿¡¼­ ÁöÁ¤ÇÑ\n" +"À̸§À¸·Î µÇ¾î ÀÖ´Â ¸ðµç â¿¡\n" +"±× ¼³Á¤ÀÌ Àû¿ëµË´Ï´Ù." -#: ../src/winspector.c:1071 +#: ../src/winspector.c:1077 msgid "Attributes" -msgstr "¼Ó¼º ¼±Åà Ç׸ñ" +msgstr "¼Ó¼º" -#: ../src/winspector.c:1081 +#: ../src/winspector.c:1087 msgid "Disable titlebar" -msgstr "ŸÀÌƲ¹Ù ¼û±è" +msgstr "Á¦¸ñ ¹Ù ¾ø¾Ú" -#: ../src/winspector.c:1085 +#: ../src/winspector.c:1091 msgid "Disable resizebar" -msgstr "Å©±âÁ¶Á¤¹Ù ¼û±è" +msgstr "Å©±âÁ¶Á¤ ¹Ù ¾ø¾Ú" -#: ../src/winspector.c:1089 +#: ../src/winspector.c:1095 msgid "Disable close button" msgstr "´Ý±â ¹öÆ° ¾ø¾Ú" -#: ../src/winspector.c:1093 +#: ../src/winspector.c:1099 msgid "Disable miniaturize button" msgstr "ÃÖ¼ÒÈ­ ¹öÆ° ¾ø¾Ú" -#: ../src/winspector.c:1097 -msgid "Keep on top" -msgstr "Ç×»ó À§" +#: ../src/winspector.c:1103 +msgid "Keep on top / floating" +msgstr "Ç×»ó À§·Î/¶ä" -#: ../src/winspector.c:1101 +#: ../src/winspector.c:1107 +msgid "Keep on bottom / sunken" +msgstr "Ç×»ó ¾Æ·¡·Î/°¡¶ó¾ÉÀ½" + +#: ../src/winspector.c:1111 msgid "Omnipresent" msgstr "Ç×»ó º¸ÀÓ" -#: ../src/winspector.c:1105 +#: ../src/winspector.c:1115 msgid "Start Miniaturized" msgstr "ÃÖ¼ÒÈ­ÇÏ¿© ½ÇÇà" -#: ../src/winspector.c:1109 +#: ../src/winspector.c:1119 msgid "Skip window list" -msgstr "À©µµ¿ì ¸®½ºÆ®¿¡¼­ Á¦¿Ü" +msgstr "â ¸ñ·Ï¿¡ ³ªÅ¸³ªÁö ¾ÊÀ½" -#: ../src/winspector.c:1123 +#: ../src/winspector.c:1133 msgid "Advanced" -msgstr "°í±Þ ¼±Åà Ç׸ñ" +msgstr "°í±Þ Ç׸ñ" -#: ../src/winspector.c:1133 +#: ../src/winspector.c:1143 msgid "Ignore HideOthers" -msgstr "´Ù¸¥ °Íµé ¼û±è ¹«½Ã" +msgstr "HideOthers(´Ù¸¥ °Íµé ¼û±è) ¹«½Ã" -#: ../src/winspector.c:1137 +#: ../src/winspector.c:1147 msgid "Don't bind keyboard shortcuts" -msgstr "´ÜÃàÅ° »ç¿ë ºÒ°¡" +msgstr "Å°º¸µå ´ÜÃàÅ° »ç¿ë ¾ÈÇÔ" -#: ../src/winspector.c:1141 +#: ../src/winspector.c:1151 msgid "Don't bind mouse clicks" -msgstr "¸¶¿ì½º Ŭ¸¯ »ç¿ë ºÒ°¡" +msgstr "¸¶¿ì½º Ŭ¸¯ »ç¿ë ¾ÈÇÔ" -#: ../src/winspector.c:1145 +#: ../src/winspector.c:1155 msgid "Keep inside screen" msgstr "Ç×»ó È­¸é¾È¿¡ À§Ä¡" -#: ../src/winspector.c:1149 +#: ../src/winspector.c:1159 msgid "Don't let it take focus" msgstr "È°¼ºÈ­ ¾ÈµÊ" -#: ../src/winspector.c:1153 +#: ../src/winspector.c:1163 msgid "Don't Save Session" msgstr "¼¼¼ÇÀ» ÀúÀåÇÏÁö ¾ÊÀ½" -#: ../src/winspector.c:1157 +#: ../src/winspector.c:1167 msgid "Emulate Application Icon" -msgstr "" +msgstr "¾îÇø®ÄÉÀÌ¼Ç ¾ÆÀÌÄÜ Èä³»³»±â" -#: ../src/winspector.c:1172 -msgid "Enable the \"Don't bind...\" options to allow the application to receive all mouse or keyboard events." -msgstr " " +#: ../src/winspector.c:1182 +msgid "" +"Enable the \"Don't bind...\" options to allow the application to receive all " +"mouse or keyboard events." +msgstr "" +"¾îÇø®ÄÉÀ̼ÇÀÌ ¸ðµç ¸¶¿ì½º¿Í Å°º¸µå À̺¥Æ®¸¦ ¹Þµµ·Ï \"... »ç¿ë ¾ÈÇÔ\"¿É¼ÇÀ» " +"»ç¿ë °¡´ÉÇϵµ·Ï ÇÕ´Ï´Ù." -#: ../src/winspector.c:1179 +#: ../src/winspector.c:1189 msgid "Miniwindow Image" -msgstr "¾ÆÀÌÄÜ" +msgstr "¾ÆÀÌÄÜ À̹ÌÁö" -#: ../src/winspector.c:1198 +#: ../src/winspector.c:1208 msgid "Update" msgstr "°»½Å" -#: ../src/winspector.c:1213 +#: ../src/winspector.c:1223 msgid "Icon file name:" msgstr "¾ÆÀÌÄÜ ÆÄÀϸí:" -#: ../src/winspector.c:1225 +#: ../src/winspector.c:1235 msgid "Ignore client supplied icon" -msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÀÌÄÜ ¹«½Ã" +msgstr "Ŭ¶óÀ̾ðÆ® Á¦°ø ¾ÆÀÌÄÜ ¹«½Ã" -#: ../src/winspector.c:1232 +#: ../src/winspector.c:1242 msgid "Initial Workspace" msgstr "Ãʱâ ÀÛ¾÷°ø°£" -#: ../src/winspector.c:1237 +#: ../src/winspector.c:1247 msgid "Nowhere in particular" msgstr "Ưº°ÇÑ ¼³Á¤ ¾øÀ½" -#: ../src/winspector.c:1271 +#: ../src/winspector.c:1281 msgid "Application Wide" -msgstr "¾ÖÇø®ÄÉÀ̼Ç" +msgstr "¾îÇø®ÄÉÀÌ¼Ç ¿ÍÀ̵å" -#: ../src/winspector.c:1281 +#: ../src/winspector.c:1291 msgid "Start Hidden" msgstr "¼û°Ü¼­ ½ÇÇà" -#: ../src/winspector.c:1285 +#: ../src/winspector.c:1295 msgid "No application icon" -msgstr "¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÀÌÄÜ »ç¿ë ¾ÈÇÔ" +msgstr "¾îÇø®ÄÉÀÌ¼Ç ¾ÆÀÌÄÜ ¾øÀ½" #: ../src/workspace.c:89 ../src/workspace.c:90 ../src/workspace.c:423 +#, c-format msgid "Workspace %i" -msgstr "" +msgstr "ÀÛ¾÷°ø°£ %i" #: ../src/workspace.c:471 msgid "Workspaces" @@ -1103,7 +1308,7 @@ msgstr " #: ../src/workspace.c:480 msgid "New" -msgstr "»õ ÀÛ¾÷°ø°£ ¸¸µë" +msgstr "»õ ÀÛ¾÷°ø°£ ÀÛ¼º" #: ../src/workspace.c:481 msgid "Destroy Last" @@ -1111,4 +1316,5 @@ msgstr " #: ../src/xutil.c:228 msgid "invalid data in selection" -msgstr "" +msgstr "¼±Åÿ¡ À߸øµÈ µ¥ÀÌÅÍ" +� diff --git a/src/Makefile.am b/src/Makefile.am index e6ba84b1..e45060d6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,18 +35,25 @@ wmaker_SOURCES = \ event.c \ framewin.c \ framewin.h \ + gnome.c \ + gnome.h \ funcs.h \ icon.c \ icon.h \ keybind.h \ + kwm.h \ + kwm.c \ list.c \ list.h \ main.c \ menu.c \ menu.h \ misc.c \ + motif.c \ motif.h \ moveres.c \ + openlook.c \ + openlook.h \ pixmap.c \ pixmap.h \ placement.c \ @@ -69,6 +76,8 @@ wmaker_SOURCES = \ switchmenu.c \ texture.c \ texture.h \ + xde.h \ + xde.c \ xmodifier.h \ xmodifier.c \ xutil.c \ @@ -93,7 +102,7 @@ wmaker_SOURCES = \ CPPFLAGS = \ @CPPFLAGS@ \ - @SHAPE@ @I18N@ @X_LOCALE@ \ + @SHAPE@ @I18N@ @X_LOCALE@ @LITE@ \ @DFLAGS@ \ -DNLSDIR="\"$(nlsdir)\"" \ -DPKGDATADIR="\"$(pkgdatadir)\"" \ @@ -107,9 +116,9 @@ INCLUDES = \ wmaker_LDADD = \ - -L$(top_builddir)/WINGs -lWINGs\ - -L$(top_builddir)/wrlib -lwraster\ - -L$(top_builddir)/libPropList -lPropList\ + $(top_builddir)/WINGs/libWINGs.a\ + $(top_builddir)/wrlib/libwraster.la\ + $(top_builddir)/libPropList/libPropList.la\ @GFXLFLAGS@ \ @XLFLAGS@ \ @GFXLIBS@ \ diff --git a/src/Makefile.in b/src/Makefile.in index d7293c20..2332801a 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -127,18 +130,25 @@ wmaker_SOURCES = \ event.c \ framewin.c \ framewin.h \ + gnome.c \ + gnome.h \ funcs.h \ icon.c \ icon.h \ keybind.h \ + kwm.h \ + kwm.c \ list.c \ list.h \ main.c \ menu.c \ menu.h \ misc.c \ + motif.c \ motif.h \ moveres.c \ + openlook.c \ + openlook.h \ pixmap.c \ pixmap.h \ placement.c \ @@ -161,6 +171,8 @@ wmaker_SOURCES = \ switchmenu.c \ texture.c \ texture.h \ + xde.h \ + xde.c \ xmodifier.h \ xmodifier.c \ xutil.c \ @@ -184,7 +196,7 @@ wmaker_SOURCES = \ CPPFLAGS = \ @CPPFLAGS@ \ - @SHAPE@ @I18N@ @X_LOCALE@ \ + @SHAPE@ @I18N@ @X_LOCALE@ @LITE@ \ @DFLAGS@ \ -DNLSDIR="\"$(nlsdir)\"" \ -DPKGDATADIR="\"$(pkgdatadir)\"" \ @@ -196,9 +208,9 @@ INCLUDES = \ -I$(top_srcdir)/WINGs @XCFLAGS@ wmaker_LDADD = \ - -L$(top_builddir)/WINGs -lWINGs\ - -L$(top_builddir)/wrlib -lwraster\ - -L$(top_builddir)/libPropList -lPropList\ + $(top_builddir)/WINGs/libWINGs.a\ + $(top_builddir)/wrlib/libwraster.la\ + $(top_builddir)/libPropList/libPropList.la\ @GFXLFLAGS@ \ @XLFLAGS@ \ @GFXLIBS@ \ @@ -220,16 +232,20 @@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ wmaker_OBJECTS = actions.o appicon.o application.o appmenu.o balloon.o \ client.o colormap.o defaults.o dialog.o dock.o dockedapp.o event.o \ -framewin.o icon.o list.o main.o menu.o misc.o moveres.o pixmap.o \ -placement.o properties.o proplist.o resources.o rootmenu.o screen.o \ -session.o shutdown.o stacking.o startup.o superfluous.o switchmenu.o \ -texture.o xmodifier.o xutil.o wcore.o wdefaults.o window.o winmenu.o \ -winspector.o workspace.o wmsound.o text.o -wmaker_DEPENDENCIES = +framewin.o gnome.o icon.o kwm.o list.o main.o menu.o misc.o motif.o \ +moveres.o openlook.o pixmap.o placement.o properties.o proplist.o \ +resources.o rootmenu.o screen.o session.o shutdown.o stacking.o \ +startup.o superfluous.o switchmenu.o texture.o xde.o xmodifier.o \ +xutil.o wcore.o wdefaults.o window.o winmenu.o winspector.o workspace.o \ +wmsound.o text.o +wmaker_DEPENDENCIES = $(top_builddir)/WINGs/libWINGs.a \ +$(top_builddir)/wrlib/libwraster.la \ +$(top_builddir)/libPropList/libPropList.la wmaker_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in config.h.in stamp-h.in \ wconfig.h.in @@ -244,7 +260,7 @@ OBJECTS = $(wmaker_OBJECTS) all: Makefile $(PROGRAMS) config.h .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile @@ -290,8 +306,8 @@ install-binPROGRAMS: $(bin_PROGRAMS) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ - echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ - $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; \ done @@ -320,6 +336,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + wmaker: $(wmaker_OBJECTS) $(wmaker_DEPENDENCIES) @rm -f wmaker $(LINK) $(wmaker_LDFLAGS) $(wmaker_OBJECTS) $(wmaker_LDADD) $(LIBS) @@ -397,19 +432,22 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean: mostlyclean-hdr mostlyclean-binPROGRAMS \ - mostlyclean-compile mostlyclean-tags \ - mostlyclean-generic + mostlyclean-compile mostlyclean-libtool \ + mostlyclean-tags mostlyclean-generic -clean: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ - clean-generic mostlyclean +clean: clean-hdr clean-binPROGRAMS clean-compile clean-libtool \ + clean-tags clean-generic mostlyclean distclean: distclean-hdr distclean-binPROGRAMS distclean-compile \ - distclean-tags distclean-generic clean + distclean-libtool distclean-tags distclean-generic \ + clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ - maintainer-clean-compile maintainer-clean-tags \ - maintainer-clean-generic distclean + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." @@ -417,10 +455,11 @@ maintainer-clean: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile tags mostlyclean-tags distclean-tags \ -clean-tags maintainer-clean-tags distdir info dvi installcheck \ -install-exec install-data install uninstall all installdirs \ -mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean diff --git a/src/WindowMaker.h b/src/WindowMaker.h index c981ede8..5c0720c5 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -62,9 +62,10 @@ enum { WMFloatingLevel = 3, WMDockLevel = 4, WMSubmenuLevel = 5, - WMMainMenuLevel = 6 + WMMainMenuLevel = 6, + WMOuterSpaceLevel = 7 }; -#define MAX_WINDOW_LEVELS 7 +#define MAX_WINDOW_LEVELS 8 /* * WObjDescriptor will be used by the event dispatcher to @@ -93,6 +94,15 @@ typedef struct WObjDescriptor { } WObjDescriptor; +/* shutdown modes */ +typedef enum { + WSExitMode, + WSLogoutMode, + WSKillMode, + WSRestartPreparationMode +} WShutdownMode; + + /* internal buttons */ #define WBUT_CLOSE 0 #define WBUT_BROKENCLOSE 1 @@ -186,15 +196,19 @@ typedef struct WObjDescriptor { #define WSTATE_RESTARTING 4 +typedef struct { + int x1, y1; + int x2, y2; +} WArea; + typedef struct WCoord { int x, y; } WCoord; - typedef struct WPreferences { - char **pixmap_path; /* NULL terminated array of */ + char *pixmap_path; /* : separate list of */ /* paths to find pixmaps */ - char **icon_path; /* NULL terminated array of */ + char *icon_path; /* : separated list of */ /* paths to find icons */ char size_display; /* display type for resize geometry */ @@ -248,7 +262,7 @@ typedef struct WPreferences { char iconification_style; /* position to place icons */ - char disable_root_mouse; /* disable mouse actions in root window */ + char disable_root_mouse; /* disable button events in root window */ char auto_focus; /* focus window when it's mapped */ diff --git a/src/actions.c b/src/actions.c index e13b3422..15af9023 100644 --- a/src/actions.c +++ b/src/actions.c @@ -19,8 +19,12 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ + +#define HACK + #include "wconfig.h" + #include <X11/Xlib.h> #include <X11/Xutil.h> #include <stdlib.h> @@ -46,6 +50,13 @@ #include "list.h" #include "workspace.h" +#ifdef GNOME_STUFF +# include "gnome.h" +#endif +#ifdef KWM_HINTS +# include "kwm.h" +#endif + #ifdef WMSOUND #include "wmsound.h" #endif @@ -129,9 +140,11 @@ wSetFocusTo(WScreen *scr, WWindow *wwin) int wasfocused; LastFocusChange = timestamp; - + +#ifndef HACK if (ignoreTimestamp) - timestamp=CurrentTime; +#endif + timestamp = CurrentTime; if (focused) oapp = wApplicationOf(focused->main_window); @@ -147,6 +160,10 @@ wSetFocusTo(WScreen *scr, WWindow *wwin) wApplicationDeactivate(oapp); #endif } +#ifdef KWM_HINTS + wKWMUpdateActiveWindowHint(scr); + wKWMSendEventMessage(NULL, WKWMFocusWindow); +#endif return; } wasfocused = wwin->flags.focused; @@ -156,7 +173,7 @@ wSetFocusTo(WScreen *scr, WWindow *wwin) if (napp) napp->last_workspace = wwin->screen_ptr->current_workspace; - if (wwin->window_flags.no_focusable) + if (WFLAGP(wwin, no_focusable)) return; if (wwin->flags.mapped) { @@ -241,6 +258,10 @@ wSetFocusTo(WScreen *scr, WWindow *wwin) wApplicationActivate(napp); #endif } +#ifdef KWM_HINTS + wKWMUpdateActiveWindowHint(scr); + wKWMSendEventMessage(wwin, WKWMFocusWindow); +#endif XFlush(dpy); } @@ -303,10 +324,22 @@ wShadeWindow(WWindow *wwin) /* for the client it's just like iconification */ wFrameWindowResize(wwin->frame, wwin->frame->core->width, wwin->frame->top_width-1); + + wwin->client.y = wwin->frame_y - wwin->client.height + + wwin->frame->top_width; + wWindowSynthConfigureNotify(wwin); + /* wClientSetState(wwin, IconicState, None); */ +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMIconifiedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif /* update window list to reflect shaded state */ UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); @@ -368,11 +401,14 @@ wUnshadeWindow(WWindow *wwin) } #endif /* ANIMATIONS */ - wwin->flags.skip_next_animation = 0; wFrameWindowResize(wwin->frame, wwin->frame->core->width, wwin->frame->top_width + wwin->client.height + wwin->frame->bottom_width); + + wwin->client.y = wwin->frame_y + wwin->frame->top_width; + wWindowSynthConfigureNotify(wwin); + /* wClientSetState(wwin, NormalState, None); */ @@ -381,8 +417,17 @@ wUnshadeWindow(WWindow *wwin) if (wwin->flags.focused) wSetFocusTo(wwin->screen_ptr, wwin); +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMIconifiedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif + /* update window list to reflect unshaded state */ UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } @@ -390,6 +435,7 @@ void wMaximizeWindow(WWindow *wwin, int directions) { int new_width, new_height, new_x, new_y; + WArea usableArea = wwin->screen_ptr->totalUsableArea; if (wwin->flags.shaded) { wwin->flags.skip_next_animation = 1; @@ -400,51 +446,47 @@ wMaximizeWindow(WWindow *wwin, int directions) wwin->old_geometry.height = wwin->client.height; wwin->old_geometry.x = wwin->frame_x; wwin->old_geometry.y = wwin->frame_y; - if (directions & MAX_HORIZONTAL) { - new_width = wwin->screen_ptr->scr_width-FRAME_BORDER_WIDTH*2; - - new_x = 0; - if ((wPreferences.icon_yard & IY_VERT) - && wPreferences.no_window_over_icons) { - new_width -= wPreferences.icon_size; - if (!(wPreferences.icon_yard & IY_RIGHT)) - new_x += wPreferences.icon_size; - } +#ifdef KWM_HINTS + wKWMUpdateClientGeometryRestore(wwin); +#endif + + if (directions & MAX_HORIZONTAL) { - if (wwin->screen_ptr->dock - && (!wwin->screen_ptr->dock->lowered - || wPreferences.no_window_over_dock)) { + new_width = (usableArea.x2-usableArea.x1)-FRAME_BORDER_WIDTH*2; + new_x = usableArea.x1; - new_width -= wPreferences.icon_size + DOCK_EXTRA_SPACE; - if (!wwin->screen_ptr->dock->on_right_side) - new_x += wPreferences.icon_size + DOCK_EXTRA_SPACE; - } } else { + new_x = wwin->frame_x; new_width = wwin->frame->core->width; + } if (directions & MAX_VERTICAL) { - new_height = wwin->screen_ptr->scr_height-FRAME_BORDER_WIDTH*2; - new_y = 0; - if (!(wPreferences.icon_yard & IY_VERT) - && wPreferences.no_window_over_icons) { - new_height -= wPreferences.icon_size; - - if (wPreferences.icon_yard & IY_TOP) - new_y += wPreferences.icon_size; - } + new_height = (usableArea.y2-usableArea.y1)-FRAME_BORDER_WIDTH*2; + new_y = usableArea.y1; + } else { + new_y = wwin->frame_y; new_height = wwin->frame->core->height; + } new_height -= wwin->frame->top_width+wwin->frame->bottom_width; wWindowConstrainSize(wwin, &new_width, &new_height); wWindowConfigure(wwin, new_x, new_y, new_width, new_height); +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMMaximizedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif + #ifdef WMSOUND wSoundPlay(WMSOUND_MAXIMIZE); #endif @@ -456,6 +498,9 @@ wUnmaximizeWindow(WWindow *wwin) { int restore_x, restore_y; + if (!wwin->flags.maximized) + return; + if (wwin->flags.shaded) { wwin->flags.skip_next_animation = 1; wUnshadeWindow(wwin); @@ -468,6 +513,14 @@ wUnmaximizeWindow(WWindow *wwin) wWindowConfigure(wwin, restore_x, restore_y, wwin->old_geometry.width, wwin->old_geometry.height); +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMMaximizedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif + #ifdef WMSOUND wSoundPlay(WMSOUND_UNMAXIMIZE); #endif @@ -737,7 +790,14 @@ unmapTransientsFor(WWindow *wwin) XUnmapWindow(dpy, tmp->frame->core->window); if (!tmp->flags.shaded) wClientSetState(tmp, IconicState, None); +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(tmp, KWMIconifiedFlag); + wKWMSendEventMessage(tmp, WKWMRemoveWindow); + tmp->flags.kwm_hidden_for_modules = 1; +#endif + UpdateSwitchMenu(wwin->screen_ptr, tmp, ACTION_CHANGE_STATE); + } tmp = tmp->prev; } @@ -765,7 +825,16 @@ mapTransientsFor(WWindow *wwin) tmp->flags.semi_focused = 0; if (!tmp->flags.shaded) wClientSetState(tmp, NormalState, None); +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(tmp, KWMIconifiedFlag); + if (tmp->flags.kwm_hidden_for_modules) { + wKWMSendEventMessage(tmp, WKWMAddWindow); + tmp->flags.kwm_hidden_for_modules = 0; + } +#endif + UpdateSwitchMenu(wwin->screen_ptr, tmp, ACTION_CHANGE_STATE); + } tmp = tmp->prev; } @@ -897,7 +966,8 @@ wIconifyWindow(WWindow *wwin) wwin->flags.skip_next_animation = 0; if (wwin->screen_ptr->current_workspace==wwin->frame->workspace || - wwin->window_flags.omnipresent || wPreferences.sticky_icons) + IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons) + XMapWindow(dpy, wwin->icon->core->window); AddToStackList(wwin->icon->core); @@ -913,7 +983,7 @@ wIconifyWindow(WWindow *wwin) tmp = wwin->prev; while (tmp) { - if (!tmp->window_flags.no_focusable + if (!WFLAGP(tmp, no_focusable) && !(tmp->flags.hidden||tmp->flags.miniaturized)) break; tmp = tmp->prev; @@ -941,9 +1011,16 @@ wIconifyWindow(WWindow *wwin) if (wwin->flags.selected) wIconSelect(wwin->icon); +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMIconifiedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); - } @@ -1024,8 +1101,15 @@ wDeiconifyWindow(WWindow *wwin) wArrangeIcons(wwin->screen_ptr, True); } - UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientStateHint(wwin, KWMIconifiedFlag); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); } @@ -1040,7 +1124,12 @@ hideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate) XUnmapWindow(dpy, wwin->icon->core->window); wwin->flags.hidden = 1; wwin->icon->mapped = 0; +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + return; } @@ -1088,7 +1177,12 @@ hideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate) #endif wwin->flags.skip_next_animation = 0; +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } @@ -1118,7 +1212,7 @@ wHideOtherApplications(WWindow *awin) && !(wwin->flags.miniaturized||wwin->flags.hidden) && !wwin->flags.internal_window && (!wwin->flags.inspector_open || wwin->inspector->frame!=awin) - && !wwin->window_flags.no_hide_others) { + && !WFLAGP(wwin, no_hide_others)) { #ifdef REDUCE_APPICONS match = 0; @@ -1133,8 +1227,8 @@ wHideOtherApplications(WWindow *awin) } #endif - if (wwin->main_window==None || wwin->window_flags.no_appicon) { - if (!wwin->window_flags.no_miniaturizable) { + if (wwin->main_window==None || WFLAGP(wwin, no_appicon)) { + if (!WFLAGP(wwin, no_miniaturizable)) { wwin->flags.skip_next_animation = 1; wIconifyWindow(wwin); } @@ -1149,7 +1243,7 @@ wHideOtherApplications(WWindow *awin) tapp->flags.skip_next_animation = 1; wHideApplication(tapp); } else { - if (!wwin->window_flags.no_miniaturizable) { + if (!WFLAGP(wwin, no_miniaturizable)) { wwin->flags.skip_next_animation = 1; wIconifyWindow(wwin); } @@ -1250,7 +1344,7 @@ wHideApplication(WApplication *wapp) if (wPreferences.focus_mode==WKF_CLICK) { wlist = scr->focused_window; while (wlist) { - if (!wlist->window_flags.no_focusable && !wlist->flags.hidden + if (!WFLAGP(wlist, no_focusable) && !wlist->flags.hidden && (wlist->flags.mapped || wlist->flags.shaded)) break; wlist = wlist->prev; @@ -1309,7 +1403,12 @@ unhideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate, wClientSetState(pwin, NormalState, None); } +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, False); +#endif + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } @@ -1378,7 +1477,9 @@ wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurrentWS) wlist->icon->mapped = 1; } wlist->flags.hidden = 0; + UpdateSwitchMenu(scr, wlist, ACTION_CHANGE_STATE); + if (wlist->frame->workspace != scr->current_workspace) wWindowChangeWorkspace(wlist, scr->current_workspace); } @@ -1426,7 +1527,7 @@ wShowAllWindows(WScreen *scr) while (wwin) { if (!wwin->flags.internal_window && (scr->current_workspace == wwin->frame->workspace - || wwin->window_flags.omnipresent)) { + || IS_OMNIPRESENT(wwin))) { if (wwin->flags.miniaturized) { wwin->flags.skip_next_animation = 1; wDeiconifyWindow(wwin); @@ -1569,8 +1670,7 @@ wArrangeIcons(WScreen *scr, Bool arrangeAll) while (wwin) { if (wwin->icon && wwin->flags.miniaturized && !wwin->flags.hidden && (wwin->frame->workspace==scr->current_workspace || - wwin->window_flags.omnipresent || - wPreferences.sticky_icons)) { + IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons)) { if (arrangeAll || !wwin->flags.icon_moved) { if (wwin->icon_x != X || wwin->icon_y != Y) { diff --git a/src/actions.h b/src/actions.h index 7b4e9cb3..9fd89120 100644 --- a/src/actions.h +++ b/src/actions.h @@ -31,6 +31,7 @@ void wSetFocusTo(WScreen *scr, WWindow *wwin); int wMouseMoveWindow(WWindow *wwin, XEvent *ev); +int wKeyboardMoveResizeWindow(WWindow *wwin); void wMouseResizeWindow(WWindow *wwin, XEvent *ev); @@ -40,7 +41,10 @@ void wUnshadeWindow(WWindow *wwin); void wIconifyWindow(WWindow *wwin); void wDeiconifyWindow(WWindow *wwin); +#ifndef LITE void wSelectWindows(WScreen *scr, XEvent *ev); +#endif + void wSelectWindow(WWindow *wwin, Bool flag); void wUnselectWindows(WScreen *scr); diff --git a/src/appicon.c b/src/appicon.c index a213f556..fa60711b 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -546,10 +546,10 @@ createApplicationMenu(WScreen *scr) menu = wMenuCreate(scr, NULL, False); wMenuAddCallback(menu, _("Unhide Here"), unhideHereCallback, NULL); - wMenuAddCallback(menu, _("(Un)Hide"), hideCallback, NULL); + wMenuAddCallback(menu, _("Hide"), hideCallback, NULL); wMenuAddCallback(menu, _("Set Icon..."), setIconCallback, NULL); wMenuAddCallback(menu, _("Kill"), killCallback, NULL); - + return menu; } @@ -563,12 +563,20 @@ openApplicationMenu(WApplication *wapp, int x, int y) if (!scr->icon_menu) { scr->icon_menu = createApplicationMenu(scr); + free(scr->window_menu->entries[1]->text); } menu = scr->icon_menu; - if (!menu->flags.realized) - wMenuRealize(menu); - + + if (wapp->flags.hidden) { + menu->entries[1]->text = _("Unhide"); + } else { + menu->entries[1]->text = _("Hide"); + } + + menu->flags.realized = 0; + wMenuRealize(menu); + x -= menu->frame->core->width/2; if (x + menu->frame->core->width > scr->scr_width) x = scr->scr_width - menu->frame->core->width; @@ -741,6 +749,9 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event) wDockShowIcons(scr->dock); } + if (scr->dock->auto_raise_lower) + wDockRaise(scr->dock); + scr->last_dock = scr->dock; XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); @@ -778,6 +789,9 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event) wDockShowIcons(workspace->clip); } + if (workspace->clip->auto_raise_lower) + wDockRaise(workspace->clip); + scr->last_dock = workspace->clip; XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y); @@ -825,6 +839,10 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event) if (scr->last_dock->auto_collapse) { collapsed = 0; } + if (workspace->clip && + workspace->clip != scr->last_dock && + workspace->clip->auto_raise_lower) + wDockLower(workspace->clip); if (!docked) { /* If icon could not be docked, slide it back to the old @@ -836,6 +854,8 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event) XMoveWindow(dpy, icon->core->window, x, y); aicon->x_pos = x; aicon->y_pos = y; + if (workspace->clip && workspace->clip->auto_raise_lower) + wDockLower(workspace->clip); } if (collapsed) { scr->last_dock->collapsed = 1; diff --git a/src/application.c b/src/application.c index a579ee4c..16f304ad 100644 --- a/src/application.c +++ b/src/application.c @@ -64,7 +64,6 @@ makeMainWindow(WScreen *scr, Window window) WWindow *wwin; XWindowAttributes attr; - if (!XGetWindowAttributes(dpy, window, &attr)) { return NULL; } @@ -80,8 +79,9 @@ makeMainWindow(WScreen *scr, Window window) */ PropGetWMClass(window, &wwin->wm_class, &wwin->wm_instance); + wDefaultFillAttributes(scr, wwin->wm_instance, wwin->wm_class, - &wwin->window_flags, True); + &wwin->user_flags, &wwin->defined_user_flags, True); XSelectInput(dpy, window, attr.your_event_mask | PropertyChangeMask | StructureNotifyMask ); @@ -296,20 +296,21 @@ wApplicationCreate(WScreen *scr, Window main_window) /* * Set application wide attributes from the leader. */ - wapp->flags.hidden = wapp->main_window_desc->window_flags.start_hidden; + wapp->flags.hidden = WFLAGP(wapp->main_window_desc, start_hidden); - wapp->flags.emulated = wapp->main_window_desc->window_flags.emulate_appicon; + wapp->flags.emulated = WFLAGP(wapp->main_window_desc, emulate_appicon); /* application descriptor */ XSaveContext(dpy, main_window, wAppWinContext, (XPointer)wapp); - if (!wapp->main_window_desc->window_flags.no_appicon) { + if (!WFLAGP(wapp->main_window_desc, no_appicon)) { wapp->app_icon = NULL; if (scr->last_dock) wapp->app_icon = findDockIconFor(scr->last_dock, main_window); /* check main dock if we did not find it in last dock */ - if (!wapp->app_icon && scr->dock) + if (!wapp->app_icon && scr->dock) { wapp->app_icon = findDockIconFor(scr->dock, main_window); + } /* finally check clips */ if (!wapp->app_icon) { int i; diff --git a/src/client.c b/src/client.c index e1993245..1f52cc08 100644 --- a/src/client.c +++ b/src/client.c @@ -43,6 +43,9 @@ #include "stacking.h" #include "appicon.h" #include "appmenu.h" +#ifdef KWM_HINTS +#include "kwm.h" +#endif /****** Global Variables ******/ @@ -317,10 +320,16 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) if (!wFetchName(dpy, wwin->client_win, &tmp)) { /* the hint was removed */ tmp = wstrdup(DEF_WINDOW_TITLE); +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif } if (wFrameWindowChangeTitle(wwin->frame, tmp)) { /* only update the menu if the title has actually changed */ UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE); +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif } if (tmp) free(tmp); @@ -328,6 +337,9 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) break; case XA_WM_ICON_NAME: +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif if (!wwin->icon) break; else { @@ -486,6 +498,9 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) if (wapp && wapp->app_icon) { wIconUpdate(wapp->app_icon->icon); } +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMIconChange); +#endif } if (wwin->wm_hints->flags & UrgencyHint) @@ -544,15 +559,15 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) } wwin->transient_for = new_owner; if (new_owner==None) { - if (wwin->window_flags.no_miniaturizable) { - wwin->window_flags.no_miniaturizable = 0; - wwin->window_flags.no_miniaturize_button = 0; + if (WFLAGP(wwin, no_miniaturizable)) { + WSETUFLAG(wwin, no_miniaturizable, 0); + WSETUFLAG(wwin, no_miniaturize_button, 0); if (wwin->frame) wWindowConfigureBorders(wwin); } - } else if (!wwin->window_flags.no_miniaturizable) { - wwin->window_flags.no_miniaturizable = 1; - wwin->window_flags.no_miniaturize_button = 1; + } else if (!WFLAGP(wwin, no_miniaturizable)) { + WSETUFLAG(wwin, no_miniaturizable, 1); + WSETUFLAG(wwin, no_miniaturize_button, 1); if (wwin->frame) wWindowConfigureBorders(wwin); } @@ -562,12 +577,11 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) default: if (event->atom==_XA_WM_PROTOCOLS) { + PropGetProtocols(wwin->client_win, &wwin->protocols); - if (wwin->protocols.DELETE_WINDOW) { - wwin->window_flags.kill_close = 0; - } else { - wwin->window_flags.kill_close = 1; - } + + WSETUFLAG(wwin, kill_close, !wwin->protocols.DELETE_WINDOW); + if (wwin->frame) wWindowUpdateButtonImages(wwin); @@ -600,6 +614,12 @@ wClientCheckProperty(WWindow *wwin, XPropertyEvent *event) wWindowUpdateGNUstepAttr(wwin, attr); XFree(attr); + } else { +#ifdef KWM_HINTS + Bool done; + + done = wKWMCheckClientHintChange(wwin, event); +#endif /* KWM_HINTS */ } } } @@ -651,7 +671,14 @@ wClientGetNormalHints(WWindow *wwin, XWindowAttributes *wattribs, Bool geometry, wwin->normal_hints->max_width = wwin->screen_ptr->scr_width*2; wwin->normal_hints->max_height = wwin->screen_ptr->scr_height*2; } - + + /* some buggy apps set weird hints.. */ + if (wwin->normal_hints->max_width < wwin->normal_hints->min_width) + wwin->normal_hints->max_width = wwin->normal_hints->min_width; + + if (wwin->normal_hints->max_height < wwin->normal_hints->min_height) + wwin->normal_hints->max_height = wwin->normal_hints->min_height; + if (!(wwin->normal_hints->flags & PResizeInc)) { wwin->normal_hints->width_inc = 1; wwin->normal_hints->height_inc = 1; @@ -715,7 +742,8 @@ GetColormapWindows(WWindow *wwin) wwin->cmap_window_no = 0; if (XGetWMColormapWindows(dpy, wwin->client_win, &(wwin->cmap_windows), - &(wwin->cmap_window_no))!=Success) { + &(wwin->cmap_window_no))!=Success + || !wwin->cmap_windows) { wwin->cmap_window_no = 0; wwin->cmap_windows = NULL; } diff --git a/src/config.h b/src/config.h index abff05b2..6923b506 100644 --- a/src/config.h +++ b/src/config.h @@ -66,7 +66,13 @@ #define PACKAGE "WindowMaker" /* package version */ -#define VERSION "0.20.3" +#define VERSION "0.50.0" + +/* define if you want GNOME stuff support */ +/* #undef GNOME_STUFF */ + +/* define if you want KDE hint support */ +/* #undef KWM_HINTS */ /* Define if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 @@ -98,6 +104,9 @@ /* Define if you have the <limits.h> header file. */ #define HAVE_LIMITS_H 1 +/* Define if you have the <poll.h> header file. */ +/* #undef HAVE_POLL_H */ + /* Define if you have the <sys/ioctl.h> header file. */ #define HAVE_SYS_IOCTL_H 1 diff --git a/src/config.h.in b/src/config.h.in index 337c6a18..c42094cf 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -67,6 +67,12 @@ /* package version */ #undef VERSION +/* define if you want GNOME stuff support */ +#undef GNOME_STUFF + +/* define if you want KDE hint support */ +#undef KWM_HINTS + /* Define if you have the gethostname function. */ #undef HAVE_GETHOSTNAME @@ -97,6 +103,9 @@ /* Define if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H +/* Define if you have the <poll.h> header file. */ +#undef HAVE_POLL_H + /* Define if you have the <sys/ioctl.h> header file. */ #undef HAVE_SYS_IOCTL_H diff --git a/src/defaults.c b/src/defaults.c index b9e7c8b4..e678ff60 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -31,6 +31,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <limits.h> +#include <signal.h> #ifndef PATH_MAX #define PATH_MAX DEFAULT_PATH_MAX @@ -117,6 +118,7 @@ static int getPathList(); static int getEnum(); static int getTexture(); static int getWSBackground(); +static int getWSSpecificBackground(); static int getFont(); static int getColor(); static int getKeybind(); @@ -136,12 +138,15 @@ static int setWinTitleFont(); static int setMenuTitleFont(); static int setMenuTextFont(); static int setIconTitleFont(); +static int setIconTitleColor(); +static int setIconTitleBack(); static int setDisplayFont(); static int setWTitleColor(); static int setFTitleBack(); static int setPTitleBack(); static int setUTitleBack(); static int setWorkspaceBack(); +static int setWorkspaceSpecificBack(); static int setMenuTitleColor(); static int setMenuTextColor(); static int setMenuDisabledColor(); @@ -156,6 +161,8 @@ static int setIconPosition(); static int setClipTitleFont(); static int setClipTitleColor(); +static int updateUsableArea(); + /* @@ -393,13 +400,13 @@ WDefaultEntry optionList[] = { &wPreferences.auto_arrange_icons, getBool, NULL }, {"NoWindowOverDock", "NO", NULL, - &wPreferences.no_window_over_dock, getBool, NULL + &wPreferences.no_window_over_dock, getBool, updateUsableArea }, {"NoWindowOverIcons", "NO", NULL, - &wPreferences.no_window_over_icons, getBool, NULL + &wPreferences.no_window_over_icons, getBool, updateUsableArea }, {"WindowPlaceOrigin", "(0, 0)", NULL, - &wPreferences.window_place_origin, getCoord, NULL + &wPreferences.window_place_origin, getCoord, NULL }, {"ResizeDisplay", "corner", seGeomDisplays, &wPreferences.size_display, getEnum, NULL @@ -426,6 +433,12 @@ WDefaultEntry optionList[] = { {"WidgetColor", "(solid, gray)", NULL, NULL, getTexture, setWidgetColor, }, + {"WorkspaceSpecificBack","()", NULL, + NULL, getWSSpecificBackground, setWorkspaceSpecificBack + }, + /* WorkspaceBack must come after WorkspaceSpecificBack or + * WorkspaceBack wont know WorkspaceSpecificBack was also + * specified and 2 copies of wmsetbg will be launched */ {"WorkspaceBack", "(solid, black)", NULL, NULL, getWSBackground,setWorkspaceBack }, @@ -498,14 +511,22 @@ WDefaultEntry optionList[] = { {"MenuTextBack", "(solid, gray)", NULL, NULL, getTexture, setMenuTextBack }, + {"IconTitleColor", "white", NULL, + NULL, getColor, setIconTitleColor + }, + {"IconTitleBack", "black", NULL, + NULL, getColor, setIconTitleBack + }, /* keybindings */ +#ifndef LITE {"RootMenuKey", "None", (void*)WKBD_ROOTMENU, NULL, getKeybind, setKeyGrab }, {"WindowListKey", "None", (void*)WKBD_WINDOWLIST, NULL, getKeybind, setKeyGrab }, +#endif /* LITE */ {"WindowMenuKey", "None", (void*)WKBD_WINDOWMENU, NULL, getKeybind, setKeyGrab }, @@ -524,6 +545,9 @@ WDefaultEntry optionList[] = { {"HideKey", "None", (void*)WKBD_HIDE, NULL, getKeybind, setKeyGrab }, + {"MoveResizeKey", "None", (void*)WKBD_MOVERESIZE, + NULL, getKeybind, setKeyGrab + }, {"CloseKey", "None", (void*)WKBD_CLOSE, NULL, getKeybind, setKeyGrab }, @@ -608,6 +632,27 @@ WDefaultEntry optionList[] = { {"WindowShortcut4Key","None", (void*)WKBD_WINDOW4, NULL, getKeybind, setKeyGrab }, +#ifdef EXTEND_WINDOWSHORTCUT + {"WindowShortcut5Key","None", (void*)WKBD_WINDOW5, + NULL, getKeybind, setKeyGrab + }, + {"WindowShortcut6Key","None", (void*)WKBD_WINDOW6, + NULL, getKeybind, setKeyGrab + }, + {"WindowShortcut7Key","None", (void*)WKBD_WINDOW7, + NULL, getKeybind, setKeyGrab + }, + {"WindowShortcut8Key","None", (void*)WKBD_WINDOW8, + NULL, getKeybind, setKeyGrab + }, + {"WindowShortcut9Key","None", (void*)WKBD_WINDOW9, + NULL, getKeybind, setKeyGrab + }, + {"WindowShortcut10Key","None", (void*)WKBD_WINDOW10, + NULL, getKeybind, setKeyGrab + }, +#endif /* EXTEND_WINDOWSHORTCUT */ + #ifdef KEEP_XKB_LOCK_STATUS {"ToggleKbdModeKey", "None", (void*)WKBD_TOGGLE, NULL, getKeybind, setKeyGrab @@ -914,7 +959,7 @@ wDefaultsCheckDomains(void *foo) WDWindowAttributes->timestamp = stbuf.st_mtime; } - +#ifndef LITE if (stat(WDRootMenu->path, &stbuf)>=0 && WDRootMenu->timestamp < stbuf.st_mtime) { dict = ReadProplistFromFile(WDRootMenu->path); @@ -939,6 +984,7 @@ wDefaultsCheckDomains(void *foo) } WDRootMenu->timestamp = stbuf.st_mtime; } +#endif /* !LITE */ WMAddTimerHandler(DEFAULTS_CHECK_INTERVAL, wDefaultsCheckDomains, foo); } @@ -959,16 +1005,19 @@ static void refreshMenus(WScreen *scr, int flags) { WMenu *menu; - + +#ifndef LITE menu = scr->root_menu; if (menu) wMenuRefresh(!menu->flags.brother ? menu : menu->brother, flags); - - menu = scr->workspace_menu; + + menu = scr->switch_menu; if (menu) wMenuRefresh(!menu->flags.brother ? menu : menu->brother, flags); - menu = scr->switch_menu; +#endif /* !LITE */ + + menu = scr->workspace_menu; if (menu) wMenuRefresh(!menu->flags.brother ? menu : menu->brother, flags); @@ -1122,29 +1171,6 @@ wReadDefaults(WScreen *scr, proplist_t new_dict) if (needs_refresh & REFRESH_ICON_TILE) refreshAppIcons(scr, needs_refresh); -#ifdef EXPERIMENTAL - if (needs_refresh & REFRESH_WORKSPACE_BACK) { - WWorkspaceTexture *wsback; - - /* update the background for the workspace */ - if (scr->current_workspace < scr->wspaceTextureCount - && scr->wspaceTextures[scr->current_workspace]) { - wsback = scr->wspaceTextures[scr->current_workspace]; - } else { - wsback = scr->defaultTexure; - } - if (wsback) { - if (wsback->pixmap!=None) { - XSetWindowBackgroundPixmap(dpy, scr->root_win, - wsback->pixmap); - } else { - XSetWindowBackground(dpy, scr->root_win, wsback->solid); - } - XClearWindow(dpy, scr->root_win); - XFlush(dpy); - } - } -#endif /* !EXPERIMENTAL */ wRefreshDesktop(scr); } } @@ -1453,10 +1479,11 @@ getString(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, static int getPathList(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, - void **ret) + void **ret) { - static char **data; - int i, count; + static char *data; + int i, count, len; + char *ptr; proplist_t d; int changed=0; @@ -1472,7 +1499,7 @@ again: } return False; } - + i = 0; count = PLGetNumberOfElements(value); if (count < 1) { @@ -1484,25 +1511,35 @@ again: } return False; } - - data = wmalloc(sizeof(char*)*(count+1)); + + len = 0; for (i=0; i<count; i++) { d = PLGetArrayElement(value, i); if (!d || !PLIsString(d)) { + count = i; break; } - data[i] = wstrdup(PLGetString(d)); + len += strlen(PLGetString(d))+1; } - data[i]=NULL; - - if (*(char***)addr!=NULL) { - char **tmp = *(char***)addr; - for (i=0; tmp[i]!=NULL; i++) { - free(tmp[i]); + + ptr = data = wmalloc(len+1); + + for (i=0; i<count; i++) { + d = PLGetArrayElement(value, i); + if (!d || !PLIsString(d)) { + break; } - free(tmp); + strcpy(ptr, PLGetString(d)); + ptr += strlen(PLGetString(d)); + *ptr = ':'; + ptr++; } - *(char***)addr = data; + ptr--; *(ptr--) = 0; + + if (*(char**)addr!=NULL) { + free(*(char**)addr); + } + *(char**)addr = data; return True; } @@ -1540,6 +1577,9 @@ getEnum(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, * (tpixmap <file> <color>) * (spixmap <file> <color>) * (cpixmap <file> <color>) + * (thgradient <file> <opaqueness> <color> <color>) + * (tvgradient <file> <opaqueness> <color> <color>) + * (tdgradient <file> <opaqueness> <color> <color>) */ static WTexture* @@ -1583,7 +1623,8 @@ parse_texture(WScreen *scr, proplist_t pl) } else if (strcasecmp(val, "dgradient")==0 || strcasecmp(val, "vgradient")==0 || strcasecmp(val, "hgradient")==0) { - XColor color1, color2; + RColor color1, color2; + XColor xcolor; int type; if (nelem != 3) { @@ -1605,10 +1646,14 @@ parse_texture(WScreen *scr, proplist_t pl) return NULL; val = PLGetString(elem); - if (!XParseColor(dpy, scr->colormap, val, &color1)) { + if (!XParseColor(dpy, scr->colormap, val, &xcolor)) { wwarning(_("\"%s\" is not a valid color name"), val); return NULL; } + color1.alpha = 255; + color1.red = xcolor.red >> 8; + color1.green = xcolor.green >> 8; + color1.blue = xcolor.blue >> 8; /* get to color */ elem = PLGetArrayElement(pl, 2); @@ -1617,11 +1662,15 @@ parse_texture(WScreen *scr, proplist_t pl) } val = PLGetString(elem); - if (!XParseColor(dpy, scr->colormap, val, &color2)) { + if (!XParseColor(dpy, scr->colormap, val, &xcolor)) { wwarning(_("\"%s\" is not a valid color name"), val); return NULL; } - + color2.alpha = 255; + color2.red = xcolor.red >> 8; + color2.green = xcolor.green >> 8; + color2.blue = xcolor.blue >> 8; + texture = (WTexture*)wTextureMakeGradient(scr, type, &color1, &color2); } else if (strcasecmp(val, "mhgradient")==0 @@ -1711,8 +1760,79 @@ parse_texture(WScreen *scr, proplist_t pl) val = PLGetString(elem); texture = (WTexture*)wTextureMakePixmap(scr, type, val, &color); + } else if (strcasecmp(val, "thgradient")==0 + || strcasecmp(val, "tvgradient")==0 + || strcasecmp(val, "tdgradient")==0) { + RColor color1, color2; + XColor xcolor; + int opacity; + int style; + if (val[1]=='h' || val[1]=='H') + style = WTEX_THGRADIENT; + else if (val[1]=='v' || val[1]=='V') + style = WTEX_TVGRADIENT; + else + style = WTEX_TDGRADIENT; + + if (nelem != 5) { + wwarning(_("bad number of arguments in textured gradient specification")); + return NULL; + } + + /* get from color */ + elem = PLGetArrayElement(pl, 3); + if (!elem || !PLIsString(elem)) + return NULL; + val = PLGetString(elem); + + if (!XParseColor(dpy, scr->colormap, val, &xcolor)) { + wwarning(_("\"%s\" is not a valid color name"), val); + return NULL; + } + color1.alpha = 255; + color1.red = xcolor.red >> 8; + color1.green = xcolor.green >> 8; + color1.blue = xcolor.blue >> 8; + + /* get to color */ + elem = PLGetArrayElement(pl, 4); + if (!elem || !PLIsString(elem)) { + return NULL; + } + val = PLGetString(elem); + + if (!XParseColor(dpy, scr->colormap, val, &xcolor)) { + wwarning(_("\"%s\" is not a valid color name"), val); + return NULL; + } + color2.alpha = 255; + color2.red = xcolor.red >> 8; + color2.green = xcolor.green >> 8; + color2.blue = xcolor.blue >> 8; + + /* get opacity */ + elem = PLGetArrayElement(pl, 2); + if (!elem || !PLIsString(elem)) + opacity = 128; + else + val = PLGetString(elem); + + if (!val || (opacity = atoi(val)) < 0 || opacity > 255) { + wwarning(_("bad opacity value for tgradient texture \"%s\". Should be [0..255]"), val); + opacity = 128; + } + + /* get file name */ + elem = PLGetArrayElement(pl, 1); + if (!elem || !PLIsString(elem)) + return NULL; + val = PLGetString(elem); + + texture = (WTexture*)wTextureMakeTGradient(scr, style, &color1, &color2, + val, opacity); } else { + wwarning(_("invalid texture type %s"), val); return NULL; } return texture; @@ -1781,24 +1901,19 @@ again: -#ifdef EXPERIMENTAL -static int +static int getWSBackground(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, void **ret) { proplist_t elem; + int changed = 0; char *val; int nelem; - static WTexture *texture=NULL; - int changed=0; - char *file = NULL; again: - entry->extra_data = NULL; - if (!PLIsArray(value)) { wwarning(_("Wrong option format for key \"%s\". Should be %s."), - "WorkspaceBack", "Texture"); + "WorkspaceBack", "Texture or None"); if (changed==0) { value = entry->plvalue; changed = 1; @@ -1808,6 +1923,8 @@ again: return False; } + /* only do basic error checking and verify for None texture */ + nelem = PLGetNumberOfElements(value); if (nelem < 1) { wwarning(_("Too few elements in array for key \"WorkspaceBack\".")); @@ -1822,7 +1939,7 @@ again: elem = PLGetArrayElement(value, 0); if (!elem || !PLIsString(elem)) { - wwarning(_("Wrong type for workspace background. Should be Texture.")); + wwarning(_("Wrong type for workspace background. Should be a texture type.")); if (changed==0) { value = entry->plvalue; changed = 1; @@ -1834,142 +1951,26 @@ again: val = PLGetString(elem); if (strcasecmp(val, "None")==0) - return False; - - if (strcasecmp(val, "spixmap")!=0 && strcasecmp(val, "tpixmap")!=0 - && strcasecmp(val, "cpixmap")!=0) { - texture = parse_texture(scr, value); - } else { - /* spixmap || tpixmap || cpixmap */ - XColor color; - int style; - - if (nelem != 3) { - wwarning(_("Too few elements in array for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - switch (val[0]) { - case 's': - case 'S': - style = WTP_SCALE; - break; - case 'C': - case 'c': - style = WTP_CENTER; - break; - default: - style = WTP_TILE; - break; - } - - /* get color */ - elem = PLGetArrayElement(value, 2); - if (!elem || !PLIsString(elem)) { - wwarning(_("Cannot get color entry for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - val = PLGetString(elem); - - if (!XParseColor(dpy, scr->colormap, val, &color)) { - wwarning(_("key \"WorkspaceBack\" has invalid color \"%s\""), - val); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - /* file name */ - elem = PLGetArrayElement(value, 1); - if (!elem || !PLIsString(elem)) { - wwarning(_("Cannot get file entry for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - val = PLGetString(elem); - file = FindImage(wPreferences.pixmap_path, val); - if (!file) { - wwarning(_("could not find background image \"%s\""), val); - /*return False;*/ - } - - /* create a dummy texture. - * use free() to free this texture. - */ - texture = wmalloc(sizeof(WTexture)); - memset(texture, 0, sizeof(WTexture)); - texture->type = WTEX_PIXMAP; - texture->subtype = style; - texture->normal = color; - } + return True; - if (!texture) { - if (file) - free(file); - wwarning(_("Error in texture specification for key \"WorkspaceBack\"")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - if (ret) - *ret = &texture; + *ret = PLRetain(value); - if (addr) - *(WTexture**)addr = texture; - - /* we use the extra_data field to pass the filename string - * to the background setting function. We can't pass it with - * WTexture because it holds a RImage, not a file name. - * It also would be dirtier to cast the RImage to char* to make it - * hold the file name. The extra_data must be freed by the - * setting function. - */ - entry->extra_data = file; - return True; } -#else /* !EXPERIMENTAL */ -static int -getWSBackground(WScreen *scr, WDefaultEntry *entry, proplist_t value, - void *addr, void **ret) + + +static int +getWSSpecificBackground(WScreen *scr, WDefaultEntry *entry, proplist_t value, + void *addr, void **ret) { proplist_t elem; - char *val; int nelem; - static WTexture *texture=NULL; - int changed=0; + int changed = 0; again: if (!PLIsArray(value)) { wwarning(_("Wrong option format for key \"%s\". Should be %s."), - "WorkspaceBack", "Texture"); + "WorkspaceSpecificBack", "an array of textures"); if (changed==0) { value = entry->plvalue; changed = 1; @@ -1979,152 +1980,27 @@ again: return False; } + /* only do basic error checking and verify for None texture */ + nelem = PLGetNumberOfElements(value); - if (nelem < 1) { - wwarning(_("Too few elements in array for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } + if (nelem < 0) { + *ret = PLRetain(value); - elem = PLGetArrayElement(value, 0); - if (!elem || !PLIsString(elem)) { - wwarning(_("Wrong type for workspace background. Should be Texture.")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; + return True; } - val = PLGetString(elem); - - if (strcasecmp(val, "None")==0) - return False; - - if (strcasecmp(val, "spixmap")!=0 && strcasecmp(val, "tpixmap")!=0 - && strcasecmp(val, "cpixmap")!=0) { - texture = parse_texture(scr, value); - } - else { - /* spixmap || tpixmap || cpixmap */ - XColor color; - char *file, cpc[30], *style = "-s"; - char *program = "wmsetbg"; - char *back; - - if (nelem != 3) { - wwarning(_("Too few elements in array for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - if (val[0] == 't' || val[0] == 'T') - style = "-t"; - else if (val[0] == 'c' || val[0] == 'C') - style = "-e"; - - sprintf(cpc, "%i", wPreferences.cmap_size); - - /* get color */ - elem = PLGetArrayElement(value, 2); - if (!elem || !PLIsString(elem)) { - wwarning(_("Cannot get color entry for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; + while (nelem--) { + elem = PLGetArrayElement(value, nelem); + if (!elem || !PLIsArray(elem)) { + wwarning(_("Wrong type for background of workspace %i. Should be a texture."), + nelem); } - val = PLGetString(elem); - - if (!XParseColor(dpy, scr->colormap, val, &color)) { - wwarning(_("key \"WorkspaceBack\" has invalid color \"%s\""), - val); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - back = wstrdup(val); - - /* file name */ - elem = PLGetArrayElement(value, 1); - if (!elem || !PLIsString(elem)) { - wwarning(_("Cannot get file entry for key \"WorkspaceBack\".")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; - } - - val = PLGetString(elem); - - file = FindImage(wPreferences.pixmap_path, val); - if (file) { - if (fork()==0) { - SetupEnvironment(scr); - - CloseDescriptors(); - - execlp(program, program, style, "-c", cpc, "-b", back, file, NULL); - wwarning(_("could not run \"%s\""), program); - exit(-1); - } - free(file); - } else { - wwarning(_("could not find background image \"%s\""), val); - } - - free(back); - - /* This is to let WindowMaker put a color in the background - * until the pixmap is loaded, if the image is big and loads slow. - * It assumes that the color will be set before the image is set - * by the child. Is this true for very small images? - */ - texture = (WTexture*)wTextureMakeSolid(scr, &color); - } - - if (!texture) { - wwarning(_("Error in texture specification for key \"WorkspaceBack\"")); - if (changed==0) { - value = entry->plvalue; - changed = 1; - wwarning(_("using default \"%s\" instead"), entry->default_value); - goto again; - } - return False; } - if (ret) - *ret = &texture; - - if (addr) - *(WTexture**)addr = texture; + *ret = PLRetain(value); return True; } -#endif /* !EXPERIMENTAL */ static int @@ -2140,8 +2016,8 @@ getFont(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, font = wLoadFont(val); if (!font) { - wwarning(_("could not load any usable font")); - return False; + wfatal(_("could not load any usable font!!!")); + exit(1); } if (ret) @@ -2229,7 +2105,7 @@ getKeybind(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr, *k = 0; mod = wXModifierFromKey(b); if (mod<0) { - wwarning(_("%s:invalid key modifier \"%s\""), entry->key, val); + wwarning(_("%s:invalid key modifier \"%s\""), entry->key, b); return False; } shortcut.modifier |= mod; @@ -2362,7 +2238,7 @@ setIconTile(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) RDestroyImage(scr->icon_tile); XFreePixmap(dpy, scr->icon_tile_pixmap); } - + scr->icon_tile = img; if (!wPreferences.flags.noclip) { @@ -2371,9 +2247,9 @@ setIconTile(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) } scr->clip_tile = wClipMakeTile(scr, img); } - + scr->icon_tile_pixmap = pixmap; - + if (scr->def_icon_pixmap) { XFreePixmap(dpy, scr->def_icon_pixmap); scr->def_icon_pixmap = None; @@ -2382,7 +2258,7 @@ setIconTile(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) XFreePixmap(dpy, scr->def_ticon_pixmap); scr->def_ticon_pixmap = None; } - + if (scr->icon_back_texture) { wTextureDestroy(scr, (WTexture*)scr->icon_back_texture); } @@ -2396,7 +2272,7 @@ setIconTile(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) * Free the texture as nobody else will use it, nor refer to it. */ if (!entry->addr) - wTextureDestroy(scr, *texture); + wTextureDestroy(scr, *texture); return (reset ? REFRESH_ICON_TILE : 0); } @@ -2570,9 +2446,7 @@ setWTitleColor(WScreen *scr, WDefaultEntry *entry, XColor *color, long index) scr->window_title_pixel[index] = color->pixel; - if (index == WS_FOCUSED) - XSetForeground(dpy, scr->icon_title_gc, color->pixel); - else if (index == WS_UNFOCUSED) + if (index == WS_UNFOCUSED) XSetForeground(dpy, scr->info_text_gc, color->pixel); return REFRESH_FORE_COLOR; @@ -2653,264 +2527,141 @@ setMenuDisabledColor(WScreen *scr, WDefaultEntry *entry, XColor *color, void *fo #undef gcm } +static int +setIconTitleColor(WScreen *scr, WDefaultEntry *entry, XColor *color, void *foo) +{ + XSetForeground(dpy, scr->icon_title_gc, color->pixel); + + return REFRESH_FORE_COLOR; +} + +static int +setIconTitleBack(WScreen *scr, WDefaultEntry *entry, XColor *color, void *foo) +{ + if (scr->icon_title_texture) { + wTextureDestroy(scr, (WTexture*)scr->icon_title_texture); + } + XQueryColor (dpy, scr->colormap, color); + scr->icon_title_texture = wTextureMakeSolid(scr, color); + + return REFRESH_WINDOW_TEXTURES; +} -/* - * Implementation of workspace specific backgrounds. - * - * WorkspaceBack is used as the default background. - * WorkspaceSpecificBack supplies an array with the textures for - * other workspaces. - * WorkspaceSpecificBack = (ws1texture, ws2texture, "", ws4texture); - * "" means that workspace3 should use the default texture. - * - * struct WWorkspaceTexture { - * Pixmap pixmap; // the pixmap for non-solid textures. - * //None means the texture is solid - * WPixel color; // color for solid texture - * proplist_t texture; // for checking updates - * }; - * - * - * All textures are rendered by wmsetbg. When it exits with status 0 - * it outputs the pixmap ID. - * wmaker will monitor the fd and when it becomes available it reads the - * pixmap ID and uses it in the texture. The data read from the fd - * is the pixmap ID and the pid of the wmsetbg process, separated by - * a space (the pid is to allow paralel wmsetbg processes). - * - * The workspace background cant be set if the pid field of the - * texture is 0. Otherwise, the texture is still being rendered - * and cant be set. - * - * If the workspace background is changed before wmsetbg finishes - * the rendering, wmsetbg must be killed. - * - * Optimizations: - * Workspace specific textures are generated only when switching to - * that workspace, unless #define SLOW_CONFIGURATION_UPDATE. - * - * -readme - */ -#ifdef EXPERIMENTAL static void trackDeadProcess(pid_t pid, unsigned char status, WScreen *scr) { - WWorkspaceTexture *wsback; - int setBackground = 0; - - /* find out to which wsback, this process belongs to */ - - wsback->pid = 0; - if (status != 123) { - /* something went wrong during rendering */ - XFreePixmap(dpy, wsback->pixmap); - wsback->pixmap = None; - wwarning(_("background texture rendering was unsuccessfull")); - } + close(scr->helper_fd); + scr->helper_fd = 0; + scr->helper_pid = 0; + scr->flags.backimage_helper_launched = 0; +} - if (setBackground) { - } -} -WWorkspaceTexture* -makeWorkspaceTexture(WScreen *scr, WTexture *texture, char *file, char *option) +static int +setWorkspaceSpecificBack(WScreen *scr, WDefaultEntry *entry, proplist_t value, + void *bar) { - WWorkspaceTexture *wsback; - - wsback = wmalloc(sizeof(WWorkspaceTexture)); - wsback->pid = 0; - - wsback->solid = (*texture)->any.color.pixel; - - if (texture->any.type==WTEX_SOLID) { - wsback->pixmap = None; - } else if (texture->any.type == WTEX_PIXMAP) { - Pixmap pixmap; - if (texture->pixmap.subtype == WTP_TILE) { - RImage *image; - - /* render ourseves */ - image = RLoadImage(scr->rcontext, file, 0); - if (!image) { - wwarning(_("could not load image %s for option %s:%s\n"), - file, option, RErrorString); - wsback->pixmap = None; - } else { - } - } else { - /* create a empty pixmap... */ - pid_t pid; - int style = texture->pixmap.subtype; + int i; + proplist_t val; + char *str; - pixmap = XCreatePixmap(dpy, scr->root_win, scr->scr_width, - scr->scr_height, scr->depth); + if (scr->flags.backimage_helper_launched) { + if (PLGetNumberOfElements(value)==0) { + kill(scr->helper_pid, SIGTERM); + close(scr->helper_fd); + scr->helper_fd = 0; + scr->flags.backimage_helper_launched = 0; - /* ...and let wmsetbg render it */ - pid = fork(); - if (pid < 0) { - wsyserror(_("could not spawn texture rendering subprocess for option")); - } else if (pid == 0) { - char *colorn, *pix; - - SetupEnvironment(scr); - - CloseDescriptors(); - - colorn = wmalloc(32); - sprintf(colorn, "\"#%2x%2x%2x\"", - texture->any.color.red, - texture->any.color.green, - texture->any.color.blue); - pix = wmalloc(32); - sprintf(pix, "%x", pixmap); - execlp("wmsetbg", "wmsetbg", (style==WTP_SCALE ? "-s":"-e"), - "-b", colorn, "-x", pix, file); - exit(1); - } - wsback->pixmap = pixmap; - /* must add a death handler to detect when wmsetbg has - * exited (with exit status 123) and refresh the background. - */ - wsback->pid = pid; + PLRelease(value); + return 0; } } else { - int w, h; - Pixmap pixmap; - - switch (texture->any.type) { - case WTEX_HGRADIENT: - case WTEX_MHGRADIENT: - w = scr->scr_width; - h = 8; - break; - - case WTEX_VGRADIENT: - case WTEX_MVGRADIENT: - w = 8; - h = scr->scr_height; - break; - - case WTEX_DGRADIENT: - case WTEX_MDGRADIENT: - w = scr->scr_width; - h = scr->scr_height; - break; - - default: - return NULL; - } + pid_t pid; + int filedes[2]; + + if (PLGetNumberOfElements(value) == 0) + return 0; - img = wTextureRenderImage(texture, w, h, WREL_FLAT); - if (!img) { - wwarning(_("could not render texture for workspace background")); - free(wsback); - return NULL; + if (pipe(filedes) < 0) { + wsyserror("pipe() failed:can't set workspace specific background image"); + + PLRelease(value); + return 0; } - RConvertImage(scr->rcontext, img, &pixmap); - RDestroyImage(img); - wsback->pixmap = pixmap; - } - return wsback; -} + pid = fork(); + if (pid < 0) { + wsyserror("fork() failed:can't set workspace specific background image"); + } else if (pid == 0) { + SetupEnvironment(scr); + close(0); + if (dup(filedes[0]) < 0) { + wsyserror("dup() failed:can't set workspace specific background image"); + } + execlp("wmsetbg", "wmsetbg", "-helper", "-d", NULL); + wsyserror("could not execute wmsetbg"); + exit(1); + } else { + scr->helper_fd = filedes[1]; + scr->helper_pid = pid; + scr->flags.backimage_helper_launched = 1; -static int -setWorkspaceBack(WScreen *scr, WDefaultEntry *entry, WTexture **texture, - char *file) -{ - Pixmap pixmap; - RImage *img; - - if (scr->defaultTexture) { - if (scr->defaultTexture->pixmap) - XFreePixmap(dpy, scr->defaultTexture->pixmap); - free(scr->defaultTexture); - } - - if (!*texture) { - scr->defaultTexture = NULL; - if (file) - free(file); - return 0; + wAddDeathHandler(pid, (WDeathHandler*)trackDeadProcess, scr); + + SendHelperMessage(scr, 'P', -1, wPreferences.pixmap_path); + } } - scr->defaultTexture = makeWorkspaceTexture(scr, *texture, file); + for (i = 0; i < PLGetNumberOfElements(value); i++) { + val = PLGetArrayElement(value, i); + if (val && PLIsArray(val) && PLGetNumberOfElements(val)>0) { + str = PLGetDescription(val); - if (!entry->addr) - wTextureDestroy(scr, *texture); + SendHelperMessage(scr, 'S', i+1, str); - /* free the file name that was passed from the getWSBackground() - * function and placed in entry->extra_data */ - if (file) - free(file); - entry->extra_data = NULL; + free(str); + } else { + SendHelperMessage(scr, 'U', i+1, NULL); + } + } + sleep(1); - return REFRESH_WORKSPACE_BACK; + PLRelease(value); + return 0; } -#else /* !EXPERIMENTAL */ + + static int -setWorkspaceBack(WScreen *scr, WDefaultEntry *entry, WTexture **texture, - void *foo) +setWorkspaceBack(WScreen *scr, WDefaultEntry *entry, proplist_t value, + void *bar) { - Pixmap pixmap; - RImage *img; - - - if ((*texture)->any.type==WTEX_SOLID) { - XSetWindowBackground(dpy, scr->root_win, (*texture)->solid.normal.pixel); - XClearWindow(dpy, scr->root_win); - } else { - int w, h; - - switch ((*texture)->any.type) { - case WTEX_HGRADIENT: - case WTEX_MHGRADIENT: - w = scr->scr_width; - h = 8; - break; - - case WTEX_VGRADIENT: - case WTEX_MVGRADIENT: - w = 8; - h = scr->scr_height; - break; - - case WTEX_DGRADIENT: - case WTEX_MDGRADIENT: - w = scr->scr_width; - h = scr->scr_height; - break; - - default: - if (!entry->addr) - wTextureDestroy(scr, *texture); - return 0; + if (scr->flags.backimage_helper_launched) { + char *str; + + /* set the default workspace background to this one */ + str = PLGetDescription(value); + if (str) { + SendHelperMessage(scr, 'S', 0, str); + free(str); } - - img = wTextureRenderImage(*texture, w, h, WREL_FLAT); - if (!img) { - wwarning(_("could not render texture for workspace background")); - if (!entry->addr) - wTextureDestroy(scr, *texture); - return 0; - } - RConvertImage(scr->rcontext, img, &pixmap); - RDestroyImage(img); - XSetWindowBackgroundPixmap(dpy, scr->root_win, pixmap); - XClearWindow(dpy, scr->root_win); - } + } else { + char *command; + char *text; - /* - * Free the texture as nobody else will use it, nor refer to it. - */ - if (!entry->addr) - wTextureDestroy(scr, *texture); + text = PLGetDescription(value); + command = wmalloc(strlen(text)+40); + sprintf(command, "wmsetbg -d -p '%s' &", text); + free(text); + system(command); + free(command); + } + PLRelease(value); return 0; } -#endif /* !EXPERIMENTAL */ + static int setWidgetColor(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) @@ -2932,12 +2683,6 @@ setFTitleBack(WScreen *scr, WDefaultEntry *entry, WTexture **texture, void *foo) } scr->window_title_texture[WS_FOCUSED] = *texture; - if (scr->icon_title_texture) { - wTextureDestroy(scr, (WTexture*)scr->icon_title_texture); - } - scr->icon_title_texture - = wTextureMakeSolid(scr, &scr->window_title_texture[WS_FOCUSED]->any.color); - return REFRESH_WINDOW_TEXTURES; } @@ -3015,7 +2760,7 @@ setKeyGrab(WScreen *scr, WDefaultEntry *entry, WShortKey *shortcut, long index) while (wwin!=NULL) { XUngrabKey(dpy, AnyKey, AnyModifier, wwin->frame->core->window); - if (!wwin->window_flags.no_bind_keys) { + if (!WFLAGP(wwin, no_bind_keys)) { wWindowSetKeyGrabs(wwin); } wwin = wwin->prev; @@ -3034,6 +2779,15 @@ setIconPosition(WScreen *scr, WDefaultEntry *entry, void *bar, void *foo) } +static int +updateUsableArea(WScreen *scr, WDefaultEntry *entry, void *bar, void *foo) +{ + wScreenUpdateUsableArea(scr); + + return 0; +} + + /* * Very ugly kluge. diff --git a/src/defaults.h b/src/defaults.h index 46d9dfe1..21401902 100644 --- a/src/defaults.h +++ b/src/defaults.h @@ -51,13 +51,15 @@ void wSaveDefaults(WScreen *scr); char *wDefaultGetIconFile(WScreen *scr, char *instance, char *class, Bool noDefault); -RImage*wDefaultGetImage(WScreen *scr, char *winstance, char *wclass); +RImage *wDefaultGetImage(WScreen *scr, char *winstance, char *wclass); -void wDefaultFillAttributes(WScreen *scr, char *instance, char *class, - WWindowAttributes *attr, Bool useGlobalDefault); +void wDefaultFillAttributes(WScreen *scr, char *instance, char *class, + WWindowAttributes *attr, WWindowAttributes *mask, + Bool useGlobalDefault); int wDefaultGetStartWorkspace(WScreen *scr, char *instance, char *class); void wDefaultChangeIcon(WScreen *scr, char *instance, char* class, char *file); #endif /* WMDEFAULTS_H_ */ + diff --git a/src/dialog.c b/src/dialog.c index c4271181..37d08eb0 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -48,6 +48,7 @@ #include "framewin.h" #include "window.h" #include "actions.h" +#include "defaults.h" extern WPreferences wPreferences; @@ -322,17 +323,25 @@ listCallback(void *self, void *data) static void listIconPaths(WMList *lPtr) { - int i; - - for (i=0; wPreferences.icon_path[i]!=NULL; i++) { + char *paths; + char *path; + + paths = wstrdup(wPreferences.icon_path); + + path = strtok(paths, ":"); + + do { char *tmp; - tmp = wexpandpath(wPreferences.icon_path[i]); + + tmp = wexpandpath(path); /* do not sort, because the order implies the order of * directories searched */ if (access(tmp, X_OK)==0) - WMAddListItem(lPtr, wPreferences.icon_path[i]); + WMAddListItem(lPtr, tmp); free(tmp); - } + } while ((path=strtok(NULL, ":"))!=NULL); + + free(paths); } @@ -552,6 +561,14 @@ typedef struct { WMLabel *infoL; WMLabel *copyrL; + +#ifdef SILLYNESS + WMHandlerID timer; + int cycle; + RImage *icon; + RImage *pic; + WMPixmap *oldPix; +#endif } InfoPanel; @@ -567,6 +584,20 @@ static InfoPanel *thePanel = NULL; static void destroyInfoPanel(WCoreWindow *foo, void *data, XEvent *event) { +#ifdef SILLYNESS + if (thePanel->timer) { + WMDeleteTimerHandler(thePanel->timer); + } + if (thePanel->oldPix) { + WMReleasePixmap(thePanel->oldPix); + } + if (thePanel->icon) { + RDestroyImage(thePanel->icon); + } + if (thePanel->pic) { + RDestroyImage(thePanel->pic); + } +#endif /* SILLYNESS */ WMUnmapWidget(thePanel); WMDestroyWidget(thePanel->win); @@ -574,7 +605,7 @@ destroyInfoPanel(WCoreWindow *foo, void *data, XEvent *event) wUnmanageWindow(thePanel->wwin, False); free(thePanel); - + thePanel = NULL; } @@ -583,7 +614,6 @@ WMPixmap* renderText(WMScreen *scr, char *text, char *font, RColor *from, RColor *to) { WMPixmap *wpix = NULL; - RImage *gradient = NULL; Pixmap grad = None; Pixmap mask = None; RContext *rc = WMScreenRContext(scr); @@ -598,43 +628,254 @@ renderText(WMScreen *scr, char *text, char *font, RColor *from, RColor *to) w = XTextWidth(f, text, strlen(text)); h = f->ascent+f->descent; - gradient = RRenderGradient(w, h, from, to, RVerticalGradient); - if (!gradient) { - wwarning("error doing image processing:%s", - RMessageForError(RErrorCode)); - goto bye; - } - if (!RConvertImage(rc, gradient, &grad)) { - wwarning("error doing image processing:%s", - RMessageForError(RErrorCode)); - goto bye; - } - mask = XCreatePixmap(dpy, rc->drawable, w, h, 1); gc = XCreateGC(dpy, mask, 0, NULL); - XSetForeground(dpy, gc, rc->black); + XSetForeground(dpy, gc, 0); XSetFont(dpy, gc, f->fid); XFillRectangle(dpy, mask, gc, 0, 0, w, h); - XSetForeground(dpy, gc, rc->white); + XSetForeground(dpy, gc, 1); XDrawString(dpy, mask, gc, 0, f->ascent, text, strlen(text)); - XSetLineAttributes(dpy, gc, 3, LineSolid, CapRound, JoinMiter); - XDrawLine(dpy, mask, gc, 0, h-2, w, h-2); - + + grad = XCreatePixmap(dpy, rc->drawable, w, h, rc->depth); + { + WMColor *color; + + color = WMBlackColor(scr); + XFillRectangle(dpy, grad, WMColorGC(color), 0, 0, w, h); + WMReleaseColor(color); + } + wpix = WMCreatePixmapFromXPixmaps(scr, grad, mask, w, h, rc->depth); - bye: if (gc) XFreeGC(dpy, gc); XFreeFont(dpy, f); - if (gradient) - RDestroyImage(gradient); return wpix; } +#ifdef SILLYNESS +static void +logoPushCallback(void *data) +{ + InfoPanel *panel = (InfoPanel*)data; + char buffer[512]; + int i; + + if (panel->cycle < 30) { + RImage *image; + WMPixmap *pix; + + image = RCloneImage(panel->icon); + RCombineImagesWithOpaqueness(image, panel->pic, panel->cycle*255/30); + pix = WMCreatePixmapFromRImage(panel->scr->wmscreen, image, 128); + RDestroyImage(image); + WMSetLabelImage(panel->logoL, pix); + WMReleasePixmap(pix); + } + + i = panel->cycle%150; + + strncpy(buffer, "Sloppy focus is a *?#@", i<22 ? i : 22); + if (i >= 22) + memset(&buffer[22], ' ', i-22); + buffer[i]=0; + WMSetLabelText(panel->versionL, buffer); + + panel->timer = WMAddTimerHandler(50, logoPushCallback, panel); + panel->cycle++; +} + + +static void +handleLogoPush(XEvent *event, void *data) +{ + InfoPanel *panel = (InfoPanel*)data; + static int broken = 0; + static int clicks = 0; + static char *pic_data[] = { +"45 45 57 1", +" c None", +". c #000000", +"X c #383C00", +"o c #515500", +"O c #616100", +"+ c #616900", +"@ c #696D00", +"# c #697100", +"$ c #495100", +"% c #202800", +"& c #969600", +"* c #CFCF00", +"= c #D7DB00", +"- c #D7D700", +"; c #C7CB00", +": c #A6AA00", +"> c #494900", +", c #8E8E00", +"< c #DFE700", +"1 c #F7FF00", +"2 c #FFFF00", +"3 c #E7EB00", +"4 c #B6B600", +"5 c #595900", +"6 c #717500", +"7 c #AEB200", +"8 c #CFD300", +"9 c #E7EF00", +"0 c #EFF300", +"q c #9EA200", +"w c #F7FB00", +"e c #F7F700", +"r c #BEBE00", +"t c #8E9200", +"y c #EFF700", +"u c #969A00", +"i c #414500", +"p c #595D00", +"a c #E7E700", +"s c #C7C700", +"d c #797D00", +"f c #BEC300", +"g c #DFE300", +"h c #868600", +"j c #EFEF00", +"k c #9E9E00", +"l c #616500", +"z c #DFDF00", +"x c #868A00", +"c c #969200", +"v c #B6BA00", +"b c #A6A600", +"n c #8E8A00", +"m c #717100", +"M c #AEAE00", +"N c #AEAA00", +"B c #868200", +" ............... ", +" ....XoO+@##+O$%.... ", +" ...%X&*========-;;:o... ", +" ...>.>,<122222222222134@... ", +" ..>5678912222222222222220q%.. ", +" ..$.&-w2222222222222222222er>.. ", +" ..O.t31222222222222222222222y4>.. ", +" ...O5u3222222222222222222222222yri... ", +" ..>p&a22222222222222222222222222wso.. ", +" ..ids91222222222222222222222222222wfi.. ", +" ..X.7w222222wgs-w2222222213=g0222222<hi.. ", +" ..Xuj2222222<@X5=222222229k@l:022222y4i.. ", +" .Xdz22222222*X%.s22222222axo%$-222222<c>.. ", +" ..o7y22222222v...r222222223hX.i82222221si.. ", +"..io*222222222&...u22222222yt..%*22222220:%. ", +"..>k02222222227...f222222222v..X=222222229t. ", +"..dz12222222220ui:y2222222223d%qw222222221g. ", +".%vw222222222221y2222222222219*y2222222222wd.", +".X;2222222222222222222222222222222222222222b.", +".i*2222222222222222222222222222222222222222v.", +".i*2222222222222222222222222222222222222222;.", +".i*22222222222222222222222222222222222222228.", +".>*2222222222222222222222222222222222222222=.", +".i*22222222222222222222222222222222222222228.", +".i*2222222222222222222222222222222222222222;.", +".X*222222222222222222222222222222we12222222r.", +".Xs12222222w3aw22222222222222222y8s0222222wk.", +".Xq02222222a,na22222222222222222zm6zwy2222gi.", +"..>*22222y<:Xcj22222222222222222-o$k;;02228..", +"..i7y2220rhX.:y22222222222222222jtiXd,a220,..", +" .X@z222a,do%kj2222222222222222wMX5q;gw228%..", +" ..58222wagsh6ry222222222222221;>Of0w222y:...", +" ...:e2222218mdz22222222222222a&$vw222220@...", +" ...O-122222y:.u02222222222229q$uj222221r... ", +" ..%&a1222223&573w2222222219NOxz122221z>... ", +" ...t3222221-l$nr8ay1222yzbo,=12222w-5... ", +" ..X:022222w-k+>o,7s**s7xOn=12221<f5... ", +" ..o:9222221j8:&Bl>>>>ihv<12221=dX... ", +" ..Xb9122222109g-****;<y22221zn%... ", +" ..X&801222222222222222222w-h.... ", +" ...o:=022222222222222221=lX... ", +" ..X@:;3w2222222222210fO... ", +" ...XX&v8<30000003-N@... ", +" .....XmnbN:q&Bo.... ", +" ............ "}; + + clicks++; + if (!panel->timer && !broken && clicks > 2) { + char *file; + char *path; + + clicks = 0; + if (!panel->icon) { + file = wDefaultGetIconFile(panel->scr, "Logo", "WMPanel", False); + if (!file) { + broken = 1; + return; + } + + path = FindImage(wPreferences.icon_path, file); + if (!path) { + broken = 1; + return; + } + + panel->icon = RLoadImage(panel->scr->rcontext, path, 0); + free(path); + if (!panel->icon) { + broken = 1; + return; + } + } + if (!panel->pic) { + panel->pic = RGetImageFromXPMData(panel->scr->rcontext, pic_data); + if (!panel->pic || panel->icon->width!=panel->pic->width + || panel->icon->height!=panel->pic->height) { + broken = 1; + RDestroyImage(panel->icon); + panel->icon = NULL; + if (panel->pic) { + RDestroyImage(panel->pic); + panel->pic = NULL; + } + return; + } + + { + RColor color; + color.red = 0xae; + color.green = 0xaa; + color.blue = 0xae; + color.alpha = 255; + RCombineImageWithColor(panel->icon, &color); + RCombineImageWithColor(panel->pic, &color); + } + } + panel->timer = WMAddTimerHandler(50, logoPushCallback, panel); + panel->cycle = 0; + panel->oldPix = WMRetainPixmap(WMGetLabelImage(panel->logoL)); + } else if (panel->timer) { + char version[20]; + + clicks = 0; + WMSetLabelImage(panel->logoL, panel->oldPix); + WMReleasePixmap(panel->oldPix); + panel->oldPix = NULL; + + WMDeleteTimerHandler(panel->timer); + panel->timer = NULL; + + sprintf(version, "Version %s", VERSION); + WMSetLabelText(panel->versionL, version); + } + + { + XEvent ev; + while (XCheckTypedWindowEvent(dpy, WMWidgetXID(panel->versionL), + ButtonPress, &ev)); + } +} +#endif /* SILLYNESS */ void wShowInfoPanel(WScreen *scr) @@ -666,6 +907,7 @@ wShowInfoPanel(WScreen *scr) } panel = wmalloc(sizeof(InfoPanel)); + memset(panel, 0, sizeof(InfoPanel)); panel->scr = scr; @@ -680,6 +922,10 @@ wShowInfoPanel(WScreen *scr) WMMoveWidget(panel->logoL, 30, 20); WMSetLabelImagePosition(panel->logoL, WIPImageOnly); WMSetLabelImage(panel->logoL, logo); +#ifdef SILLYNESS + WMCreateEventHandler(WMWidgetView(panel->logoL), ButtonPressMask, + handleLogoPush, panel); +#endif } panel->name1L = WMCreateLabel(panel->win); @@ -690,7 +936,7 @@ wShowInfoPanel(WScreen *scr) color1.blue = 0; color2.red = 0x50; color2.green = 0x50; - color2.blue = 0x60; + color2.blue = 0x70; logo = renderText(scr->wmscreen, " Window Maker ", "-*-times-bold-r-*-*-24-*", &color1, &color2); if (logo) { @@ -720,11 +966,11 @@ wShowInfoPanel(WScreen *scr) sprintf(version, "Version %s", VERSION); panel->versionL = WMCreateLabel(panel->win); - WMResizeWidget(panel->versionL, 150, 16); - WMMoveWidget(panel->versionL, 190, 95); + WMResizeWidget(panel->versionL, 310, 16); + WMMoveWidget(panel->versionL, 30, 95); WMSetLabelTextAlignment(panel->versionL, WARight); WMSetLabelText(panel->versionL, version); - + WMSetLabelWraps(panel->versionL, False); panel->copyrL = WMCreateLabel(panel->win); WMResizeWidget(panel->copyrL, 340, 40); @@ -763,12 +1009,43 @@ wShowInfoPanel(WScreen *scr) strcat(buffer, strl[i]); strcat(buffer, " "); } + + strcat(buffer, "\nAdditional Support For: "); + { + char *list[8]; + char buf[80]; + int j = 0; + +#ifdef MWM_HINTS + list[j++] = "MWM"; +#endif +#ifdef KWM_HINTS + list[j++] = "KDE"; +#endif +#ifdef GNOME_STUFF + list[j++] = "GNOME"; +#endif +#ifdef OLWM_HINTS + list[j++] = "OLWM"; +#endif #ifdef WMSOUND - strcat(buffer, "\nSound support compiled in"); -#else - strcat(buffer, "\nSound support not available"); + list[j++] = "Sound"; #endif + buf[0] = 0; + for (i = 0; i < j; i++) { + if (i > 0) { + if (i == j - 1) + strcat(buf, " and "); + else + strcat(buf, ", "); + } + strcat(buf, list[i]); + } + strcat(buffer, buf); + } + + panel->infoL = WMCreateLabel(panel->win); WMResizeWidget(panel->infoL, 350, 75); WMMoveWidget(panel->infoL, 15, 115); @@ -792,8 +1069,8 @@ wShowInfoPanel(WScreen *scr) (scr->scr_width - 382)/2, (scr->scr_height - 230)/2, 382, 230); - wwin->window_flags.no_closable = 0; - wwin->window_flags.no_close_button = 0; + WSETUFLAG(wwin, no_closable, 0); + WSETUFLAG(wwin, no_close_button, 0); wWindowUpdateButtonImages(wwin); wFrameWindowShowButton(wwin->frame, WFF_RIGHT_BUTTON); wwin->frame->on_click_right = destroyInfoPanel; @@ -895,8 +1172,8 @@ wShowLegalPanel(WScreen *scr) (scr->scr_width - 420)/2, (scr->scr_height - 250)/2, 420, 250); - wwin->window_flags.no_closable = 0; - wwin->window_flags.no_close_button = 0; + WSETUFLAG(wwin, no_closable, 0); + WSETUFLAG(wwin, no_close_button, 0); wWindowUpdateButtonImages(wwin); wFrameWindowShowButton(wwin->frame, WFF_RIGHT_BUTTON); wwin->frame->on_click_right = destroyLegalPanel; diff --git a/src/dock.c b/src/dock.c index fde4e2ae..7984d993 100644 --- a/src/dock.c +++ b/src/dock.c @@ -111,6 +111,8 @@ static proplist_t dAutoAttractIcons, dKeepAttracted; static proplist_t dPosition, dApplications, dLowered, dCollapsed, dAutoCollapse; +static proplist_t dAutoRaiseLower; + static void dockIconPaint(WAppIcon *btn); static void iconMouseDown(WObjDescriptor *desc, XEvent *event); @@ -125,8 +127,6 @@ static void toggleLowered(WDock *dock); static void toggleCollapsed(WDock *dock); -static void toggleAutoCollapse(WDock *dock); - static void clipIconExpose(WObjDescriptor *desc, XEvent *event); static void clipLeave(WDock *dock); @@ -140,6 +140,9 @@ static void clipLeaveNotify(WObjDescriptor *desc, XEvent *event); static void clipAutoCollapse(void *cdata); static void launchDockedApplication(WAppIcon *btn); +static void clipAutoLower(void *cdata); +static void clipAutoRaise(void *cdata); + static void showClipBalloon(WDock *dock, int workspace); #ifdef OFFIX_DND @@ -183,6 +186,7 @@ make_keys() dLowered = PLMakeString("Lowered"); dCollapsed = PLMakeString("Collapsed"); dAutoCollapse = PLMakeString("AutoCollapse"); + dAutoRaiseLower = PLMakeString("AutoRaiseLower"); dAutoAttractIcons = PLMakeString("AutoAttractIcons"); dKeepAttracted = PLMakeString("KeepAttracted"); @@ -659,9 +663,16 @@ toggleCollapsedCallback(WMenu *menu, WMenuEntry *entry) static void toggleAutoCollapseCallback(WMenu *menu, WMenuEntry *entry) { + WDock *dock; assert(entry->clientdata!=NULL); - toggleAutoCollapse(entry->clientdata); + dock = (WDock*) entry->clientdata; + + dock->auto_collapse = !dock->auto_collapse; + if (dock->auto_collapse_magic) { + WMDeleteTimerHandler(dock->auto_collapse_magic); + dock->auto_collapse_magic = NULL; + } entry->flags.indicator_on = ((WDock*)entry->clientdata)->auto_collapse; @@ -670,6 +681,22 @@ toggleAutoCollapseCallback(WMenu *menu, WMenuEntry *entry) static void +toggleAutoRaiseLowerCallback(WMenu *menu, WMenuEntry *entry) +{ + WDock *dock; + assert(entry->clientdata!=NULL); + + dock = (WDock*) entry->clientdata; + + dock->auto_raise_lower = !dock->auto_raise_lower; + + entry->flags.indicator_on = ((WDock*)entry->clientdata)->auto_raise_lower; + + wMenuPaint(menu); +} + + +static void launchCallback(WMenu *menu, WMenuEntry *entry) { WAppIcon *btn = (WAppIcon*)entry->clientdata; @@ -805,8 +832,8 @@ launchDockedApplication(WAppIcon *btn) if (btn->wm_instance || btn->wm_class) { WWindowAttributes attr; memset(&attr, 0, sizeof(WWindowAttributes)); - wDefaultFillAttributes(scr, btn->wm_instance, btn->wm_class, &attr, - True); + wDefaultFillAttributes(scr, btn->wm_instance, btn->wm_class, + &attr, NULL, True); if (!attr.no_appicon && !btn->buggy_app) btn->launching = 1; @@ -917,6 +944,11 @@ updateClipOptionsMenu(WMenu *menu, WDock *dock) entry->flags.indicator_on = dock->auto_collapse; entry->clientdata = dock; + /* auto-raise/lower */ + entry = menu->entries[++index]; + entry->flags.indicator_on = dock->auto_raise_lower; + entry->clientdata = dock; + /* attract icons */ entry = menu->entries[++index]; entry->flags.indicator_on = dock->attract_icons; @@ -962,6 +994,12 @@ makeClipOptionsMenu(WScreen *scr) entry->flags.indicator_on = 1; entry->flags.indicator_type = MI_CHECK; + entry = wMenuAddCallback(menu, _("AutoRaiseLower"), + toggleAutoRaiseLowerCallback, NULL); + entry->flags.indicator = 1; + entry->flags.indicator_on = 1; + entry->flags.indicator_type = MI_CHECK; + entry = wMenuAddCallback(menu, _("AutoAttract Icons"), toggleAutoAttractCallback, NULL); entry->flags.indicator = 1; @@ -1074,6 +1112,9 @@ wDockCreate(WScreen *scr, int type) dock->collapsed = 0; dock->auto_collapse = 0; dock->auto_collapse_magic = NULL; + dock->auto_raise_lower = 0; + dock->auto_lower_magic = NULL; + dock->auto_raise_magic = NULL; dock->attract_icons = 0; dock->keep_attracted = 0; dock->lowered = 1; @@ -1289,6 +1330,9 @@ dockSaveState(WDock *dock) value = (dock->auto_collapse ? dYes : dNo); PLInsertDictionaryEntry(dock_state, dAutoCollapse, value); + value = (dock->auto_raise_lower ? dYes : dNo); + PLInsertDictionaryEntry(dock_state, dAutoRaiseLower, value); + value = (dock->attract_icons ? dYes : dNo); PLInsertDictionaryEntry(dock_state, dAutoAttractIcons, value); @@ -1626,6 +1670,21 @@ wDockRestoreState(WScreen *scr, proplist_t dock_state, int type) } + /* restore auto-raise/lower state */ + + value = PLGetDictionaryEntry(dock_state, dAutoRaiseLower); + + if (value) { + if (!PLIsString(value)) + COMPLAIN("AutoRaiseLower"); + else { + if (strcasecmp(PLGetString(value), "YES")==0) { + dock->auto_raise_lower = 1; + } + } + } + + /* restore attract icons state */ dock->attract_icons = 0; @@ -1656,10 +1715,10 @@ wDockRestoreState(WScreen *scr, proplist_t dock_state, int type) dock->keep_attracted = 1; } } - - + + /* application list */ - + apps = PLGetDictionaryEntry(dock_state, dApplications); if (!apps) { @@ -1732,11 +1791,11 @@ wDockRestoreState(WScreen *scr, proplist_t dock_state, int type) scr->clip_icon = dock->icon_array[0]; wAppIconDestroy(old_top); } - + finish: if (dock_state) PLRelease(dock_state); - + return dock; } @@ -1867,7 +1926,7 @@ wDockReceiveDNDDrop(WScreen *scr, XEvent *event) memset(&attr, 0, sizeof(WWindowAttributes)); wDefaultFillAttributes(btn->icon->core->screen_ptr, btn->wm_instance, - btn->wm_class, &attr, True); + btn->wm_class, &attr, NULL, True); if (!attr.no_appicon) btn->launching = 1; @@ -2107,7 +2166,7 @@ moveIconBetweenDocks(WDock *src, WDock *dest, WAppIcon *icon, int x, int y) } } - if (src->auto_collapse) + if (src->auto_collapse || src->auto_raise_lower) clipLeave(src); icon->yindex = y; @@ -2125,6 +2184,7 @@ moveIconBetweenDocks(WDock *src, WDock *dest, WAppIcon *icon, int x, int y) return True; } + void wDockDetach(WDock *dock, WAppIcon *icon) { @@ -2190,7 +2250,7 @@ wDockDetach(WDock *dock, WAppIcon *icon) wArrangeIcons(dock->screen_ptr, True); } } - if (dock->auto_collapse) + if (dock->auto_collapse || dock->auto_raise_lower) clipLeave(dock); } @@ -2638,6 +2698,8 @@ swapDock(WDock *dock) XMoveWindow(dpy, btn->icon->core->window, btn->x_pos, btn->y_pos); } } + + wScreenUpdateUsableArea(scr); } @@ -2676,8 +2738,6 @@ execCommand(WAppIcon *btn, char *command, WSavedState *state) SetupEnvironment(scr); - CloseDescriptors(); - #ifdef HAVE_SETPGID setpgid(0, 0); #endif @@ -2846,22 +2906,39 @@ wDockTrackWindowLaunch(WDock *dock, Window window) #endif char *wm_class, *wm_instance; int i; - + Bool firstPass = True; + Bool found = False; + char *command = NULL; + + { + int argc; + char **argv; + + if (XGetCommand(dpy, window, &argv, &argc)) { + if (argc > 0 && argv != NULL) + command = FlattenStringList(argv,argc); + if (argv) { + XFreeStringList(argv); + } + } + } if (!PropGetWMClass(window, &wm_class, &wm_instance) || (!wm_class && !wm_instance)) return; +retry: for (i=0; i<dock->max_icons; i++) { icon = dock->icon_array[i]; if (!icon) continue; - /* kluge. If this does not exist, some windows attach themselves - * to more than one icon. Find out why */ + /* app is already attached to icon */ if (icon->main_window == window) { + found = True; break; } + if ((icon->wm_instance || icon->wm_class) && (icon->launching || (dock->screen_ptr->flags.startup && !icon->running))) { @@ -2874,6 +2951,9 @@ wDockTrackWindowLaunch(WDock *dock, Window window) strcmp(icon->wm_class, wm_class)!=0) { continue; } + if (firstPass && command && strcmp(icon->command, command)!=0) { + continue; + } if (!icon->relaunching) { WApplication *wapp; @@ -2888,6 +2968,7 @@ wDockTrackWindowLaunch(WDock *dock, Window window) } if (!icon->forced_dock) icon->main_window = window; + #ifdef REDUCE_APPICONS tapplist = wmalloc(sizeof(WAppIconAppList)); memset(tapplist, 0, sizeof(WAppIconAppList)); @@ -2899,11 +2980,20 @@ wDockTrackWindowLaunch(WDock *dock, Window window) icon->num_apps++; #endif } + found = True; wDockFinishLaunch(dock, icon); break; } } - + + if (firstPass && !found) { + firstPass = False; + goto retry; + } + + if (command) + free(command); + if (wm_class) XFree(wm_class); if (wm_instance) @@ -2921,7 +3011,9 @@ wClipUpdateForWorkspaceChange(WScreen *scr, int workspace) WDock *old_clip = scr->workspaces[scr->current_workspace]->clip; wDockHideIcons(old_clip); - if (old_clip->auto_collapse && !old_clip->collapsed) + if (old_clip->auto_raise_lower) + wDockLower(old_clip); + if (old_clip->auto_collapse && !old_clip->collapsed) old_clip->collapsed = 1; wDockShowIcons(scr->workspaces[workspace]->clip); } @@ -2993,6 +3085,9 @@ toggleLowered(WDock *dock) if (dock->lowered) wLowerFrame(tmp->icon->core); } + + if (dock->type == WM_DOCK) + wScreenUpdateUsableArea(dock->screen_ptr); } @@ -3011,17 +3106,6 @@ toggleCollapsed(WDock *dock) static void -toggleAutoCollapse(WDock *dock) -{ - dock->auto_collapse = !dock->auto_collapse; - if (dock->auto_collapse_magic) { - WMDeleteTimerHandler(dock->auto_collapse_magic); - dock->auto_collapse_magic = NULL; - } -} - - -static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event) { WScreen *scr = dock->screen_ptr; @@ -3373,7 +3457,7 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) WScreen *scr = dock->screen_ptr; Window wins[2]; WIcon *icon = aicon->icon; - WDock *dock2 = NULL, *last_dock = dock; + WDock *dock2 = NULL, *last_dock = dock, *clip = NULL; int ondock, grabbed = 0, change_dock = 0, collapsed = 0; XEvent ev; int x = aicon->x_pos, y = aicon->y_pos; @@ -3398,8 +3482,11 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) wRaiseFrame(icon->core); + if (!wPreferences.flags.noclip) + clip = scr->workspaces[scr->current_workspace]->clip; + if (dock == scr->dock && !wPreferences.flags.noclip) - dock2 = scr->workspaces[scr->current_workspace]->clip; + dock2 = clip; else if (dock != scr->dock && !wPreferences.flags.nodock) dock2 = scr->dock; @@ -3418,7 +3505,7 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) XClearWindow(dpy, scr->dock_shadow); } XMapWindow(dpy, scr->dock_shadow); - + ondock = 1; @@ -3457,6 +3544,8 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) dock->collapsed = 0; wDockShowIcons(dock); } + if (dock->auto_raise_lower) + wDockRaise(dock); last_dock = dock; } else if (dock2) { @@ -3472,6 +3561,8 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) dock2->collapsed = 0; wDockShowIcons(dock2); } + if (dock2->auto_raise_lower) + wDockRaise(dock2); last_dock = dock2; } } @@ -3520,9 +3611,11 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) if (ondock) { SlideWindow(icon->core->window, x, y, shad_x, shad_y); XUnmapWindow(dpy, scr->dock_shadow); - if (!change_dock) + if (!change_dock) { reattachIcon(dock, aicon, ix, iy); - else { + if (clip && dock!=clip && clip->auto_raise_lower) + wDockLower(clip); + } else { docked = moveIconBetweenDocks(dock, dock2, aicon, ix, iy); if (!docked) { /* Slide it back if dock rejected it */ @@ -3547,6 +3640,8 @@ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event) DoKaboom(scr,aicon->icon->core->window, x, y); } } + if (clip && clip->auto_raise_lower) + wDockLower(clip); wDockDetach(dock, aicon); } if (collapsed) { @@ -3763,7 +3858,7 @@ showClipBalloon(WDock *dock, int workspace) wDrawString(scr->clip_balloon, scr->clip_title_font, scr->clip_title_gc, 0, scr->clip_title_font->y, text, strlen(text)); } - + static void clipEnterNotify(WObjDescriptor *desc, XEvent *event) @@ -3780,6 +3875,16 @@ clipEnterNotify(WObjDescriptor *desc, XEvent *event) if (!dock || dock->type!=WM_CLIP) return; + if (dock->auto_lower_magic) { + WMDeleteTimerHandler(dock->auto_lower_magic); + dock->auto_lower_magic = NULL; + } + if (dock->auto_raise_lower) { + dock->auto_raise_magic = WMAddTimerHandler(AUTO_RAISE_DELAY, + clipAutoRaise, + (void *)dock); + } + if (btn->xindex == 0 && btn->yindex == 0) showClipBalloon(dock, dock->screen_ptr->current_workspace); else { @@ -3788,33 +3893,44 @@ clipEnterNotify(WObjDescriptor *desc, XEvent *event) dock->screen_ptr->flags.clip_balloon_mapped = 0; } } - if (!dock->auto_collapse) - return; + if (dock->auto_collapse) { + if (dock->auto_collapse_magic) { + WMDeleteTimerHandler(dock->auto_collapse_magic); + dock->auto_collapse_magic = NULL; + } - if (dock->auto_collapse_magic) { - WMDeleteTimerHandler(dock->auto_collapse_magic); - dock->auto_collapse_magic = NULL; + if (dock->collapsed) + toggleCollapsed(dock); } - - if (dock->collapsed) - toggleCollapsed(dock); } static void clipLeave(WDock *dock) { - if (!dock || dock->type!=WM_CLIP || !dock->auto_collapse) + if (!dock || dock->type!=WM_CLIP) return; - - if (dock->auto_collapse_magic) { - WMDeleteTimerHandler(dock->auto_collapse_magic); - dock->auto_collapse_magic = NULL; + + if (dock->auto_raise_magic) { + WMDeleteTimerHandler(dock->auto_raise_magic); + dock->auto_raise_magic = NULL; } - if (!dock->collapsed) { - dock->auto_collapse_magic = WMAddTimerHandler(AUTO_COLLAPSE_DELAY, - clipAutoCollapse, - (void *)dock); + if (dock->auto_raise_lower) { + dock->auto_lower_magic = WMAddTimerHandler(AUTO_LOWER_DELAY, + clipAutoLower, + (void *)dock); + } + + if (dock->auto_collapse) { + if (dock->auto_collapse_magic) { + WMDeleteTimerHandler(dock->auto_collapse_magic); + dock->auto_collapse_magic = NULL; + } + if (!dock->collapsed) { + dock->auto_collapse_magic = WMAddTimerHandler(AUTO_COLLAPSE_DELAY, + clipAutoCollapse, + (void *)dock); + } } } @@ -3847,3 +3963,33 @@ clipAutoCollapse(void *cdata) dock->auto_collapse_magic = NULL; } + +static void +clipAutoLower(void *cdata) +{ + WDock *dock = (WDock *)cdata; + + if (dock->type!=WM_CLIP) + return; + + if (dock->auto_raise_lower) + wDockLower(dock); + + dock->auto_lower_magic = NULL; +} + + +static void +clipAutoRaise(void *cdata) +{ + WDock *dock = (WDock *)cdata; + + if (dock->type!=WM_CLIP) + return; + + if (dock->auto_raise_lower) + wDockRaise(dock); + + dock->auto_raise_magic = NULL; +} + diff --git a/src/dock.h b/src/dock.h index 4231feb5..ff457b48 100644 --- a/src/dock.h +++ b/src/dock.h @@ -44,7 +44,11 @@ typedef struct WDock { int type; WMagicNumber auto_collapse_magic; + WMagicNumber auto_raise_magic; + WMagicNumber auto_lower_magic; unsigned int auto_collapse:1; /* if clip auto-collapse itself */ + unsigned int auto_raise_lower:1; /* if clip should raise/lower when + * entered/leaved */ unsigned int on_right_side:1; unsigned int collapsed:1; unsigned int mapped:1; diff --git a/src/event.c b/src/event.c index 4363c8ea..b45bfa59 100644 --- a/src/event.c +++ b/src/event.c @@ -35,8 +35,7 @@ #include <X11/extensions/shape.h> #endif #ifdef XDE_DND -#include <X11/Xatom.h> -#include <gdk/gdk.h> +#include "xde.h" #endif #ifdef KEEP_XKB_LOCK_STATUS @@ -57,7 +56,12 @@ #include "framewin.h" #include "properties.h" #include "balloon.h" - +#ifdef GNOME_STUFF +# include "gnome.h" +#endif +#ifdef KWM_HINTS +# include "kwm.h" +#endif /******** Global Variables **********/ extern XContext wWinContext; @@ -83,14 +87,6 @@ extern Atom _XA_WINDOWMAKER_WM_FUNCTION; #ifdef OFFIX_DND extern Atom _XA_DND_PROTOCOL; #endif -#ifdef XDE_DND -extern Atom _XA_XDE_REQUEST; -extern Atom _XA_XDE_ENTER; -extern Atom _XA_XDE_LEAVE; -extern Atom _XA_XDE_DATA_AVAILABLE; -extern Atom _XDE_FILETYPE; -extern Atom _XDE_URLTYPE; -#endif #ifdef SHAPE @@ -204,41 +200,23 @@ wDeleteDeathHandler(WMagicNumber id) void DispatchEvent(XEvent *event) { - int i; - if (deathHandler) handleDeadProcess(NULL); if (WProgramState==WSTATE_NEED_EXIT) { WProgramState = WSTATE_EXITING; - + /* received SIGTERM */ /* * WMHandleEvent() can't be called from anything * executed inside here, or we can get in a infinite * recursive loop. */ - for (i=0; i<wScreenCount; i++) { - WScreen *scr; - scr = wScreenWithNumber(i); - if (scr) { - wScreenSaveState(scr); - } - } - RestoreDesktop(NULL); - ExecExitScript(); - /* received SIGTERM */ - Exit(0); + Shutdown(WSExitMode); + } else if (WProgramState == WSTATE_NEED_RESTART) { WProgramState = WSTATE_RESTARTING; - for (i=0; i<wScreenCount; i++) { - WScreen *scr; - scr = wScreenWithNumber(i); - if (scr) { - wScreenSaveState(scr); - } - } - RestoreDesktop(NULL); + Shutdown(WSRestartPreparationMode); /* received SIGHUP */ Restart(NULL); } @@ -267,7 +245,7 @@ DispatchEvent(XEvent *event) break; case DestroyNotify: - handleDestroyNotify(event->xdestroywindow.window); + handleDestroyNotify(event); break; case MapNotify: @@ -464,6 +442,7 @@ handleExtensions(XEvent *event) #endif } + static void handleMapRequest(XEvent *ev) { @@ -477,6 +456,9 @@ handleMapRequest(XEvent *ev) if ((wwin=wWindowFor(window))) { /* deiconify window */ + if (wwin->flags.maximized) { + wMaximizeWindow(wwin, wwin->flags.maximized); + } if (wwin->flags.shaded) wUnshadeWindow(wwin); if (wwin->flags.miniaturized) { @@ -514,6 +496,7 @@ handleMapRequest(XEvent *ev) wDockTrackWindowLaunch(scr->last_dock, window); } + if (wwin) { int state; @@ -558,10 +541,12 @@ handleMapRequest(XEvent *ev) static void -handleDestroyNotify(Window window) +handleDestroyNotify(XEvent *event) { WWindow *wwin; WApplication *app; + Window window = event->xdestroywindow.window; + #ifdef DEBUG puts("got destroy notify"); #endif @@ -585,6 +570,10 @@ handleDestroyNotify(Window window) } wApplicationDestroy(app); } + +#ifdef KWM_HINTS + wKWMCheckDestroy(&event->xdestroywindow); +#endif } @@ -629,6 +618,7 @@ handleButtonPress(XEvent *event) wBalloonHide(scr); #endif +#ifndef LITE if (event->xbutton.window==scr->root_win) { if (event->xbutton.button==wPreferences.menu_button) { OpenRootMenu(scr, event->xbutton.x_root, @@ -641,7 +631,6 @@ handleButtonPress(XEvent *event) event->xbutton.window = scr->root_menu->frame->core->window; } } else if (event->xbutton.button==wPreferences.windowl_button) { - OpenSwitchMenu(scr, event->xbutton.x_root, event->xbutton.y_root, False); if (scr->switch_menu) { @@ -651,24 +640,23 @@ handleButtonPress(XEvent *event) event->xbutton.window = scr->switch_menu->frame->core->window; } } else if (event->xbutton.button==wPreferences.select_button) { - + wUnselectWindows(scr); wSelectWindows(scr, event); } #ifdef MOUSE_WS_SWITCH else if (event->xbutton.button==Button4) { - if (scr->current_workspace > 0) - wWorkspaceChange(scr, scr->current_workspace-1); + wWorkspaceRelativeChange(scr, -1); } else if (event->xbutton.button==Button5) { - if (scr->current_workspace < scr->workspace_count-1) - wWorkspaceChange(scr, scr->current_workspace+1); - + wWorkspaceRelativeChange(scr, 1); + } #endif /* MOUSE_WS_SWITCH */ } +#endif /* !LITE */ if (XFindContext(dpy, event->xbutton.subwindow, wWinContext, (XPointer *)&desc)==XCNOENT) { @@ -820,6 +808,7 @@ handlePropertyNotify(XEvent *event) Window jr; int ji; unsigned int ju; + WScreen *scr; #ifdef DEBUG puts("got property notify"); @@ -835,6 +824,13 @@ handlePropertyNotify(XEvent *event) if (wapp) { wClientCheckProperty(wapp->main_window_desc, &event->xproperty); } + + scr = wScreenForRootWindow(event->xproperty.window); + if (scr) { +#ifdef KWM_HINTS + wKWMCheckRootHintChange(scr, &event->xproperty); +#endif + } } @@ -899,83 +895,17 @@ handleClientMessage(XEvent *event) } } } +#ifdef GNOME_STUFF + } else if (wGNOMEProcessClientMessage(&event->xclient)) { + /* do nothing */ +#endif /* GNOME_STUFF */ +#ifdef KWM_HINTS + } else if (wKWMProcessClientMessage(&event->xclient)) { + /* do nothing */ +#endif /* KWM_HINTS */ #ifdef XDE_DND - } else if (event->xclient.message_type==_XA_XDE_DATA_AVAILABLE) { - GdkEvent gdkev; - WScreen *scr = wScreenForWindow(event->xclient.window); - Atom tmpatom; - int datalenght; - long tmplong; - char * tmpstr, * runstr, * freestr, * tofreestr; - printf("x\n"); - gdkev.dropdataavailable.u.allflags = event->xclient.data.l[1]; - gdkev.dropdataavailable.timestamp = event->xclient.data.l[4]; - - if(gdkev.dropdataavailable.u.flags.isdrop){ - gdkev.dropdataavailable.type = GDK_DROP_DATA_AVAIL; - gdkev.dropdataavailable.requestor = event->xclient.data.l[0]; - XGetWindowProperty(dpy,gdkev.dropdataavailable.requestor, - event->xclient.data.l[2], - 0, LONG_MAX -1, - 0, XA_PRIMARY, &tmpatom, - &datalenght, - &gdkev.dropdataavailable.data_numbytes, - &tmplong, - &tmpstr); - datalenght=gdkev.dropdataavailable.data_numbytes-1; - tofreestr=tmpstr; - runstr=NULL; - for(;datalenght>0;datalenght-=(strlen(tmpstr)+1),tmpstr=&tmpstr[strlen(tmpstr)+1]){ - freestr=runstr;runstr=wstrappend(runstr,tmpstr);free(freestr); - freestr=runstr;runstr=wstrappend(runstr," ");free(freestr); - } - free(tofreestr); - scr->xdestring=runstr; - /* no need to redirect ? */ - wDockReceiveDNDDrop(scr,event); - free(runstr); - scr->xdestring=NULL; - } - - } else if (event->xclient.message_type==_XA_XDE_LEAVE) { - printf("leave\n"); - } else if (event->xclient.message_type==_XA_XDE_ENTER) { - GdkEvent gdkev; - XEvent replyev; - - gdkev.dropenter.u.allflags=event->xclient.data.l[1]; - printf("from win %x\n",event->xclient.data.l[0]); - printf("to win %x\n",event->xclient.window); - printf("enter %x\n",event->xclient.data.l[1]); - printf("v %x ",event->xclient.data.l[2]); - printf("%x ",event->xclient.data.l[3]); - printf("%x\n",event->xclient.data.l[4]); - - if(event->xclient.data.l[2]==_XDE_FILETYPE || - event->xclient.data.l[3]==_XDE_FILETYPE || - event->xclient.data.l[4]==_XDE_FILETYPE || - event->xclient.data.l[2]==_XDE_URLTYPE || - event->xclient.data.l[3]==_XDE_URLTYPE || - event->xclient.data.l[4]==_XDE_URLTYPE) - if(gdkev.dropenter.u.flags.sendreply){ - /*reply*/ - replyev.xclient.type = ClientMessage; - replyev.xclient.window = event->xclient.data.l[0]; - replyev.xclient.format = 32; - replyev.xclient.message_type = _XA_XDE_REQUEST; - replyev.xclient.data.l[0] = event->xclient.window; - - gdkev.dragrequest.u.allflags = 0; - gdkev.dragrequest.u.flags.protocol_version = 0; - gdkev.dragrequest.u.flags.willaccept = 1; - gdkev.dragrequest.u.flags.delete_data = 0; - - replyev.xclient.data.l[1] = gdkev.dragrequest.u.allflags; - replyev.xclient.data.l[2] = replyev.xclient.data.l[3] = 0; - replyev.xclient.data.l[4] = event->xclient.data.l[2]; - XSendEvent(dpy, replyev.xclient.window, 0, NoEventMask, &replyev); - XSync(dpy, 0); - } + } else if (wXDEProcessClientMessage(&event->xclient)) { + /* do nothing */ #endif /* XDE_DND */ #ifdef OFFIX_DND } else if (event->xclient.message_type==_XA_DND_PROTOCOL) { @@ -1090,7 +1020,7 @@ handleEnterNotify(XEvent *event) WMDeleteTimerHandler(scr->autoRaiseTimer); scr->autoRaiseTimer = NULL; - if (wPreferences.raise_delay && !wwin->window_flags.no_focusable) { + if (wPreferences.raise_delay && !WFLAGP(wwin, no_focusable)) { scr->autoRaiseWindow = wwin->frame->core->window; scr->autoRaiseTimer = WMAddTimerHandler(wPreferences.raise_delay, @@ -1321,7 +1251,14 @@ handleKeyPress(XEvent *event) } if (command < 0) { +#ifdef LITE + { +#if 0 + } +#endif +#else if (!wRootMenuPerformShortcut(event)) { +#endif static int dontLoop = 0; if (dontLoop > 10) { @@ -1346,27 +1283,29 @@ handleKeyPress(XEvent *event) #define ISFOCUSED(w) ((w) && (w)->flags.focused) switch (command) { +#ifndef LITE case WKBD_ROOTMENU: OpenRootMenu(scr, event->xkey.x_root, event->xkey.y_root, True); break; + case WKBD_WINDOWLIST: + OpenSwitchMenu(scr, event->xkey.x_root, event->xkey.y_root, True); + break; +#endif /* !LITE */ case WKBD_WINDOWMENU: if (ISMAPPED(wwin) && ISFOCUSED(wwin)) OpenWindowMenu(wwin, wwin->frame_x, wwin->frame_y+wwin->frame->top_width, True); break; - case WKBD_WINDOWLIST: - OpenSwitchMenu(scr, event->xkey.x_root, event->xkey.y_root, True); - break; case WKBD_MINIATURIZE: - if (ISMAPPED(wwin) && ISFOCUSED(wwin)) { + if (ISMAPPED(wwin) && ISFOCUSED(wwin) + && !WFLAGP(wwin, no_miniaturizable)) { CloseWindowMenu(scr); if (wwin->protocols.MINIATURIZE_WINDOW) wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW, event->xbutton.time); else { - if (!wwin->window_flags.no_miniaturizable) - wIconifyWindow(wwin); + wIconifyWindow(wwin); } } break; @@ -1375,14 +1314,13 @@ handleKeyPress(XEvent *event) WApplication *wapp = wApplicationOf(wwin->main_window); CloseWindowMenu(scr); - if (wapp && !wapp->main_window_desc->window_flags.no_appicon) { + if (wapp && !WFLAGP(wapp->main_window_desc, no_appicon)) { wHideApplication(wapp); } } break; case WKBD_MAXIMIZE: - if (ISMAPPED(wwin) && ISFOCUSED(wwin) - && !wwin->window_flags.no_resizable) { + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && !WFLAGP(wwin, no_resizable)) { CloseWindowMenu(scr); if (wwin->flags.maximized) { @@ -1393,8 +1331,7 @@ handleKeyPress(XEvent *event) } break; case WKBD_VMAXIMIZE: - if (ISMAPPED(wwin) && ISFOCUSED(wwin) - && !wwin->window_flags.no_resizable) { + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && !WFLAGP(wwin, no_resizable)) { CloseWindowMenu(scr); if (wwin->flags.maximized) { @@ -1427,17 +1364,22 @@ handleKeyPress(XEvent *event) wRaiseLowerFrame(wwin->frame->core); break; case WKBD_SHADE: - if (ISMAPPED(wwin) && ISFOCUSED(wwin) - && !wwin->window_flags.no_shadeable) { + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && !WFLAGP(wwin, no_shadeable)) { if (wwin->flags.shaded) wUnshadeWindow(wwin); else wShadeWindow(wwin); } break; + case WKBD_MOVERESIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin)) { + CloseWindowMenu(scr); + + wKeyboardMoveResizeWindow(wwin); + } + break; case WKBD_CLOSE: - if (ISMAPPED(wwin) && ISFOCUSED(wwin) - && !wwin->window_flags.no_closable) { + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && !WFLAGP(wwin, no_closable)) { CloseWindowMenu(scr); if (wwin->protocols.DELETE_WINDOW) wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW, @@ -1490,26 +1432,23 @@ handleKeyPress(XEvent *event) GOTOWORKS(10); #undef GOTOWORKS case WKBD_NEXTWORKSPACE: - if (scr->current_workspace < scr->workspace_count-1) - wWorkspaceChange(scr, scr->current_workspace+1); - else if (scr->current_workspace == scr->workspace_count-1) { - if (wPreferences.ws_advance && - scr->current_workspace < MAX_WORKSPACES-1) - wWorkspaceChange(scr, scr->current_workspace+1); - else if (wPreferences.ws_cycle) - wWorkspaceChange(scr, 0); - } + wWorkspaceRelativeChange(scr, 1); break; case WKBD_PREVWORKSPACE: - if (scr->current_workspace > 0) - wWorkspaceChange(scr, scr->current_workspace-1); - else if (scr->current_workspace==0 && wPreferences.ws_cycle) - wWorkspaceChange(scr, scr->workspace_count-1); + wWorkspaceRelativeChange(scr, -1); break; case WKBD_WINDOW1: case WKBD_WINDOW2: case WKBD_WINDOW3: case WKBD_WINDOW4: +#ifdef EXTEND_WINDOWSHORTCUT + case WKBD_WINDOW5: + case WKBD_WINDOW6: + case WKBD_WINDOW7: + case WKBD_WINDOW8: + case WKBD_WINDOW9: + case WKBD_WINDOW10: +#endif if (scr->shortcutWindow[command-WKBD_WINDOW1]) { wMakeWindowVisible(scr->shortcutWindow[command-WKBD_WINDOW1]); } else if (wwin && ISMAPPED(wwin) && ISFOCUSED(wwin)) { diff --git a/src/framewin.c b/src/framewin.c index ad5bc1fa..661ab919 100644 --- a/src/framewin.c +++ b/src/framewin.c @@ -70,7 +70,6 @@ wFrameWindowCreate(WScreen *scr, int wlevel, int x, int y, memset(fwin, 0, sizeof(WFrameWindow)); fwin->screen_ptr = scr; - fwin->window_level = wlevel; fwin->flags.single_texture = (flags & WFF_SINGLE_STATE) ? 1 : 0; @@ -287,7 +286,7 @@ wFrameWindowUpdateBorders(WFrameWindow *fwin, int flags) if (height + fwin->top_width + fwin->bottom_width != fwin->core->height) { wFrameWindowResize(fwin, width, - height + fwin->top_width + fwin->bottom_width); + height + fwin->top_width + fwin->bottom_width); } /* setup object descriptors */ @@ -475,53 +474,13 @@ renderTexture(WScreen *scr, WTexture *texture, int width, int height, { RImage *img; RImage *limg, *rimg, *mimg; - RColor color1, color2; - int i, x, w; + int x, w; *title = None; *lbutton = None; *rbutton = None; - - switch (texture->any.type) { - case WTEX_DGRADIENT: - case WTEX_VGRADIENT: - case WTEX_HGRADIENT: - case WTEX_MHGRADIENT: - case WTEX_MVGRADIENT: - case WTEX_MDGRADIENT: - if (texture->any.type==WTEX_DGRADIENT - || texture->any.type==WTEX_MDGRADIENT) - i = RGRD_DIAGONAL; - else if (texture->any.type==WTEX_HGRADIENT - || texture->any.type==WTEX_MHGRADIENT) - i = RGRD_HORIZONTAL; - else - i = RGRD_VERTICAL; - - if (texture->any.type==WTEX_MHGRADIENT - || texture->any.type==WTEX_MDGRADIENT - || texture->any.type==WTEX_MVGRADIENT) - img = RRenderMultiGradient(width, height, - &(texture->mgradient.colors[1]), i); - else { - color1.red = texture->gradient.color1.red >> 8; - color1.green = texture->gradient.color1.green >> 8; - color1.blue = texture->gradient.color1.blue >> 8; - color2.red = texture->gradient.color2.red >> 8; - color2.green = texture->gradient.color2.green >> 8; - color2.blue = texture->gradient.color2.blue >> 8; - img = RRenderGradient(width, height, &color1, &color2, i); - } - break; - - case WTEX_PIXMAP: - img = wTextureRenderImage(texture, width, height, WREL_FLAT); - break; - - default: - img = NULL; - } - + + img = wTextureRenderImage(texture, width, height, WREL_FLAT); if (!img) { wwarning(_("could not render gradient: %s"), RMessageForError(RErrorCode)); return; @@ -722,8 +681,7 @@ wFrameWindowPaint(WFrameWindow *fwin) WREL_RAISED); } - if (fwin->resizebar - && !fwin->flags.repaint_only_titlebar) { + if (fwin->resizebar && !fwin->flags.repaint_only_titlebar) { Window win; int w, h; int cw; @@ -756,8 +714,7 @@ wFrameWindowPaint(WFrameWindow *fwin) } - if (fwin->title && fwin->titlebar - && !fwin->flags.repaint_only_resizebar) { + if (fwin->title && fwin->titlebar && !fwin->flags.repaint_only_resizebar) { int x, w; int lofs = 6, rofs = 6; int titlelen; @@ -813,13 +770,18 @@ wFrameWindowPaint(WFrameWindow *fwin) } -void -wFrameWindowResize(WFrameWindow *fwin, int width, int height) +static void +reconfigure(WFrameWindow *fwin, int x, int y, int width, int height, + Bool dontMove) { int k = (wPreferences.new_style ? 4 : 3); int resizedHorizontally = 0; - XResizeWindow(dpy, fwin->core->window, width, height); + if (dontMove) + XResizeWindow(dpy, fwin->core->window, width, height); + else + XMoveResizeWindow(dpy, fwin->core->window, x, y, width, height); + /* if (fwin->core->height != height && fwin->resizebar) XMoveWindow(dpy, fwin->resizebar->window, 0, @@ -895,12 +857,16 @@ wFrameWindowResize(WFrameWindow *fwin, int width, int height) } } +void +wFrameWindowConfigure(WFrameWindow *fwin, int x, int y, int width, int height) +{ + reconfigure(fwin, x, y, width, height, False); +} void -wFrameWindowResizeInternal(WFrameWindow *fwin, int iwidth, int iheight) +wFrameWindowResize(WFrameWindow *fwin, int width, int height) { - wFrameWindowResize(fwin, iwidth, - iheight + fwin->top_width + fwin->bottom_width); + reconfigure(fwin, 0, 0, width, height, True); } diff --git a/src/framewin.h b/src/framewin.h index 218fad57..c5221586 100644 --- a/src/framewin.h +++ b/src/framewin.h @@ -39,8 +39,6 @@ typedef struct WFrameWindow { WScreen *screen_ptr; /* pointer to the screen structure */ - short window_level; - short workspace; /* workspace that the window occupies */ WCoreWindow *core; @@ -48,9 +46,13 @@ typedef struct WFrameWindow { WCoreWindow *left_button; /* miniaturize button */ WCoreWindow *right_button; /* close button */ + short workspace; /* workspace that the window occupies */ + short top_width; short bottom_width; - + + short resizebar_corner_width; + WCoreWindow *resizebar; /* bottom resizebar */ Pixmap title_back[3]; /* focused, unfocused, pfocused */ @@ -66,8 +68,6 @@ typedef struct WFrameWindow { GC *title_gc; WFont **font; - short resizebar_corner_width; - char *title; /* window name (title) */ /* thing that uses this frame. passed as data to callbacks */ @@ -127,9 +127,9 @@ void wFrameWindowChangeState(WFrameWindow *fwin, int state); void wFrameWindowPaint(WFrameWindow *fwin); -void wFrameWindowResize(WFrameWindow *fwin, int width, int height); +void wFrameWindowConfigure(WFrameWindow *fwin, int x, int y, int width, int height); -void wFrameWindowResizeInternal(WFrameWindow *fwin, int iwidth, int iheight); +void wFrameWindowResize(WFrameWindow *fwin, int width, int height); void wFrameWindowShowButton(WFrameWindow *fwin, int flags); diff --git a/src/funcs.h b/src/funcs.h index a10f4bbd..3b79caf5 100644 --- a/src/funcs.h +++ b/src/funcs.h @@ -31,6 +31,8 @@ typedef void (WCallBack)(void *cdata); typedef void (WDeathHandler)(pid_t pid, unsigned int status, void *cdata); +void Shutdown(WShutdownMode mode); + void RestoreDesktop(WScreen *scr); void Exit(int status); @@ -41,7 +43,7 @@ void SetupEnvironment(WScreen *scr); void DispatchEvent(XEvent *event); -void WipeDesktop(WScreen *scr); +#ifndef LITE Bool wRootMenuPerformShortcut(XEvent *event); @@ -51,16 +53,30 @@ void OpenRootMenu(WScreen *scr, int x, int y, int keyboard); void OpenSwitchMenu(WScreen *scr, int x, int y, int keyboard); +#endif /* !LITE */ + void OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard); +void OpenMiniwindowMenu(WWindow *wwin, int x, int y); + void OpenWorkspaceMenu(WScreen *scr, int x, int y); void CloseWindowMenu(WScreen *scr); +#ifdef LITE + +#define UpdateSwitchMenu(a, b, c) + +#define UpdateSwitchMenuWorkspace(a, b) + +#else /*! LITE */ + void UpdateSwitchMenu(WScreen *scr, WWindow *wwin, int action); void UpdateSwitchMenuWorkspace(WScreen *scr, int workspace); +#endif /* !LITE */ + WMagicNumber wAddDeathHandler(pid_t pid, WDeathHandler *callback, void *cdata); void wColormapInstallForWindow(WScreen *scr, WWindow *wwin); @@ -84,6 +100,8 @@ char *MakeCPPArgs(char *path); char *ExpandOptions(WScreen *scr, char *cmdline); +void ExecuteShellCommand(WScreen *scr, char *command); + Bool IsDoubleClick(WScreen *scr, XEvent *event); WWindow *NextFocusWindow(WScreen *scr); @@ -93,7 +111,7 @@ void SlideWindow(Window win, int from_x, int from_y, int to_x, int to_y); char *ShrinkString(WFont *font, char *string, int width); -char *FindImage(char **paths, char *file); +char *FindImage(char *paths, char *file); RImage*wGetImageForWindowName(WScreen *scr, char *winstance, char *wclass); @@ -106,6 +124,8 @@ char *FlattenStringList(char **list, int count); void ParseWindowName(proplist_t value, char **winstance, char **wclass, char *where); +void SendHelperMessage(WScreen *scr, char type, int workspace, char *msg); + char *GetShortcutString(char *text); char *EscapeWM_CLASS(char *name, char *class); diff --git a/src/gnome.c b/src/gnome.c new file mode 100644 index 00000000..ee83200f --- /dev/null +++ b/src/gnome.c @@ -0,0 +1,558 @@ +/* gnome.c-- support for the GNOME Hints + * + * Window Maker window manager + * + * Copyright (c) 1998, 1999 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +/* + * According to the author of this thing, it should not be taken seriously. + * IMHO, there are lot's of weirdnesses and it's quite unelegant. I'd + * rather not support it, but here it goes anyway. + */ + +#include "wconfig.h" + +#ifdef GNOME_STUFF + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + + +#include "WindowMaker.h" +#include "screen.h" +#include "wcore.h" +#include "framewin.h" +#include "window.h" +#include "workspace.h" +#include "funcs.h" +#include "actions.h" +#include "stacking.h" + +#include "gnome.h" + + +#define WIN_HINTS_SKIP_FOCUS (1<<0) /*"alt-tab" skips this win*/ +#define WIN_HINTS_SKIP_WINLIST (1<<1) /*do not show in window list*/ +#define WIN_HINTS_SKIP_TASKBAR (1<<2) /*do not show on taskbar*/ +#define WIN_HINTS_GROUP_TRANSIENT (1<<3) /*Reserved - definition is unclear*/ +#define WIN_HINTS_FOCUS_ON_CLICK (1<<4) /*app only accepts focus if clicked*/ + + +#define WIN_STATE_STICKY (1<<0) /*everyone knows sticky*/ +#define WIN_STATE_MINIMIZED (1<<1) /*Reserved - definition is unclear*/ +#define WIN_STATE_MAXIMIZED_VERT (1<<2) /*window in maximized V state*/ +#define WIN_STATE_MAXIMIZED_HORIZ (1<<3) /*window in maximized H state*/ +#define WIN_STATE_HIDDEN (1<<4) /*not on taskbar but window visible*/ +#define WIN_STATE_SHADED (1<<5) /*shaded (MacOS / Afterstep style)*/ +/* these are bogus states defined in "the spec" */ +#define WIN_STATE_HID_WORKSPACE (1<<6) /*not on current desktop*/ +#define WIN_STATE_HID_TRANSIENT (1<<7) /*owner of transient is hidden*/ +#define WIN_STATE_FIXED_POSITION (1<<8) /*window is fixed in position even*/ +#define WIN_STATE_ARRANGE_IGNORE (1<<9) /*ignore for auto arranging*/ + + +#define WIN_LAYER_DESKTOP 0 +#define WIN_LAYER_BELOW 2 +#define WIN_LAYER_NORMAL 4 +#define WIN_LAYER_ONTOP 6 +#define WIN_LAYER_DOCK 8 +#define WIN_LAYER_ABOVE_DOCK 10 +#define WIN_LAYER_MENU 12 + + + +static Atom _XA_WIN_SUPPORTING_WM_CHECK = 0; +static Atom _XA_WIN_PROTOCOLS; +static Atom _XA_WIN_LAYER; +static Atom _XA_WIN_STATE; +static Atom _XA_WIN_HINTS; +static Atom _XA_WIN_APP_STATE; +static Atom _XA_WIN_EXPANDED_SIZE; +static Atom _XA_WIN_ICONS; +static Atom _XA_WIN_WORKSPACE; +static Atom _XA_WIN_WORKSPACE_COUNT; +static Atom _XA_WIN_WORKSPACE_NAMES; +static Atom _XA_WIN_CLIENT_LIST; + + +void +wGNOMEInitStuff(WScreen *scr) +{ + Atom supportedStuff[10]; + int count; + + if (!_XA_WIN_SUPPORTING_WM_CHECK) { + + _XA_WIN_SUPPORTING_WM_CHECK = + XInternAtom(dpy, "_WIN_SUPPORTING_WM_CHECK", False); + + _XA_WIN_PROTOCOLS = XInternAtom(dpy, "_WIN_PROTOCOLS", False); + + _XA_WIN_LAYER = XInternAtom(dpy, "_WIN_LAYER", False); + + _XA_WIN_STATE = XInternAtom(dpy, "_WIN_STATE", False); + + _XA_WIN_HINTS = XInternAtom(dpy, "_WIN_HINTS", False); + + _XA_WIN_APP_STATE = XInternAtom(dpy, "_WIN_APP_STATE", False); + + _XA_WIN_EXPANDED_SIZE = XInternAtom(dpy, "_WIN_EXPANDED_SIZE", False); + + _XA_WIN_ICONS = XInternAtom(dpy, "_WIN_ICONS", False); + + _XA_WIN_WORKSPACE = XInternAtom(dpy, "_WIN_WORKSPACE", False); + + _XA_WIN_WORKSPACE_COUNT = + XInternAtom(dpy, "_WIN_WORKSPACE_COUNT", False); + + _XA_WIN_WORKSPACE_NAMES = + XInternAtom(dpy, "_WIN_WORKSPACE_NAMES", False); + + _XA_WIN_CLIENT_LIST = XInternAtom(dpy, "_WIN_CLIENT_LIST", False); + } + + /* I'd rather use the ICCCM 2.0 mechanisms, but + * since some people prefer to reinvent the wheel instead of + * conforming to standards... */ + + /* setup the "We're compliant, you idiot!" hint */ + + /* why XA_CARDINAL instead of XA_WINDOW? Only God knows.... */ + XChangeProperty(dpy, scr->root_win, _XA_WIN_SUPPORTING_WM_CHECK, + XA_CARDINAL, 32, PropModeReplace, + (unsigned char*)&scr->no_focus_win, 1); + + XChangeProperty(dpy, scr->no_focus_win, _XA_WIN_SUPPORTING_WM_CHECK, + XA_CARDINAL, 32, PropModeReplace, + (unsigned char*)&scr->no_focus_win, 1); + + + /* setup the list of supported protocols */ + count = 0; + supportedStuff[count++] = _XA_WIN_LAYER; + supportedStuff[count++] = _XA_WIN_STATE; + supportedStuff[count++] = _XA_WIN_HINTS; + supportedStuff[count++] = _XA_WIN_APP_STATE; + supportedStuff[count++] = _XA_WIN_EXPANDED_SIZE; + supportedStuff[count++] = _XA_WIN_ICONS; + supportedStuff[count++] = _XA_WIN_WORKSPACE; + supportedStuff[count++] = _XA_WIN_WORKSPACE_COUNT; + supportedStuff[count++] = _XA_WIN_WORKSPACE_NAMES; + supportedStuff[count++] = _XA_WIN_CLIENT_LIST; + + XChangeProperty(dpy, scr->root_win, _XA_WIN_PROTOCOLS, XA_ATOM, 32, + PropModeReplace, (unsigned char*)supportedStuff, count); + + XFlush(dpy); +} + + +void +wGNOMEUpdateClientListHint(WScreen *scr) +{ + WWindow *wwin; + Window *windows; + int count; + + windows = malloc(sizeof(Window)*scr->window_count); + if (!windows) { + wwarning(_("out of memory while updating GNOME hints")); + return; + } + + count = 0; + wwin = scr->focused_window; + while (wwin) { + if (!wwin->flags.internal_window) { + + windows[count++] = wwin->client_win; + } + + wwin = wwin->prev; + } + + XChangeProperty(dpy, scr->root_win, _XA_WIN_CLIENT_LIST, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *)windows, count); + + free(windows); + XFlush(dpy); +} + + +void +wGNOMEUpdateWorkspaceHints(WScreen *scr) +{ + long val; + + val = scr->workspace_count; + + XChangeProperty(dpy, scr->root_win, _XA_WIN_WORKSPACE_COUNT, XA_CARDINAL, + 32, PropModeReplace, (unsigned char*)&val, 1); + + wGNOMEUpdateWorkspaceNamesHint(scr); +} + + +void +wGNOMEUpdateWorkspaceNamesHint(WScreen *scr) +{ + char *wsNames[MAX_WORKSPACES]; + XTextProperty textProp; + int i; + + for (i = 0; i < scr->workspace_count; i++) { + wsNames[i] = scr->workspaces[i]->name; + } + + if (XStringListToTextProperty(wsNames, scr->workspace_count, &textProp)) { + XSetTextProperty(dpy, scr->root_win, &textProp, + _XA_WIN_WORKSPACE_NAMES); + XFree(textProp.value); + } +} + + +void +wGNOMEUpdateCurrentWorkspaceHint(WScreen *scr) +{ + long val; + + val = scr->current_workspace; + + XChangeProperty(dpy, scr->root_win, _XA_WIN_WORKSPACE, XA_CARDINAL, + 32, PropModeReplace, (unsigned char*)&val, 1); +} + + +static int +getWindowLevel(int layer) +{ + int level; + + if (layer <= WIN_LAYER_DESKTOP) + level = WMDesktopLevel; + else if (layer <= WIN_LAYER_BELOW) + level = WMSunkenLevel; + else if (layer <= WIN_LAYER_NORMAL) + level = WMNormalLevel; + else if (layer <= WIN_LAYER_ONTOP) + level = WMFloatingLevel; + else if (layer <= WIN_LAYER_DOCK) + level = WMDockLevel; + else if (layer <= WIN_LAYER_ABOVE_DOCK) + level = WMSubmenuLevel; + else if (layer <= WIN_LAYER_MENU) + level = WMMainMenuLevel; + else + level = WMOuterSpaceLevel; + + return level; +} + + +void +wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) +{ + Atom type_ret; + int fmt_ret; + unsigned long nitems_ret; + unsigned long bytes_after_ret; + long flags, val, *data = 0; + + /* hints */ + + if (XGetWindowProperty(dpy, wwin->client_win, _XA_WIN_HINTS, 0, 1, False, + /* should be XA_INTEGER, but spec is broken */ + XA_CARDINAL, &type_ret, &fmt_ret, &nitems_ret, + &bytes_after_ret, + (unsigned char**)&data)==Success && data) { + flags = *data; + + XFree(data); + + if (flags & (WIN_HINTS_SKIP_FOCUS|WIN_HINTS_SKIP_WINLIST)) { + wwin->client_flags.skip_window_list = 1; + } + } + + /* layer */ + if (XGetWindowProperty(dpy, wwin->client_win, _XA_WIN_LAYER, 0, 1, False, + XA_CARDINAL, &type_ret, &fmt_ret, &nitems_ret, + &bytes_after_ret, + (unsigned char**)&data)==Success && data) { + val = *data; + + XFree(data); + + *layer = getWindowLevel(val); + } + + /* workspace */ + if (XGetWindowProperty(dpy, wwin->client_win, _XA_WIN_WORKSPACE, 0, 1, + False, XA_CARDINAL, &type_ret, &fmt_ret, + &nitems_ret, &bytes_after_ret, + (unsigned char**)&data)==Success && data) { + val = *data; + + XFree(data); + + *workspace = val; + } + + /* reserved area */ + if (XGetWindowProperty(dpy, wwin->client_win, _XA_WIN_EXPANDED_SIZE, 0, 1, + False, XA_CARDINAL, &type_ret, &fmt_ret, + &nitems_ret, &bytes_after_ret, + (unsigned char**)&data)==Success && data) { + WReservedArea *area; + + area = malloc(sizeof(WReservedArea)); + if (!area) { + wwarning(_("out of memory while updating GNOME hints")); + } else { + area->area.x1 = data[0]; + area->area.y1 = data[1]; + area->area.x2 = data[2] - data[0]; + area->area.y2 = data[3] - data[1]; + XFree(data); + + area->window = wwin->client_win; + } + + area->next = wwin->screen_ptr->reservedAreas; + wwin->screen_ptr->reservedAreas = area; + + wScreenUpdateUsableArea(wwin->screen_ptr); + } +} + + +void +wGNOMECheckInitialClientState(WWindow *wwin) +{ + Atom type_ret; + int fmt_ret; + unsigned long nitems_ret; + unsigned long bytes_after_ret; + long flags, *data = 0; + + if (XGetWindowProperty(dpy, wwin->client_win, _XA_WIN_STATE, 0, 1, False, + XA_CARDINAL, &type_ret, &fmt_ret, &nitems_ret, + &bytes_after_ret, + (unsigned char**)&data)!=Success || !data) + return; + + flags = *data; + + XFree(data); + + if (flags & WIN_STATE_STICKY) + wwin->client_flags.omnipresent = 1; + + if (flags & (WIN_STATE_MAXIMIZED_VERT|WIN_STATE_MAXIMIZED_HORIZ)) { + + if (flags & WIN_STATE_MAXIMIZED_VERT) + wwin->flags.maximized |= MAX_VERTICAL; + + if (flags & WIN_STATE_MAXIMIZED_HORIZ) + wwin->flags.maximized |= MAX_HORIZONTAL; + } + + if (flags & WIN_STATE_SHADED) + wwin->flags.shaded = 1; +} + + +void +wGNOMEUpdateClientStateHint(WWindow *wwin, Bool changedWorkspace) +{ + long val; + long flags = 0; + + if (changedWorkspace) { + val = wwin->frame->workspace; + + XChangeProperty(dpy, wwin->client_win, _XA_WIN_WORKSPACE, XA_CARDINAL, + 32, PropModeReplace, (unsigned char*)&val, 1); + + if (val != wwin->screen_ptr->current_workspace) + flags |= WIN_STATE_HID_WORKSPACE; + } + + if (IS_OMNIPRESENT(wwin)) + flags |= WIN_STATE_STICKY; + + if (wwin->flags.miniaturized) + flags |= WIN_STATE_MINIMIZED; + + if (wwin->flags.maximized & MAX_VERTICAL) + flags |= WIN_STATE_MAXIMIZED_VERT; + + if (wwin->flags.maximized & MAX_HORIZONTAL) + flags |= WIN_STATE_MAXIMIZED_HORIZ; + + if (wwin->flags.shaded) + flags |= WIN_STATE_SHADED; + + if (wwin->transient_for != None) { + WWindow *owner = wWindowFor(wwin->transient_for); + + if (owner && !owner->flags.mapped) + flags |= WIN_STATE_HID_TRANSIENT; + } + + /* ? */ + if (wwin->flags.hidden) + flags |= WIN_STATE_HIDDEN; + + XChangeProperty(dpy, wwin->client_win, _XA_WIN_STATE, XA_CARDINAL, + 32, PropModeReplace, (unsigned char*)&flags, 1); +} + + +Bool +wGNOMEProcessClientMessage(XClientMessageEvent *event) +{ + WWindow *wwin; + Bool done = True; + + wwin = wWindowFor(event->window); + if (!wwin) + return False; + + if (event->message_type == _XA_WIN_LAYER) { + int level = getWindowLevel(event->data.l[0]); + + if (WINDOW_LEVEL(wwin) != level) { + ChangeStackingLevel(wwin->frame->core, level); + } + } else if (event->message_type == _XA_WIN_STATE) { + int flags, mask; + Bool updateWindowList = False; + int maximize = 0; + + mask = event->data.l[0]; + flags = event->data.l[1]; + + if (mask & WIN_STATE_STICKY) { + if ((flags & WIN_STATE_STICKY) != WFLAGP(wwin, omnipresent)) { + wwin->client_flags.omnipresent = 1; + updateWindowList = True; + } + } + + if (mask & WIN_STATE_MAXIMIZED_VERT) { + if (flags & WIN_STATE_MAXIMIZED_VERT) + maximize = MAX_VERTICAL; + else + maximize = 0; + } else { + maximize = wwin->flags.maximized & MAX_VERTICAL; + } + + if (mask & WIN_STATE_MAXIMIZED_HORIZ) { + if (flags & WIN_STATE_MAXIMIZED_HORIZ) + maximize |= MAX_HORIZONTAL; + else + maximize |= 0; + } else { + maximize |= wwin->flags.maximized & MAX_HORIZONTAL; + } + + if (maximize != wwin->flags.maximized) { +#define both (MAX_HORIZONTAL|MAX_VERTICAL) + if (!(maximize & both) && (wwin->flags.maximized & both)) { + wUnmaximizeWindow(wwin); + } + if ((maximize & both) && !(wwin->flags.maximized & both)) { + wMaximizeWindow(wwin, maximize); + } + updateWindowList = False; +#undef both + } + + if (mask & WIN_STATE_SHADED) { + if ((flags & WIN_STATE_SHADED) != wwin->flags.shaded) { + if (wwin->flags.shaded) + wUnshadeWindow(wwin); + else + wShadeWindow(wwin); + updateWindowList = False; + } + } + + if (updateWindowList) { + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } + } else if (event->message_type == _XA_WIN_WORKSPACE) { + + if (event->data.l[0] != wwin->frame->workspace) { + wWindowChangeWorkspace(wwin, event->data.l[0]); + } + } else { + done = False; + } + + return done; +} + + +void +wGNOMERemoveClient(WWindow *wwin) +{ + int flag = 0; + WReservedArea *area; + + wGNOMEUpdateClientListHint(wwin->screen_ptr); + + area = wwin->screen_ptr->reservedAreas; + + if (area) { + if (area->window == wwin->client_win) { + wwin->screen_ptr->reservedAreas = area->next; + free(area); + flag = 1; + } else { + while (area->next && area->next->window != wwin->client_win) + area = area->next; + + if (area->next) { + WReservedArea *next; + + next = area->next->next; + free(area->next); + area->next = next; + + flag = 1; + } + } + } + + if (flag) { + wScreenUpdateUsableArea(wwin->screen_ptr); + } +} + + +#endif /* GNOME_STUFF */ diff --git a/src/workspace.h b/src/gnome.h similarity index 51% copy from src/workspace.h copy to src/gnome.h index 07963a4e..4c25c1cf 100644 --- a/src/workspace.h +++ b/src/gnome.h @@ -1,8 +1,8 @@ -/* workspace.c- Workspace management +/* gnome.h-- stuff for support for gnome hints * * Window Maker window manager * - * Copyright (c) 1997, 1998 Alfredo K. Kojima + * Copyright (c) 1998, 1999 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 @@ -20,31 +20,30 @@ * USA. */ -#ifndef WMWORKSPACE_H_ -#define WMWORKSPACE_H_ +#ifndef _GNOME_H_ +#define _GNOME_H_ -typedef struct WWorkspace { - char *name; - struct WDock *clip; -} WWorkspace; +void wGNOMEInitStuff(WScreen *scr); -void wWorkspaceMake(WScreen *scr, int count); -int wWorkspaceNew(WScreen *scr); -void wWorkspaceDeleteLast(WScreen *scr); -void wWorkspaceChange(WScreen *scr, int workspace); -void wWorkspaceForceChange(WScreen *scr, int workspace); +void wGNOMEUpdateClientListHint(WScreen *scr); +void wGNOMEUpdateWorkspaceHints(WScreen *scr); -WMenu *wWorkspaceMenuMake(WScreen *scr, Bool titled); -void wWorkspaceMenuUpdate(WScreen *scr, WMenu *menu); +void wGNOMEUpdateCurrentWorkspaceHint(WScreen *scr); -void wWorkspaceMenuEdit(WScreen *scr); +void wGNOMEUpdateWorkspaceNamesHint(WScreen *scr); -void wWorkspaceSaveState(WScreen *scr, proplist_t old_state); -void wWorkspaceRestoreState(WScreen *scr); +void wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace); -void wWorkspaceRename(WScreen *scr, int workspace, char *name); +void wGNOMEUpdateClientStateHint(WWindow *wwin, Bool changedWorkspace); + +Bool wGNOMEProcessClientMessage(XClientMessageEvent *event); + +void wGNOMERemoveClient(WWindow *wwin); + +void wGNOMECheckInitialClientState(WWindow *wwin); #endif + diff --git a/src/icon.c b/src/icon.c index 63eb76e6..e2931256 100644 --- a/src/icon.c +++ b/src/icon.c @@ -564,7 +564,7 @@ wIconUpdate(WIcon *icon) icon->pixmap = None; - if (wwin && wwin->window_flags.always_user_icon) + if (wwin && WFLAGP(wwin, always_user_icon)) goto user_icon; /* use client specified icon window */ @@ -754,9 +754,9 @@ wIconPaint(WIcon *icon) wIconUpdate(icon); return; } - + XClearWindow(dpy, icon->core->window); - + /* draw the icon title */ if (icon->show_title && icon->icon_name!=NULL) { int l; @@ -831,8 +831,22 @@ miniwindowMouseDown(WObjDescriptor *desc, XEvent *event) wIconSelect(icon); wSelectWindow(icon->owner, !wwin->flags.selected); } - } + } +#if 0 + else if (event->xbutton.button==Button3) { + WObjDescriptor *desc; + OpenMiniwindowMenu(wwin, event->xbutton.x_root, + event->xbutton.y_root); + + /* allow drag select of menu */ + desc = &wwin->screen_ptr->window_menu->menu->descriptor; + event->xbutton.send_event = True; + (*desc->handle_mousedown)(desc, event); + + return; + } +#endif if (XGrabPointer(dpy, icon->core->window, False, ButtonMotionMask |ButtonReleaseMask|ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) !=GrabSuccess) { diff --git a/src/keybind.h b/src/keybind.h index b29ec6af..b7388bdc 100644 --- a/src/keybind.h +++ b/src/keybind.h @@ -19,6 +19,8 @@ * USA. */ + + /* anywhere */ #define WKBD_ROOTMENU 0 #define WKBD_WINDOWMENU 1 @@ -33,17 +35,17 @@ #define WKBD_CLIPLOWER 8 #define WKBD_CLIPRAISE 9 #define WKBD_CLIPRAISELOWER 10 -/* window, menu */ +/* window */ #define WKBD_RAISE 11 #define WKBD_LOWER 12 #define WKBD_RAISELOWER 13 -/* window */ -#define WKBD_SHADE 14 +#define WKBD_MOVERESIZE 14 +#define WKBD_SHADE 15 /* window, menu */ -#define WKBD_CLOSE 15 +#define WKBD_CLOSE 16 /* window */ -#define WKBD_FOCUSNEXT 16 -#define WKBD_FOCUSPREV 17 +#define WKBD_FOCUSNEXT 17 +#define WKBD_FOCUSPREV 18 #define WKBD_WORKSPACE1 20 #define WKBD_WORKSPACE2 21 @@ -65,14 +67,27 @@ #define WKBD_WINDOW2 35 #define WKBD_WINDOW3 36 #define WKBD_WINDOW4 37 - -#ifdef KEEP_XKB_LOCK_STATUS -# define WKBD_TOGGLE 38 -# define WKBD_LAST 39 -#else -# define WKBD_LAST 38 -#endif /* KEEP_XKB_LOCK_STATUS */ - +#ifdef EXTEND_WINDOWSHORTCUT +# define WKBD_WINDOW5 38 +# define WKBD_WINDOW6 39 +# define WKBD_WINDOW7 40 +# define WKBD_WINDOW8 41 +# define WKBD_WINDOW9 42 +# define WKBD_WINDOW10 43 +# ifdef KEEP_XKB_LOCK_STATUS +# define WKBD_TOGGLE 44 +# define WKBD_LAST 45 +# else +# define WKBD_LAST 44 +# endif /* KEEP_XKB_LOCK_STATUS */ +#else /* !EXTEND_WINDOWSHORTCUT */ +# ifdef KEEP_XKB_LOCK_STATUS +# define WKBD_TOGGLE 38 +# define WKBD_LAST 39 +# else +# define WKBD_LAST 38 +# endif /* KEEP_XKB_LOCK_STATUS */ +#endif /* !EXTEND_WINDOWSHORTCUT */ typedef struct WShortKey { diff --git a/src/kwm.c b/src/kwm.c new file mode 100644 index 00000000..f253754d --- /dev/null +++ b/src/kwm.c @@ -0,0 +1,1519 @@ +/* kwm.c-- stuff for support for kwm hints + * + * Window Maker window manager + * + * Copyright (c) 1998, 1999 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +/* + * + * Supported stuff: + * ================ + * kwm.h function/method Notes + *---------------------------------------------------------------------------- + * setUnsavedDataHint() currently, only gives visual clue that + * there is saved data (broken X close button) + * setSticky() + * setIcon() std X thing... + * setDecoration() + * logout() + * refreshScreen() + * setWmCommand() std X thing + * currentDesktop() + * setKWMModule() + * + * isKWMInitialized() not trustworthy + * activeWindow() dunno it's use, but since it's easy to + * implement it won't hurt to support + * switchToDesktop() + * (set/get)WindowRegion() + * (set)numberOfDesktops() KDE limits to 32, but wmaker is virtually + * unlimited. May raise some incompatibility + * in badly written KDE modules? + * (set/get)DesktopName() + * sendKWMCommand() also does the message relay thing + * desktop() + * geometryRestore() + * isIconified() + * isMaximized() + * isSticky() + * moveToDesktop() WARNING: evil mechanism + * setGeometryRestore() WARNING: evil mechanism + * setMaximize() woo hoo! wanna race? + * setIconify() BAH!: why reinvent the f'ing wheel!? + * its even broken!!! + * move() std X thing + * setGeometry() std X thing + * close() std X thing + * activate() + * activateInternal() + * raise() std X thing + * lower() std X thing + * prepareForSwallowing() std X thing + * doNotManage() klugy thing... + * getBlablablaString() + * setKWMDockModule() maybe we can make the Dock behave as the KDE + * dock, but must figure where to show the windows + * setDockWindow() + * + * Unsupported stuff (superfluous/not-essential/nonsense): + * ======================================================= + * + * darkenScreen() + * setMiniIcon() + * configureWm() + * raiseSoundEvent() + * registerSoundEvent() + * unregisterSoundEvent() + * title() + * titleWithState() + * geometry() kde lib code makes it unnecessary + * + * + * Extensions to KDE: + * ================== + * + * These are clientmessage-type messages specific to Window Maker: + * 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 + */ + + +#include "wconfig.h" + +#ifdef KWM_HINTS + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + + +#include "WindowMaker.h" + +#include "screen.h" +#include "wcore.h" +#include "framewin.h" +#include "window.h" +#include "properties.h" +#include "icon.h" +#include "client.h" +#include "funcs.h" +#include "actions.h" +#include "workspace.h" +#include "dialog.h" + +#include "kwm.h" + +/*#define DEBUG1 +*/ +/******* Global ******/ + +extern Time LastFocusChange; +extern Time LastTimestamp; + + +extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW; +extern Atom _XA_WM_DELETE_WINDOW; + +/** Local **/ + +static Atom _XA_KWM_COMMAND = 0; +static Atom _XA_KWM_ACTIVATE_WINDOW = 0; +static Atom _XA_KWM_ACTIVE_WINDOW = 0; +static Atom _XA_KWM_DO_NOT_MANAGE = 0; +static Atom _XA_KWM_DOCKWINDOW = 0; +static Atom _XA_KWM_RUNNING = 0; + +static Atom _XA_KWM_MODULE = 0; + +static Atom _XA_KWM_MODULE_INIT = 0; +static Atom _XA_KWM_MODULE_DESKTOP_CHANGE = 0; +static Atom _XA_KWM_MODULE_DESKTOP_NAME_CHANGE = 0; +static Atom _XA_KWM_MODULE_DESKTOP_NUMBER_CHANGE = 0; +static Atom _XA_KWM_MODULE_WIN_ADD = 0; +static Atom _XA_KWM_MODULE_WIN_REMOVE = 0; +static Atom _XA_KWM_MODULE_WIN_CHANGE = 0; +static Atom _XA_KWM_MODULE_WIN_RAISE = 0; +static Atom _XA_KWM_MODULE_WIN_LOWER = 0; +static Atom _XA_KWM_MODULE_WIN_ACTIVATE = 0; +static Atom _XA_KWM_MODULE_WIN_ICON_CHANGE = 0; +static Atom _XA_KWM_MODULE_DOCKWIN_ADD = 0; +static Atom _XA_KWM_MODULE_DOCKWIN_REMOVE = 0; + +static Atom _XA_KWM_WIN_UNSAVED_DATA = 0; +static Atom _XA_KWM_WIN_DECORATION = 0; +static Atom _XA_KWM_WIN_DESKTOP = 0; +static Atom _XA_KWM_WIN_GEOMETRY_RESTORE = 0; +static Atom _XA_KWM_WIN_ICONIFIED = 0; +static Atom _XA_KWM_WIN_MAXIMIZED = 0; +static Atom _XA_KWM_WIN_STICKY = 0; + +static Atom _XA_KWM_CURRENT_DESKTOP = 0; +static Atom _XA_KWM_NUMBER_OF_DESKTOPS = 0; +static Atom _XA_KWM_DESKTOP_NAME_[MAX_WORKSPACES]; +static Atom _XA_KWM_WINDOW_REGION_[MAX_WORKSPACES]; + + + +/* list of window titles that must not be managed */ +typedef struct KWMDoNotManageList { + char title[20]; + struct KWMDoNotManageList *next; +} KWMDoNotManageList; + +static KWMDoNotManageList *KWMDoNotManageCrap = NULL; + + +/* list of KWM modules */ +typedef struct KWMModuleList { + Window window; + struct KWMModuleList *next; +#ifdef DEBUG1 + char *title; +#endif +} KWMModuleList; + +static KWMModuleList *KWMModules = NULL; + +static KWMModuleList *KWMDockWindows = NULL; + +/* window decoration types */ +enum { + KWMnoDecoration = 0, + KWMnormalDecoration = 1, + KWMtinyDecoration = 2, + KWMnoFocus = 256 +}; + + + +static Bool +getSimpleHint(Window win, Atom atom, long *retval) +{ + long *data = 0; + + assert(atom!=0); + + data = (long*)PropGetCheckProperty(window, atom, atom, 32, 1, NULL); + + if (!data) + return False; + + *retval = *data; + + XFree(data); + + return True; +} + + + +static void +setSimpleHint(Window win, Atom atom, long value) +{ + assert(atom!=0); + XChangeProperty(dpy, win, atom, atom, + 32, PropModeReplace, (unsigned char*)&value, 1); +} + + +static void +sendClientMessage(WScreen *scr, Window window, Atom atom, long value) +{ + XEvent event; + long mask = 0; + + assert(atom!=0); + + memset(&event, 0, sizeof(XEvent)); + event.xclient.type = ClientMessage; + event.xclient.message_type = atom; + event.xclient.window = window; + event.xclient.format = 32; + event.xclient.data.l[0] = value; + event.xclient.data.l[1] = LastTimestamp; + + if (scr && scr->root_win == window) + mask = SubstructureRedirectMask; + + XSendEvent(dpy, window, False, mask, &event); +} + + +static Bool +getAreaHint(Window win, Atom atom, WArea *area) +{ + long *data = 0; + + data = (long*)PropGetCheckProperty(win, atom, atom, 32, 4, NULL); + + if (!data) + return False; + + area->x1 = data[0]; + area->y1 = data[1]; + area->x2 = data[2] + area->x1; + area->y2 = data[3] + area->y1; + + XFree(data); + + return True; +} + + +static void +setAreaHint(Window win, Atom atom, WArea area) +{ + long value[4]; + + assert(atom!=0); + value[0] = area.x1; + value[1] = area.y1; + value[2] = area.x2 - area.x1; + value[3] = area.y2 - area.y1; + XChangeProperty(dpy, win, atom, atom, 32, PropModeReplace, + (unsigned char*)&value, 4); +} + + +static void +addModule(WScreen *scr, Window window) +{ + KWMModuleList *node; + long val; + WWindow *ptr; + + node = malloc(sizeof(KWMModuleList)); + if (!node) { + wwarning("out of memory while registering KDE module"); + return; + } + + node->next = KWMModules; + node->window = window; + KWMModules = node; + + sendClientMessage(scr, window, _XA_KWM_MODULE_INIT, 0); + + if (getSimpleHint(window, _XA_KWM_MODULE, &val) && val==2) { + if (scr->kwm_dock != None) { + setSimpleHint(window, _XA_KWM_MODULE, 1); + } else { + KWMModuleList *ptr; + + scr->kwm_dock = window; + + for (ptr = KWMDockWindows; ptr!=NULL; ptr = ptr->next) { + sendClientMessage(scr, scr->kwm_dock, _XA_KWM_MODULE_DOCKWIN_ADD, + ptr->window); + } + } + } + + for (ptr = scr->focused_window; ptr!=NULL; ptr = ptr->prev) { + if (!ptr->flags.kwm_hidden_for_modules + && !WFLAGP(ptr, skip_window_list)) { + sendClientMessage(scr, window, _XA_KWM_MODULE_WIN_ADD, + ptr->client_win); + } + } + wKWMSendStacking(scr, window); + + if (scr->focused_window && scr->focused_window->flags.focused) { + sendClientMessage(scr, window, _XA_KWM_MODULE_WIN_ACTIVATE, + scr->focused_window->client_win); + } +#ifdef DEBUG1 + KWMModules->title = NULL; + XFetchName(dpy, window, &KWMModules->title); + printf("NEW MODULE %s\n", KWMModules->title); +#endif +} + + +static void +removeModule(WScreen *scr, Window window) +{ + KWMModuleList *next; + + if (!KWMModules) { + return; + } + + if (KWMModules->window == window) { + next = KWMModules->next; +#ifdef DEBUG1 + printf("REMOVING MODULE %s\n", KWMModules->title); + if (KWMModules->title) + XFree(KWMModules->title); +#endif + free(KWMModules); + KWMModules = next; + } else { + KWMModuleList *ptr; + + ptr = KWMModules; + while (ptr->next) { + if (ptr->next->window == window) { + next = ptr->next->next; +#ifdef DEBUG1 + printf("REMOVING MODULE %s\n", ptr->next->title); + if (ptr->next->title) + XFree(ptr->next->title); +#endif + free(ptr->next); + ptr->next->next = next; + break; + } + ptr->next = ptr->next->next; + } + } + + if (scr->kwm_dock == window) + scr->kwm_dock = None; +} + + + +static void +addDockWindow(WScreen *scr, Window window) +{ + KWMModuleList *ptr; + + for (ptr = KWMDockWindows; ptr != NULL; ptr = ptr->next) { + if (ptr->window == window) + break; + } + if (!ptr) { + KWMModuleList *node; + + node = malloc(sizeof(KWMModuleList)); + if (!node) { + wwarning("out of memory while processing KDE dock window"); + return; + } + node->next = KWMDockWindows; + KWMDockWindows = node; + node->window = window; + XSelectInput(dpy, window, StructureNotifyMask); + + sendClientMessage(scr, scr->kwm_dock, _XA_KWM_MODULE_DOCKWIN_ADD, + window); + } +} + + +static void +removeDockWindow(WScreen *scr, Window window) +{ + if (!KWMDockWindows) + return; + + if (KWMDockWindows->window == window) { + KWMModuleList *next; + + sendClientMessage(scr, scr->kwm_dock, _XA_KWM_MODULE_DOCKWIN_REMOVE, + window); + + next = KWMDockWindows->next; + free(KWMDockWindows); + KWMDockWindows = next; + + } else { + KWMModuleList *ptr, *next; + + ptr = KWMDockWindows; + while (ptr->next) { + if (ptr->next->window == window) { + sendClientMessage(scr, scr->kwm_dock, + _XA_KWM_MODULE_DOCKWIN_REMOVE, window); + next = ptr->next->next; + free(ptr->next); + ptr->next = next; + return; + } + ptr = ptr->next; + } + } +} + + +static void +sendToModules(WScreen *scr, Atom atom, WWindow *wwin, long data) +{ + KWMModuleList *ptr; + XEvent event; + long mask; + + if (wwin) { + if (wwin->flags.kwm_hidden_for_modules + || WFLAGP(wwin, skip_window_list)) + return; + data = wwin->client_win; + } +#ifdef DEBUG1 + printf("notifying %s\n",XGetAtomName(dpy, atom)); +#endif + memset(&event, 0, sizeof(XEvent)); + event.xclient.type = ClientMessage; + event.xclient.message_type = atom; + event.xclient.format = 32; + event.xclient.data.l[1] = LastTimestamp; + + mask = 0; + if (scr && scr->root_win == data) + mask = SubstructureRedirectMask; + + for (ptr = KWMModules; ptr!=NULL; ptr = ptr->next) { + event.xclient.window = ptr->window; + event.xclient.data.l[0] = data; + XSendEvent(dpy, ptr->window, False, mask, &event); + } +} + + +void +wKWMInitStuff(WScreen *scr) +{ + if (!_XA_KWM_WIN_STICKY) { + _XA_KWM_WIN_UNSAVED_DATA = XInternAtom(dpy, "KWM_WIN_UNSAVED_DATA", + False); + + _XA_KWM_WIN_DECORATION = XInternAtom(dpy, "KWM_WIN_DECORATION", False); + + _XA_KWM_WIN_DESKTOP = XInternAtom(dpy, "KWM_WIN_DESKTOP", False); + + _XA_KWM_WIN_GEOMETRY_RESTORE = XInternAtom(dpy, + "KWM_WIN_GEOMETRY_RESTORE", + False); + + _XA_KWM_WIN_STICKY = XInternAtom(dpy, "KWM_WIN_STICKY", False); + + _XA_KWM_WIN_ICONIFIED = XInternAtom(dpy, "KWM_WIN_ICONIFIED", False); + + _XA_KWM_WIN_MAXIMIZED = XInternAtom(dpy, "KWM_WIN_MAXIMIZED", False); + + _XA_KWM_COMMAND = XInternAtom(dpy, "KWM_COMMAND", False); + + _XA_KWM_ACTIVE_WINDOW = XInternAtom(dpy, "KWM_ACTIVE_WINDOW", False); + + _XA_KWM_ACTIVATE_WINDOW = XInternAtom(dpy, "KWM_ACTIVATE_WINDOW", + False); + + _XA_KWM_DO_NOT_MANAGE = XInternAtom(dpy, "KWM_DO_NOT_MANAGE", False); + + _XA_KWM_CURRENT_DESKTOP = XInternAtom(dpy, "KWM_CURRENT_DESKTOP", + False); + + _XA_KWM_NUMBER_OF_DESKTOPS = XInternAtom(dpy, "KWM_NUMBER_OF_DESKTOPS", + False); + + _XA_KWM_DOCKWINDOW = XInternAtom(dpy, "KWM_DOCKWINDOW", False); + + _XA_KWM_RUNNING = XInternAtom(dpy, "KWM_RUNNING", False); + + _XA_KWM_MODULE = XInternAtom(dpy, "KWM_MODULE", False); + + _XA_KWM_MODULE_INIT = XInternAtom(dpy, "KWM_MODULE_INIT", False); + _XA_KWM_MODULE_DESKTOP_CHANGE = XInternAtom(dpy, "KWM_MODULE_DESKTOP_CHANGE", False); + _XA_KWM_MODULE_DESKTOP_NAME_CHANGE = XInternAtom(dpy, "KWM_MODULE_DESKTOP_NAME_CHANGE", False); + _XA_KWM_MODULE_DESKTOP_NUMBER_CHANGE = XInternAtom(dpy, "KWM_MODULE_DESKTOP_NUMBER_CHANGE", False); + _XA_KWM_MODULE_WIN_ADD = XInternAtom(dpy, "KWM_MODULE_WIN_ADD", False); + _XA_KWM_MODULE_WIN_REMOVE = XInternAtom(dpy, "KWM_MODULE_WIN_REMOVE", False); + _XA_KWM_MODULE_WIN_CHANGE = XInternAtom(dpy, "KWM_MODULE_WIN_CHANGE", False); + _XA_KWM_MODULE_WIN_RAISE = XInternAtom(dpy, "KWM_MODULE_WIN_RAISE", False); + _XA_KWM_MODULE_WIN_LOWER = XInternAtom(dpy, "KWM_MODULE_WIN_LOWER", False); + _XA_KWM_MODULE_WIN_ACTIVATE = XInternAtom(dpy, "KWM_MODULE_WIN_ACTIVATE", False); + _XA_KWM_MODULE_WIN_ICON_CHANGE = XInternAtom(dpy, "KWM_MODULE_WIN_ICON_CHANGE", False); + _XA_KWM_MODULE_DOCKWIN_ADD = XInternAtom(dpy, "KWM_MODULE_DOCKWIN_ADD", False); + _XA_KWM_MODULE_DOCKWIN_REMOVE = XInternAtom(dpy, "KWM_MODULE_DOCKWIN_REMOVE", False); + + memset(_XA_KWM_WINDOW_REGION_, 0, sizeof(_XA_KWM_WINDOW_REGION_)); + + memset(_XA_KWM_DESKTOP_NAME_, 0, sizeof(_XA_KWM_DESKTOP_NAME_)); + } + +#define SETSTR(hint, str) {\ + static Atom a = 0; if (!a) a = XInternAtom(dpy, #hint, False);\ + XChangeProperty(dpy, scr->root_win, a, XA_STRING, 8, PropModeReplace,\ + (unsigned char*)str, strlen(str));} + + SETSTR(KWM_STRING_MAXIMIZE, _("Maximize")); + SETSTR(KWM_STRING_UNMAXIMIZE, _("Unmaximize")); + SETSTR(KWM_STRING_ICONIFY, _("Miniaturize")); + SETSTR(KWM_STRING_UNICONIFY, _("Deminiaturize")); + SETSTR(KWM_STRING_STICKY, _("Omnipresent")); + SETSTR(KWM_STRING_UNSTICKY, _("Not Omnipresent")); + SETSTR(KWM_STRING_STRING_MOVE, _("Move")); + SETSTR(KWM_STRING_STRING_RESIZE, _("Resize")); + SETSTR(KWM_STRING_CLOSE, _("Close")); + SETSTR(KWM_STRING_TODESKTOP, _("Move To")); + SETSTR(KWM_STRING_ONTOCURRENTDESKTOP, _("Bring Here")); +#undef SETSTR +} + + +void +wKWMSendStacking(WScreen *scr, Window module) +{ + int i; + WCoreWindow *core; + + for (i = 0; i < MAX_WINDOW_LEVELS; i++) { + for (core = scr->stacking_list[i]; core != NULL; + core = core->stacking->under) { + WWindow *wwin; + + wwin = wWindowFor(core->window); + if (wwin) + sendClientMessage(scr, module, _XA_KWM_MODULE_WIN_RAISE, + wwin->client_win); + } + } +} + + +char* +wKWMGetWorkspaceName(WScreen *scr, int workspace) +{ + Atom type_ret; + int fmt_ret; + unsigned long nitems_ret; + unsigned long bytes_after_ret; + char *data = NULL, *tmp; + char buffer[64]; + + assert(workspace >= 0 && workspace < MAX_WORKSPACES); + + if (_XA_KWM_DESKTOP_NAME_[workspace]==0) { + sprintf(buffer, "KWM_DESKTOP_NAME_%d", workspace + 1); + + _XA_KWM_DESKTOP_NAME_[workspace] = XInternAtom(dpy, buffer, False); + } + + /* What do these people have against correctly using property types? */ + if (XGetWindowProperty(dpy, scr->root_win, + _XA_KWM_DESKTOP_NAME_[workspace], 0, 128, False, + XA_STRING, + &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, + (unsigned char**)&data)!=Success || !data) + return NULL; + + tmp = wstrdup(data); + XFree(data); + + return tmp; +} + + +void +wKWMSetInitializedHint(WScreen *scr) +{ + setSimpleHint(scr->root_win, _XA_KWM_RUNNING, 1); +} + + +void +wKWMShutdown(WScreen *scr) +{ + KWMModuleList *ptr; + + XDeleteProperty(dpy, scr->root_win, _XA_KWM_RUNNING); + + for (ptr = KWMModules; ptr != NULL; ptr = ptr->next) { + XKillClient(dpy, ptr->window); + } +} + + +void +wKWMCheckClientHints(WWindow *wwin, int *workspace) +{ + long val; + + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_UNSAVED_DATA, &val) + && val) { + + wwin->client_flags.broken_close = 1; + } + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_DECORATION, &val)) { + if (val & KWMnoFocus) { + wwin->client_flags.no_focusable = 1; + } + switch (val & ~KWMnoFocus) { + case KWMnoDecoration: + wwin->client_flags.no_titlebar = 1; + wwin->client_flags.no_resizebar = 1; + break; + case KWMtinyDecoration: + wwin->client_flags.no_resizebar = 1; + break; + case KWMnormalDecoration: + default: + break; + } + } + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_DESKTOP, &val)) { + *workspace = val; + } +} + + +void +wKWMCheckClientInitialState(WWindow *wwin) +{ + long val; + + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_STICKY, &val) && val) { + + wwin->client_flags.omnipresent = 1; + } + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_ICONIFIED, &val) + && val) { + + wwin->flags.miniaturized = 1; + } + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, &val) + && val) { + + wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL; + } +} + + +Bool +wKWMCheckClientHintChange(WWindow *wwin, XPropertyEvent *event) +{ + Bool processed = True; + Bool flag; + long value; + + + if (!wwin->frame) { + return False; + } + + if (event->atom == _XA_KWM_WIN_UNSAVED_DATA) { +#ifdef DEBUG1 + printf("got KDE unsaved data change\n"); +#endif + + flag = getSimpleHint(wwin->client_win, _XA_KWM_WIN_UNSAVED_DATA, + &value) && value; + + if (flag != wwin->client_flags.broken_close) { + wwin->client_flags.broken_close = flag; + if (wwin->frame) + wWindowUpdateButtonImages(wwin); + } + } else if (event->atom == _XA_KWM_WIN_STICKY) { + +#ifdef DEBUG1 + printf("got KDE sticky change\n"); +#endif + flag = !getSimpleHint(wwin->client_win, _XA_KWM_WIN_STICKY, + &value) || value; + + if (flag != wwin->client_flags.omnipresent) { + + wwin->client_flags.omnipresent = flag; + + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_WORKSPACE); + + } + } else if (event->atom == _XA_KWM_WIN_MAXIMIZED) { + +#ifdef DEBUG1 + printf("got KDE maximize change\n"); +#endif + flag = !getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, + &value) || value; + + if (flag != (wwin->flags.maximized!=0)) { + + if (flag) + wMaximizeWindow(wwin, flag*(MAX_VERTICAL|MAX_HORIZONTAL)); + else + wUnmaximizeWindow(wwin); + } + } else if (event->atom == _XA_KWM_WIN_ICONIFIED) { + +#ifdef DEBUG1 + printf("got KDE iconify change\n"); +#endif + flag = !getSimpleHint(wwin->client_win, _XA_KWM_WIN_ICONIFIED, + &value) || value; + + if (flag != wwin->flags.miniaturized) { + + if (flag) + wIconifyWindow(wwin); + else + wDeiconifyWindow(wwin); + } + + } else if (event->atom == _XA_KWM_WIN_DECORATION) { + Bool refresh = False; + int oldnofocus; + +#ifdef DEBUG1 + printf("got KDE decoration change\n"); +#endif + + oldnofocus = wwin->client_flags.no_focusable; + + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_DECORATION, &value)) { + wwin->client_flags.no_focusable = (value & KWMnoFocus)!=0; + + switch (value & ~KWMnoFocus) { + case KWMnoDecoration: + if (!WFLAGP(wwin, no_titlebar) || !WFLAGP(wwin, no_resizebar)) + refresh = True; + + wwin->client_flags.no_titlebar = 1; + wwin->client_flags.no_resizebar = 1; + break; + + case KWMtinyDecoration: + if (WFLAGP(wwin, no_titlebar) || !WFLAGP(wwin, no_resizebar)) + refresh = True; + + wwin->client_flags.no_titlebar = 0; + wwin->client_flags.no_resizebar = 1; + break; + + case KWMnormalDecoration: + default: + if (WFLAGP(wwin, no_titlebar) || WFLAGP(wwin, no_resizebar)) + refresh = True; + + wwin->client_flags.no_titlebar = 0; + wwin->client_flags.no_resizebar = 0; + break; + } + } else { + if (WFLAGP(wwin, no_titlebar) || WFLAGP(wwin, no_resizebar)) + refresh = True; + wwin->client_flags.no_focusable = (value & KWMnoFocus)!=0; + wwin->client_flags.no_titlebar = 0; + wwin->client_flags.no_resizebar = 0; + } + + if (refresh) + wWindowConfigureBorders(wwin); + + if (wwin->client_flags.no_focusable && !oldnofocus) { + + sendToModules(wwin->screen_ptr, _XA_KWM_MODULE_WIN_REMOVE, + wwin, 0); + wwin->flags.kwm_hidden_for_modules = 1; + + } else if (!wwin->client_flags.no_focusable && oldnofocus) { + + if (wwin->flags.kwm_hidden_for_modules) { + sendToModules(wwin->screen_ptr, _XA_KWM_MODULE_WIN_ADD, + wwin, 0); + wwin->flags.kwm_hidden_for_modules = 0; + } + } + } else if (event->atom == _XA_KWM_WIN_DESKTOP && wwin->frame) { +#ifdef DEBUG1 + printf("got KDE workspace change for %s\n", wwin->frame->title); +#endif + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_DESKTOP, &value) + && value-1 != wwin->frame->workspace) { + wWindowChangeWorkspace(wwin, value-1); + } + + } else if (event->atom == _XA_KWM_WIN_GEOMETRY_RESTORE) { + WArea area; + +#ifdef DEBUG1 + printf("got KDE geometry restore change\n"); +#endif + if (getAreaHint(wwin->client_win, _XA_KWM_WIN_GEOMETRY_RESTORE, &area) + && (wwin->old_geometry.x != area.x1 + || wwin->old_geometry.y != area.y1 + || wwin->old_geometry.width != area.x2 - area.x1 + || wwin->old_geometry.height != area.y2 - area.y1)) { + + wwin->old_geometry.x = area.x1; + wwin->old_geometry.y = area.y1; + wwin->old_geometry.width = area.x2 - area.x1; + wwin->old_geometry.height = area.y2 - area.y1; + } + } else { + processed = False; + } + + return processed; +} + + +static Bool +performWindowCommand(WScreen *scr, char *command) +{ + WWindow *wwin = NULL; + + + wwin = scr->focused_window; + if (!wwin || !wwin->flags.focused || !wwin->flags.mapped) { + wwin = NULL; + } + + CloseWindowMenu(scr); + + + if (strcmp(command, "winMove")==0 || strcmp(command, "winResize")==0) { + + if (wwin) + wKeyboardMoveResizeWindow(wwin); + + } else if (strcmp(command, "winMaximize")==0) { + + if (wwin) + wMaximizeWindow(wwin, MAX_VERTICAL|MAX_HORIZONTAL); + + } else if (strcmp(command, "winRestore")==0) { + + if (wwin && wwin->flags.maximized) + wUnmaximizeWindow(wwin); + + } else if (strcmp(command, "winIconify")==0) { + + + if (wwin && !WFLAGP(wwin, no_miniaturizable)) { + if (wwin->protocols.MINIATURIZE_WINDOW) + wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW, + LastTimestamp); + else { + wIconifyWindow(wwin); + } + } + + } else if (strcmp(command, "winClose")==0) { + + if (wwin && !WFLAGP(wwin, no_closable)) { + if (wwin->protocols.DELETE_WINDOW) + wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW, LastTimestamp); + } + + } else if (strcmp(command, "winSticky")==0) { + + if (wwin) { + wwin->client_flags.omnipresent ^= 1; + UpdateSwitchMenu(scr, wwin, ACTION_CHANGE_WORKSPACE); + } + + } else if (strcmp(command, "winShade")==0) { + + if (wwin && !WFLAGP(wwin, no_shadeable)) { + if (wwin->flags.shaded) + wUnshadeWindow(wwin); + else + wShadeWindow(wwin); + } + + } else if (strcmp(command, "winOperation")==0) { + + if (wwin) + OpenWindowMenu(wwin, wwin->frame_x, + wwin->frame_y+wwin->frame->top_width, True); + + } else { + return False; + } + + return True; +} + + +static void +performCommand(WScreen *scr, char *command, XClientMessageEvent *event) +{ + assert(scr != NULL); + + if (strcmp(command, "commandLine")==0 + || strcmp(command, "execute")==0) { + char *cmd; + + cmd = ExpandOptions(scr, _("%a(Run Command,Type the command to run")); + if (cmd) { + ExecuteShellCommand(scr, cmd); + free(cmd); + } + } else if (strcmp(command, "logout")==0) { + + Shutdown(WSLogoutMode); + + } else if (strcmp(command, "refreshScreen")==0) { + + wRefreshDesktop(scr); + + } else if (strncmp(command, "go:", 3)==0) { + + Shutdown(WSRestartPreparationMode); + Restart(&command[3]); + + } else if (strcmp(command, "desktop+1")==0) { + + wWorkspaceRelativeChange(scr, 1); + + } else if (strcmp(command, "desktop-1")==0) { + + wWorkspaceRelativeChange(scr, -1); + + } else if (strcmp(command, "desktop+2")==0) { + + wWorkspaceRelativeChange(scr, 2); + + } else if (strcmp(command, "desktop-2")==0) { + + wWorkspaceRelativeChange(scr, -2); + + } else if (strcmp(command, "desktop%%2")==0) { + + if (scr->current_workspace % 2 == 1) + wWorkspaceRelativeChange(scr, 1); + else + wWorkspaceRelativeChange(scr, -1); + } else if (strncmp(command, "desktop", 7)==0) { + int ws; + + ws = atoi(&command[7]); + wWorkspaceChange(scr, ws); + + /* wmaker specific stuff */ + } else if (strcmp(command, "wmaker:info")==0) { + + wShowInfoPanel(scr); + + } else if (strcmp(command, "wmaker:legal")==0) { + + wShowLegalPanel(scr); + + } else if (strcmp(command, "wmaker:arrangeIcons")==0) { + + wArrangeIcons(scr, True); + + } else if (strcmp(command, "wmaker:showAll")==0) { + + wShowAllWindows(scr); + + } else if (strcmp(command, "wmaker:hideOthers")==0) { + + wHideOtherApplications(scr->focused_window); + + } else if (strcmp(command, "wmaker:restart")==0) { + + Shutdown(WSRestartPreparationMode); + Restart(NULL); + + } else if (strcmp(command, "wmaker:exit")==0) { + + Shutdown(WSExitMode); + +#ifdef UNSUPPORTED_STUFF + } else if (strcmp(command, "moduleRaised")==0) { /* useless */ + } else if (strcmp(command, "deskUnclutter")==0) { + } else if (strcmp(command, "deskCascade")==0) { + } else if (strcmp(command, "configure")==0) { /* useless */ + } else if (strcmp(command, "taskManager")==0) { + } else if (strcmp(command, "darkenScreen")==0) { /* breaks consistency */ +#endif + } else if (!performWindowCommand(scr, command)) { + KWMModuleList *module; + long mask = 0; + XEvent ev; + /* do message relay thing */ + + ev.xclient = *event; + for (module = KWMModules; module != NULL; module = module->next) { + + ev.xclient.window = module->window; + if (module->window == scr->root_win) + mask = SubstructureRedirectMask; + else + mask = 0; + + XSendEvent(dpy, module->window, False, mask, &ev); + } + } +} + + +Bool +wKWMProcessClientMessage(XClientMessageEvent *event) +{ + Bool processed = True; + WScreen *scr; +#ifdef DEBUG1 + printf("CLIENT MESS %s\n", XGetAtomName(dpy, event->message_type)); +#endif + if (event->message_type == _XA_KWM_COMMAND && event->format==8) { + char buffer[24]; + int i; + + scr = wScreenForRootWindow(event->window); + + for (i=0; i<20; i++) { + buffer[i] = event->data.b[i]; + } + buffer[i] = 0; + +#ifdef DEBUG1 + printf("got KDE command %s\n", buffer); +#endif + performCommand(scr, buffer, event); + + } else if (event->message_type == _XA_KWM_ACTIVATE_WINDOW) { + WWindow *wwin; + +#ifdef DEBUG1 + printf("got KDE activate internal\n"); +#endif + wwin = wWindowFor(event->data.l[0]); + + if (wwin) + wSetFocusTo(wwin->screen_ptr, wwin); + + } else if (event->message_type == _XA_KWM_DO_NOT_MANAGE + && event->format == 8) { + KWMDoNotManageList *node; + int i; + +#ifdef DEBUG1 + printf("got KDE dont manage\n"); +#endif + + node = malloc(sizeof(KWMDoNotManageList)); + if (!node) { + wwarning("out of memory processing KWM_DO_NOT_MANAGE message"); + } + for (i=0; i<20 && event->data.b[i]; i++) + node->title[i] = event->data.b[i]; + node->title[i] = 0; + + node->next = KWMDoNotManageCrap; + KWMDoNotManageCrap = node; + + } else if (event->message_type == _XA_KWM_MODULE) { + long val; + Window modwin = event->data.l[0]; + + scr = wScreenForRootWindow(event->window); + + if (getSimpleHint(modwin, _XA_KWM_MODULE, &val) && val) { +#ifdef DEBUG1 + puts("got KDE module startup"); +#endif + addModule(scr, modwin); + } else { +#ifdef DEBUG1 + puts("got KDE module finish"); +#endif + removeModule(scr, modwin); + } + } else { + processed = False; + } + + return processed; +} + + +void +wKWMCheckModule(WScreen *scr, Window window) +{ + long val; + + if (getSimpleHint(window, _XA_KWM_MODULE, &val) && val) { +#ifdef DEBUG1 + puts("got KDE module startup"); +#endif + addModule(scr, window); + } +} + + +Bool +wKWMCheckRootHintChange(WScreen *scr, XPropertyEvent *event) +{ + Bool processed = True; + long value; + + if (event->atom == _XA_KWM_CURRENT_DESKTOP) { + if (getSimpleHint(scr->root_win, _XA_KWM_CURRENT_DESKTOP, &value)) { +#ifdef DEBUG1 + printf("got KDE workspace switch to %li\n", value); +#endif + if (value-1 != scr->current_workspace) { + wWorkspaceChange(scr, value-1); + } + } + } else if (event->atom == _XA_KWM_NUMBER_OF_DESKTOPS) { +#ifdef DEBUG1 + printf("got KDE workspace number change\n"); +#endif + + if (getSimpleHint(scr->root_win, _XA_KWM_NUMBER_OF_DESKTOPS, &value)) { + + /* increasing is easy... */ + if (value > scr->workspace_count) { + scr->flags.kwm_syncing_count = 1; + + wWorkspaceMake(scr, value - scr->workspace_count); + + scr->flags.kwm_syncing_count = 0; + + } else if (value < scr->workspace_count) { + int i; + Bool rebuild = False; + + scr->flags.kwm_syncing_count = 1; + + /* decrease all we can do */ + for (i = scr->workspace_count; i >= value; i--) { + if (!wWorkspaceDelete(scr, i)) { + rebuild = True; + break; + } + } + + scr->flags.kwm_syncing_count = 0; + + /* someone destroyed a workspace that can't be destroyed. + * Reset the hints to reflect our internal state. + */ + if (rebuild) { + wKWMUpdateWorkspaceCountHint(scr); + } + } + } + } else { + int i; + + processed = False; + + for (i = 0; i < MAX_WORKSPACES; i++) { + if (event->atom == _XA_KWM_DESKTOP_NAME_[i]) { + char *name; + + name = wKWMGetWorkspaceName(scr, i); + +#ifdef DEBUG1 + printf("got KDE workspace name change to %s\n", name); +#endif + + if (name && strncmp(name, scr->workspaces[i]->name, + MAX_WORKSPACENAME_WIDTH)!=0) { + scr->flags.kwm_syncing_name = 1; + wWorkspaceRename(scr, i, name); + scr->flags.kwm_syncing_name = 0; + } + if (name) + XFree(name); + processed = True; + break; + } else if (event->atom == _XA_KWM_WINDOW_REGION_[i]) { + WArea area; + + if (getAreaHint(scr->root_win, event->atom, &area)) { + + if (scr->totalUsableArea.x1 != area.x1 + || scr->totalUsableArea.y1 != area.y1 + || scr->totalUsableArea.x2 != area.x2 + || scr->totalUsableArea.y2 != area.y2) { + wScreenUpdateUsableArea(scr); + } + } + + processed = True; + break; + } + } + } + + return processed; +} + + +Bool +wKWMManageableClient(WScreen *scr, Window win, char *title) +{ + KWMDoNotManageList *ptr, *next; + long val; + + if (getSimpleHint(win, _XA_KWM_DOCKWINDOW, &val) && val) { + addDockWindow(scr, win); + return False; + } + + ptr = KWMDoNotManageCrap; + if (ptr && strncmp(ptr->title, title, strlen(ptr->title))==0) { + next = ptr->next; + free(ptr); + KWMDoNotManageCrap = next; +#ifdef DEBUG1 + printf("window %s not managed per KDE request\n", title); +#endif + + sendToModules(scr, _XA_KWM_MODULE_WIN_ADD, NULL, win); + sendToModules(scr, _XA_KWM_MODULE_WIN_REMOVE, NULL, win); + + return False; + } else if (ptr) { + while (ptr->next) { + if (strncmp(ptr->next->title, title, strlen(ptr->next->title))==0) { +#ifdef DEBUG1 + printf("window %s not managed per KDE request\n", title); +#endif + next = ptr->next->next; + free(ptr->next); + ptr->next = next; + + sendToModules(scr, _XA_KWM_MODULE_WIN_ADD, NULL, win); + sendToModules(scr, _XA_KWM_MODULE_WIN_REMOVE, NULL, win); + + return False; + } + + ptr = ptr->next; + } + } + + return True; +} + + +void +wKWMUpdateCurrentWorkspaceHint(WScreen *scr) +{ + setSimpleHint(scr->root_win, _XA_KWM_CURRENT_DESKTOP, + scr->current_workspace+1); + + sendToModules(scr, _XA_KWM_MODULE_DESKTOP_CHANGE, NULL, + scr->current_workspace+1); +} + + +void +wKWMUpdateActiveWindowHint(WScreen *scr) +{ + long val; + + if (!scr->focused_window || !scr->focused_window->flags.focused) + val = None; + else + val = (long)(scr->focused_window->client_win); + + XChangeProperty(dpy, scr->root_win, _XA_KWM_ACTIVE_WINDOW, + _XA_KWM_ACTIVE_WINDOW, 32, PropModeReplace, + (unsigned char*)&val, 1); + XFlush(dpy); +} + + +void +wKWMUpdateWorkspaceCountHint(WScreen *scr) +{ + if (scr->flags.kwm_syncing_count) + return; + + setSimpleHint(scr->root_win, _XA_KWM_NUMBER_OF_DESKTOPS, + scr->workspace_count); + + sendToModules(scr, _XA_KWM_MODULE_DESKTOP_NUMBER_CHANGE, NULL, + scr->workspace_count); +} + + +void +wKWMCheckDestroy(XDestroyWindowEvent *event) +{ + WScreen *scr; + + if (event->event == event->window) { + return; + } + + scr = wScreenForRootWindow(event->event); + if (!scr) { + return; + } + + removeModule(scr, event->window); + removeDockWindow(scr, event->window); +} + + +void +wKWMUpdateWorkspaceNameHint(WScreen *scr, int workspace) +{ + char buffer[64]; + + if (scr->flags.kwm_syncing_name) + return; + + assert(workspace >= 0 && workspace < MAX_WORKSPACES); + + if (_XA_KWM_DESKTOP_NAME_[workspace]==0) { + sprintf(buffer, "KWM_DESKTOP_NAME_%d", workspace + 1); + + _XA_KWM_DESKTOP_NAME_[workspace] = XInternAtom(dpy, buffer, False); + } + + XChangeProperty(dpy, scr->root_win, _XA_KWM_DESKTOP_NAME_[workspace], + XA_STRING, 8, PropModeReplace, + (unsigned char*)scr->workspaces[workspace]->name, + strlen(scr->workspaces[workspace]->name)+1); + + sendToModules(scr, _XA_KWM_MODULE_DESKTOP_NAME_CHANGE, NULL, workspace+1); +} + + + +void +wKWMUpdateClientWorkspace(WWindow *wwin) +{ +#ifdef DEBUG1 + printf("updating workspace of %s to %i\n", + wwin->frame->title, wwin->frame->workspace+1); +#endif + setSimpleHint(wwin->client_win, _XA_KWM_WIN_DESKTOP, + wwin->frame->workspace+1); +} + + +void +wKWMUpdateClientGeometryRestore(WWindow *wwin) +{ + WArea rect; + + rect.x1 = wwin->old_geometry.x; + rect.y1 = wwin->old_geometry.y; + rect.x2 = wwin->old_geometry.x + wwin->old_geometry.width; + rect.y2 = wwin->old_geometry.y + wwin->old_geometry.height; + + setAreaHint(wwin->client_win, _XA_KWM_WIN_GEOMETRY_RESTORE, rect); +} + + +void +wKWMUpdateClientState(WWindow *wwin, WKWMStateFlag flags) +{ + if (flags & KWMIconifiedFlag) { + setSimpleHint(wwin->client_win, _XA_KWM_WIN_ICONIFIED, + wwin->flags.miniaturized /*|| wwin->flags.shaded + || wwin->flags.hidden*/); + } + if (flags & KWMStickyFlag) { + setSimpleHint(wwin->client_win, _XA_KWM_WIN_STICKY, + IS_OMNIPRESENT(wwin)); + } + if (flags & KWMMaximizedFlag) { + setSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, + wwin->flags.maximized!=0); + } +} + + +Bool +wKWMGetUsableArea(WScreen *scr, WArea *area) +{ + char buffer[64]; + + if (_XA_KWM_WINDOW_REGION_[0]==0) { + sprintf(buffer, "KWM_WINDOW_REGION_%d", 1); + + _XA_KWM_WINDOW_REGION_[0] = XInternAtom(dpy, buffer, False); + } + + return getAreaHint(scr->root_win, _XA_KWM_WINDOW_REGION_[0], area); +} + + +void +wKWMSetUsableAreaHint(WScreen *scr, int workspace) +{ + /* if we set this after making changes of our own to the area, + * the next time the area changes, we won't know what should + * be the new final area. This protocol isn't worth a shit :/ + */ +#ifdef notdef + char buffer[64]; + + assert(workspace >= 0 && workspace < MAX_WORKSPACES); + + if (_XA_KWM_WINDOW_REGION_[workspace]==0) { + sprintf(buffer, "KWM_WINDOW_REGION_%d", workspace+1); + + _XA_KWM_WINDOW_REGION_[workspace] = XInternAtom(dpy, buffer, False); + } + + setAreaHint(scr->root_win, _XA_KWM_WINDOW_REGION_[workspace], + scr->totalUsableArea); +#endif +} + + +void +wKWMSendEventMessage(WWindow *wwin, WKWMEventMessage message) +{ + Atom msg; + + switch (message) { + case WKWMAddWindow: + msg = _XA_KWM_MODULE_WIN_ADD; + break; + case WKWMRemoveWindow: + msg = _XA_KWM_MODULE_WIN_REMOVE; + break; + case WKWMFocusWindow: + msg = _XA_KWM_MODULE_WIN_ACTIVATE; + break; + case WKWMRaiseWindow: + msg = _XA_KWM_MODULE_WIN_RAISE; + break; + case WKWMLowerWindow: + msg = _XA_KWM_MODULE_WIN_LOWER; + break; + case WKWMChangedClient: + msg = _XA_KWM_MODULE_WIN_CHANGE; + break; + case WKWMIconChange: + msg = _XA_KWM_MODULE_WIN_ICON_CHANGE; + break; + default: + return; + } + + sendToModules(wwin ? wwin->screen_ptr : NULL, msg, wwin, 0); +} + + +#endif /* KWM_HINTS */ diff --git a/src/kwm.h b/src/kwm.h new file mode 100644 index 00000000..ffa80791 --- /dev/null +++ b/src/kwm.h @@ -0,0 +1,93 @@ +/* kde.h-- stuff for support for kde hints + * + * Window Maker window manager + * + * Copyright (c) 1998, 1999 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifndef _KWM_H_ +#define _KWM_H_ + +typedef enum { + KWMStickyFlag = (1<<0), + KWMMaximizedFlag = (1<<1), + KWMIconifiedFlag = (1<<2), + KWMAllFlags = 7 +} WKWMStateFlag; + +typedef enum { + WKWMAddWindow, + WKWMRemoveWindow, + WKWMFocusWindow, + WKWMRaiseWindow, + WKWMLowerWindow, + WKWMChangedClient, + WKWMIconChange +} WKWMEventMessage; + + +void wKWMInitStuff(WScreen *scr); + +Bool wKWMGetUsableArea(WScreen *scr, WArea *area); + +void wKWMCheckClientHints(WWindow *wwin, long *workspace); + +Bool wKWMCheckClientHintChange(WWindow *wwin, XPropertyEvent *event); + +Bool wKWMCheckRootHintChange(WScreen *scr, XPropertyEvent *event); + +void wKWMUpdateWorkspaceCountHint(WScreen *scr); + +void wKWMUpdateWorkspaceNameHint(WScreen *scr, int workspace); + +void wKWMUpdateCurrentWorkspaceHint(WScreen *scr); + +Bool wKWMProcessClientMessage(XClientMessageEvent *event); + +void wKWMUpdateClientGeometryRestore(WWindow *wwin); + +void wKWMUpdateClientWorkspace(WWindow *wwin); + +void wKWMUpdateClientState(WWindow *wwin, WKWMStateFlag flags); + +Bool wKWMManageableClient(WScreen *scr, Window win, char *title); + +void wKWMCheckClientInitialState(WWindow *wwin); + +void wKWMSetUsableAreaHint(WScreen *scr, int workspace); + +void wKWMSetInitializedHint(WScreen *scr); + +void wKWMShutdown(WScreen *scr); + +void wKWMCheckModule(WScreen *scr, Window window); + +void wKWMSendWindowCreateMessage(WWindow *wwin, Bool create); + +void wKWMSendEventMessage(WWindow *wwin, WKWMEventMessage message); + +void wKWMCheckDestroy(XDestroyWindowEvent *event); + +void wKWMUpdateActiveWindowHint(WScreen *scr); + +void wKWMSendStacking(WScreen *scr, Window module); + +char *wKWMGetWorkspaceName(WScreen *scr, int workspace); + +#endif + diff --git a/src/main.c b/src/main.c index 58bf1fb5..51a131cf 100644 --- a/src/main.c +++ b/src/main.c @@ -101,11 +101,6 @@ Atom _XA_GNUSTEP_WM_ATTR; Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW; Atom _XA_GNUSTEP_WM_RESIZEBAR; -#ifdef MWM_HINTS -/* MWM support */ -Atom _XA_MOTIF_WM_HINTS; -#endif - Atom _XA_WINDOWMAKER_MENU; Atom _XA_WINDOWMAKER_WM_PROTOCOLS; Atom _XA_WINDOWMAKER_STATE; @@ -298,8 +293,6 @@ execInitScript() file = wfindfile(DEF_CONFIG_PATHS, DEF_INIT_SCRIPT); if (file) { if (fork()==0) { - CloseDescriptors(); - execl("/bin/sh", "/bin/sh", "-c", file, NULL); wsyserror(_("%s:could not execute initialization script"), file); exit(1); @@ -317,8 +310,6 @@ ExecExitScript() file = wfindfile(DEF_CONFIG_PATHS, DEF_EXIT_SCRIPT); if (file) { if (fork()==0) { - CloseDescriptors(); - execl("/bin/sh", "/bin/sh", "-c", file, NULL); wsyserror(_("%s:could not execute exit script"), file); exit(1); @@ -474,6 +465,11 @@ main(int argc, char **argv) exit(1); } + if (fcntl(ConnectionNumber(dpy), F_SETFD, FD_CLOEXEC) < 0) { + wsyserror("error setting close-on-exec flag for X connection"); + exit(1); + } + /* check if the user specified a complete display name (with screen). * If so, only manage the specified screen */ if (DisplayName) diff --git a/src/menu.c b/src/menu.c index 7735222c..d285396a 100644 --- a/src/menu.c +++ b/src/menu.c @@ -214,9 +214,9 @@ insertEntry(WMenu *menu, WMenuEntry *entry, int index) { int i; - for (i=menu->entry_no; i>index; i--) { + for (i = menu->entry_no-1; i >= index; i--) { menu->entries[i]->order++; - menu->entries[i+1]=menu->entries[i]; + menu->entries[i+1] = menu->entries[i]; } menu->entries[index] = entry; } @@ -496,24 +496,19 @@ wMenuRealize(WMenu *menu) wCoreConfigure(menu->menu, 0, theight, mwidth, menu->entry_no*eheight -1); - wFrameWindowResizeInternal(menu->frame, mwidth, menu->entry_no*eheight -1); + wFrameWindowResize(menu->frame, mwidth, menu->entry_no*eheight-1 + + menu->frame->top_width + menu->frame->bottom_width); /* setup background texture */ - switch (scr->menu_item_texture->any.type) { - case WTEX_DGRADIENT: - case WTEX_VGRADIENT: - case WTEX_HGRADIENT: - case WTEX_MHGRADIENT: - case WTEX_MVGRADIENT: - case WTEX_MDGRADIENT: - case WTEX_PIXMAP: + if (scr->menu_item_texture->any.type != WTEX_SOLID) { if (!menu->flags.brother) { FREE_PIXMAP(menu->menu_texture_data); wTextureRender(scr, scr->menu_item_texture, &menu->menu_texture_data, menu->menu->width, menu->entry_height, WREL_MENUENTRY); + XSetWindowBackgroundPixmap(dpy, menu->menu->window, menu->menu_texture_data); XClearWindow(dpy, menu->menu->window); @@ -522,9 +517,7 @@ wMenuRealize(WMenu *menu) menu->menu_texture_data); XClearWindow(dpy, menu->brother->menu->window); } - break; - - default: + } else { XSetWindowBackground(dpy, menu->menu->window, scr->menu_item_texture->any.color.pixel); XClearWindow(dpy, menu->menu->window); @@ -782,7 +775,7 @@ makeVisible(WMenu *menu) new_x = scr->scr_width - MENUW(menu) - 1; move = 1; } - + if (y1 < 0) { new_y = 0; move = 1; @@ -790,11 +783,10 @@ makeVisible(WMenu *menu) new_y = scr->scr_height - menu->entry_height - 1; move = 1; } - + new_y = new_y - menu->frame->top_width - menu->selected_entry*menu->entry_height; move_menus(menu, new_x, new_y); - } @@ -1531,7 +1523,7 @@ getScrollAmount(WMenu *menu, int *hamount, int *vamount) } else if (yroot >= screenH-2 && menuY2 > screenH-1) { /* scroll up */ - *vamount = MIN(MENU_SCROLL_STEP, abs(menuY2-screenH-1)); + *vamount = MIN(MENU_SCROLL_STEP, abs(menuY2-screenH-2)); *vamount = -*vamount; } @@ -1862,10 +1854,13 @@ menuMouseDown(WObjDescriptor *desc, XEvent *event) prevy = bev->y_root; while (!done) { int x, y; + + XAllowEvents(dpy, SyncPointer, CurrentTime); + WMMaskEvent(dpy, ExposureMask|ButtonMotionMask|ButtonReleaseMask |ButtonPressMask, &ev); switch (ev.type) { - case MotionNotify: + case MotionNotify: smenu = findMenu(scr, &x, &y); if (smenu == NULL) { @@ -2156,15 +2151,16 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) int x=menu->frame_x, y=menu->frame_y; int dx=event->xbutton.x_root, dy=event->xbutton.y_root; int i, lower; - + Bool started; + #ifdef DEBUG printf("Moving menu\n"); #endif - + /* can't touch the menu copy */ if (menu->flags.brother) return; - + if (event->xbutton.button != Button1 && event->xbutton.button != Button2) return; if (XGrabPointer(dpy, menu->frame->titlebar->window, False, @@ -2176,6 +2172,7 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) #endif return; } + if (event->xbutton.state & MOD_MASK) { wLowerFrame(menu->frame->core); lower = 1; @@ -2184,10 +2181,11 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) lower = 0; } tmp = menu; - + /* lower/raise all submenus */ while (1) { - if (tmp->selected_entry>=0 && tmp->cascades) { + if (tmp->selected_entry>=0 && tmp->cascades + && tmp->entries[tmp->selected_entry]->cascade>=0) { tmp = tmp->cascades[tmp->entries[tmp->selected_entry]->cascade]; if (!tmp || !tmp->flags.mapped) break; @@ -2199,6 +2197,7 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) break; } } + /* tear off the menu if it's a root menu or a cascade application menu */ if (!menu->flags.buttoned && !menu->flags.brother @@ -2218,17 +2217,24 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) } } } - + + started = False; while(1) { WMMaskEvent(dpy, ButtonMotionMask|ButtonReleaseMask|ButtonPressMask |ExposureMask, &ev); switch (ev.type) { case MotionNotify: - x += ev.xmotion.x_root - dx; - y += ev.xmotion.y_root - dy; - dx = ev.xmotion.x_root; - dy = ev.xmotion.y_root; - wMenuMove(menu, x, y, True); + if (started) { + x += ev.xmotion.x_root - dx; + y += ev.xmotion.y_root - dy; + dx = ev.xmotion.x_root; + dy = ev.xmotion.y_root; + wMenuMove(menu, x, y, True); + } else { + if (abs(ev.xmotion.x_root - dx) > MOVE_THRESHOLD + || abs(ev.xmotion.y_root - dy) > MOVE_THRESHOLD) + started = True; + } break; case ButtonPress: @@ -2242,9 +2248,10 @@ menuTitleMouseDown(WCoreWindow *sender, void *data, XEvent *event) #endif XUngrabPointer(dpy, CurrentTime); return; - + default: WMHandleEvent(&ev); + break; } } } @@ -2291,6 +2298,7 @@ wMenuSaveState(WScreen *scr) menus = PLMakeDictionaryFromEntries(NULL, NULL, NULL); +#ifndef LITE if (scr->root_menu && scr->root_menu->flags.buttoned) { sprintf(buffer, "%i,%i", scr->root_menu->frame_x, scr->root_menu->frame_y); @@ -2312,7 +2320,7 @@ wMenuSaveState(WScreen *scr) PLRelease(value); save_menus = 1; } - +#endif /* !LITE */ if (scr->workspace_menu && scr->workspace_menu->flags.buttoned) { sprintf(buffer, "%i,%i", scr->workspace_menu->frame_x, scr->workspace_menu->frame_y); @@ -2353,15 +2361,16 @@ restoreMenu(WScreen *scr, proplist_t menu, int which) if (sscanf(PLGetString(menu), "%i,%i", &x, &y)!=2) COMPLAIN("Position"); +#ifndef LITE if (which & WSS_ROOTMENU) { OpenRootMenu(scr, x, y, False); pmenu = scr->root_menu; - } - else if (which & WSS_SWITCHMENU) { + } else if (which & WSS_SWITCHMENU) { OpenSwitchMenu(scr, x, y, False); pmenu = scr->switch_menu; - } - else if (which & WSS_WSMENU) { + } else +#endif /* !LITE */ + if (which & WSS_WSMENU) { OpenWorkspaceMenu(scr, x, y); pmenu = scr->workspace_menu; if (pmenu->parent) { @@ -2428,11 +2437,12 @@ OpenWorkspaceMenu(WScreen *scr, int x, int y) WMenu *menu, *parent; WMenuEntry *entry; +#ifndef LITE if (!scr->root_menu) { OpenRootMenu(scr, scr->scr_width*2, 0, False); wMenuUnmap(scr->root_menu); } - +#endif menu = scr->workspace_menu; if (menu) { if (menu->flags.mapped) { diff --git a/src/misc.c b/src/misc.c index de1455b5..2ad83acf 100644 --- a/src/misc.c +++ b/src/misc.c @@ -206,8 +206,7 @@ NextFocusWindow(WScreen *scr) d = 0xffffffff; while (tmp) { if (wWindowCanReceiveFocus(tmp) - && (!tmp->window_flags.skip_window_list - || tmp->flags.internal_window)) { + && (!WFLAGP(tmp, skip_window_list)|| tmp->flags.internal_window)) { if (min->client_win > tmp->client_win) min = tmp; if (tmp->client_win > wwin->client_win @@ -239,8 +238,7 @@ PrevFocusWindow(WScreen *scr) d = 0xffffffff; while (tmp) { if (wWindowCanReceiveFocus(tmp) && - (!tmp->window_flags.skip_window_list - || tmp->flags.internal_window)) { + (!WFLAGP(tmp, skip_window_list) || tmp->flags.internal_window)) { if (max->client_win < tmp->client_win) max = tmp; if (tmp->client_win < wwin->client_win @@ -276,7 +274,7 @@ isBelow(WWindow *win1, WWindow *win2) tmp = tmp->stacking->under; } - for (i=win1->frame->window_level-1; i>=0; i--) { + for (i=win1->frame->core->stacking->window_level-1; i>=0; i--) { tmp = win1->screen_ptr->stacking_list[i]; while (tmp) { if (tmp == win2->frame->core) @@ -564,19 +562,20 @@ ShrinkString(WFont *font, char *string, int width) char* -FindImage(char **paths, char *file) +FindImage(char *paths, char *file) { char *tmp, *path; - + tmp = strrchr(file, ':'); if (tmp) { *tmp = 0; - path = wfindfileinlist(paths, file); + path = wfindfile(paths, file); *tmp = ':'; } if (!tmp || !path) { - path = wfindfileinlist(paths, file); + path = wfindfile(paths, file); } + return path; } @@ -604,7 +603,8 @@ FlattenStringList(char **list, int count) *flat_string = 0; for (i=0; i<count; i++) { if (list[i]!=NULL && list[i][0]!=0) { - strcat(flat_string, " "); + if (i>0) + strcat(flat_string, " "); wspace = strpbrk(list[i], " \t"); if (wspace) strcat(flat_string, "\""); @@ -780,31 +780,82 @@ static char* getuserinput(WScreen *scr, char *line, int *ptr) { char *ret; - char *tmp; - int i; - char buffer[256]; - - if (line[*ptr]!='(') { - tmp = _("Program Arguments"); - } else { - i = 0; - while (line[*ptr]!=0 && line[*ptr]!=')') { - (*ptr)++; - if (line[*ptr]!='\\') { - buffer[i++] = line[*ptr]; + char *title; + char *prompt; + int i, j, k, state; + char tbuffer[256], pbuffer[256]; + + title = _("Program Arguments"); + prompt = _("Enter command arguments:"); + ret = NULL; + +#define _STARTING 0 +#define _TITLE 1 +#define _PROMPT 2 +#define _DONE 3 + + state = _STARTING; + j = 0; + for (i = 0; line[i]==0 && state!=_DONE; i++) { + switch (state) { + case _STARTING: + if (line[i]=='(') { + state = _TITLE; } else { - (*ptr)++; - if (line[*ptr]==0) - break; + state = _DONE; } + break; + + case _TITLE: + if (j <= 0 && line[i]==',') { + + j = 0; + if (i > 1) { + strncpy(tbuffer, &line[1], WMIN(i, 255)); + tbuffer[WMIN(i, 255)] = 0; + title = (char*)tbuffer; + } + k = i+1; + state = _PROMPT; + + } else if (j <= 0 && line[i]==')') { + + if (i > 1) { + strncpy(tbuffer, &line[1], WMIN(i, 255)); + tbuffer[WMIN(i, 255)] = 0; + title = (char*)tbuffer; + } + state = _DONE; + + } else if (line[i]=='(') + j++; + else if (line[i]==')') + j--; + + break; + + case _PROMPT: + if (line[i]==')' && j==0) { + + if (i-k > 1) { + strncpy(pbuffer, &line[k], WMIN(i-k, 255)); + pbuffer[WMIN(i-k, 255)] = 0; + title = (char*)pbuffer; + } + state = _DONE; + } else if (line[i]=='(') + j++; + else if (line[i]==')') + j--; + break; } - if (i>0) - buffer[i-1] = 0; - tmp = (char*)buffer; } +#undef _STARTING +#undef _TITLE +#undef _PROMPT +#undef _DONE - ret = NULL; - if (!wInputDialog(scr, tmp, _("Enter command arguments:"), &ret)) + if (!wInputDialog(scr, title, prompt, &ret)) return NULL; else return ret; @@ -1302,3 +1353,73 @@ UnescapeWM_CLASS(char *str, char **name, char **class) *class = NULL; } } + + + +void +SendHelperMessage(WScreen *scr, char type, int workspace, char *msg) +{ + unsigned char *buffer; + int len; + int i; + char buf[16]; + + if (!scr->flags.backimage_helper_launched) { + return; + } + + len = (msg ? strlen(msg) : 0) + (workspace >=0 ? 4 : 0) + 1 ; + buffer = wmalloc(len+5); + sprintf(buf, "%4i", len); + memcpy(buffer, buf, 4); + buffer[4] = type; + i = 5; + if (workspace >= 0) { + sprintf(buf, "%4i", workspace); + memcpy(&buffer[i], buf, 4); + i += 4; + buffer[i] = 0; + } + if (msg) + strcpy(&buffer[i], msg); + + if (write(scr->helper_fd, buffer, len+4) < 0) { + wsyserror(_("could not send message to background image helper")); + } + free(buffer); +} + + +void +ExecuteShellCommand(WScreen *scr, char *command) +{ + static char *shell = NULL; + pid_t pid; + + /* + * This have a problem: if the shell is tcsh (not sure about others) + * and ~/.tcshrc have /bin/stty erase ^H somewhere on it, the shell + * will block and the command will not be executed. + if (!shell) { + shell = getenv("SHELL"); + if (!shell) + shell = "/bin/sh"; + } + */ + shell = "/bin/sh"; + + pid = fork(); + if (pid==0) { + + SetupEnvironment(scr); + +#ifdef HAVE_SETPGID + setpgid(0, 0); +#endif + execl(shell, shell, "-c", command, NULL); + wsyserror("could not execute %s -c %s", shell, command); + Exit(-1); + } else if (pid < 0) { + wsyserror("cannot fork a new process"); + } +} diff --git a/src/motif.c b/src/motif.c new file mode 100644 index 00000000..46b6da94 --- /dev/null +++ b/src/motif.c @@ -0,0 +1,258 @@ +/* motif.c-- stuff for support for mwm hints + * + * Window Maker window manager + * + * Copyright (c) 1998, 1999 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + + +#include "wconfig.h" + +#ifdef MWM_HINTS + +#include <X11/Xlib.h> +#include <X11/Xutil.h> + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + + +#include "WindowMaker.h" + +#include "wcore.h" +#include "framewin.h" +#include "window.h" +#include "properties.h" +#include "icon.h" +#include "client.h" +#include "funcs.h" + +#include "motif.h" + + +/* Motif window hints */ +#define MWM_HINTS_FUNCTIONS (1L << 0) +#define MWM_HINTS_DECORATIONS (1L << 1) + +/* bit definitions for MwmHints.functions */ +#define MWM_FUNC_ALL (1L << 0) +#define MWM_FUNC_RESIZE (1L << 1) +#define MWM_FUNC_MOVE (1L << 2) +#define MWM_FUNC_MINIMIZE (1L << 3) +#define MWM_FUNC_MAXIMIZE (1L << 4) +#define MWM_FUNC_CLOSE (1L << 5) + +/* bit definitions for MwmHints.decorations */ +#define MWM_DECOR_ALL (1L << 0) +#define MWM_DECOR_BORDER (1L << 1) +#define MWM_DECOR_RESIZEH (1L << 2) +#define MWM_DECOR_TITLE (1L << 3) +#define MWM_DECOR_MENU (1L << 4) +#define MWM_DECOR_MINIMIZE (1L << 5) +#define MWM_DECOR_MAXIMIZE (1L << 6) + +#define PROP_MWM_HINTS_ELEMENTS 4 + +/* Motif window hints */ +typedef struct { + long flags; + long functions; + long decorations; + long inputMode; +} MWMHints; + +static Atom _XA_MOTIF_WM_HINTS; + + + +static void +setupMWMHints(WWindow *wwin, MWMHints *mwm_hints) +{ + /* + * We will ignore all decoration hints that have an equivalent as + * functions, because wmaker does not distinguish decoration hints + */ + + if (mwm_hints->flags & MWM_HINTS_DECORATIONS) { +# ifdef DEBUG + fprintf(stderr,"has decor hints [ "); +# endif + WSETUFLAG(wwin, no_titlebar, 1); + WSETUFLAG(wwin, no_close_button, 1); + WSETUFLAG(wwin, no_miniaturize_button, 1); + WSETUFLAG(wwin, no_resizebar, 1); + + if (mwm_hints->decorations & MWM_DECOR_ALL) { +# ifdef DEBUG + fprintf(stderr,"ALL "); +# endif + WSETUFLAG(wwin, no_titlebar, 0); + WSETUFLAG(wwin, no_close_button, 0); + WSETUFLAG(wwin, no_closable, 0); + WSETUFLAG(wwin, no_miniaturize_button, 0); + WSETUFLAG(wwin, no_miniaturizable, 0); + WSETUFLAG(wwin, no_resizebar, 0); + WSETUFLAG(wwin, no_resizable, 0); + } +/* + if (mwm_hints->decorations & MWM_DECOR_BORDER) { +# ifdef DEBUG + fprintf(stderr,"(BORDER) "); +# endif + } + */ + + if (mwm_hints->decorations & MWM_DECOR_RESIZEH) { +# ifdef DEBUG + fprintf(stderr,"RESIZEH "); +# endif + WSETUFLAG(wwin, no_resizebar, 0); + } + + if (mwm_hints->decorations & MWM_DECOR_TITLE) { +# ifdef DEBUG + fprintf(stderr,"TITLE+close "); +# endif + WSETUFLAG(wwin, no_titlebar, 0); + WSETUFLAG(wwin, no_close_button, 0); + WSETUFLAG(wwin, no_closable, 0); + } +/* + if (mwm_hints->decorations & MWM_DECOR_MENU) { +# ifdef DEBUG + fprintf(stderr,"(MENU) "); +# endif + } + */ + + if (mwm_hints->decorations & MWM_DECOR_MINIMIZE) { +# ifdef DEBUG + fprintf(stderr,"MINIMIZE "); +# endif + WSETUFLAG(wwin, no_miniaturize_button, 0); + WSETUFLAG(wwin, no_miniaturizable, 0); + } +/* + if (mwm_hints->decorations & MWM_DECOR_MAXIMIZE) { +# ifdef DEBUG + fprintf(stderr,"(MAXIMIZE) "); +# endif + } + */ +# ifdef DEBUG + fprintf(stderr,"]\n"); +# endif + } + + + if (mwm_hints->flags & MWM_HINTS_FUNCTIONS) { +# ifdef DEBUG + fprintf(stderr,"has function hints [ "); +# endif + WSETUFLAG(wwin, no_closable, 1); + WSETUFLAG(wwin, no_miniaturizable, 1); + WSETUFLAG(wwin, no_resizable, 1); + + if (mwm_hints->functions & MWM_FUNC_ALL) { +# ifdef DEBUG + fprintf(stderr,"ALL "); +# endif + WSETUFLAG(wwin, no_closable, 0); + WSETUFLAG(wwin, no_miniaturizable, 0); + WSETUFLAG(wwin, no_resizable, 0); + } + if (mwm_hints->functions & MWM_FUNC_RESIZE) { +# ifdef DEBUG + fprintf(stderr,"RESIZE "); +# endif + WSETUFLAG(wwin, no_resizable, 0); + } + /* + if (mwm_hints->functions & MWM_FUNC_MOVE) { +# ifdef DEBUG + fprintf(stderr,"(MOVE) "); +# endif + } + */ + if (mwm_hints->functions & MWM_FUNC_MINIMIZE) { +# ifdef DEBUG + fprintf(stderr,"MINIMIZE "); +# endif + WSETUFLAG(wwin, no_miniaturizable, 0); + } + if (mwm_hints->functions & MWM_FUNC_MAXIMIZE) { +# ifdef DEBUG + fprintf(stderr,"MAXIMIZE "); + /* a window must be resizable to be maximizable */ + WSETUFLAG(wwin, no_resizable, 0); +# endif + } + if (mwm_hints->functions & MWM_FUNC_CLOSE) { +# ifdef DEBUG + fprintf(stderr,"CLOSE "); +# endif + WSETUFLAG(wwin, no_closable, 0); + } +# ifdef DEBUG + fprintf(stderr,"]\n"); +# endif + } +} + + +static int +getMWMHints(Window window, MWMHints *mwmhints) +{ + unsigned long *data; + + if (!_XA_MOTIF_WM_HINTS) { + _XA_MOTIF_WM_HINTS = XInternAtom(dpy, "_MOTIF_WM_HINTS", False); + } + + data = (unsigned long*)PropGetCheckProperty(window, _XA_MOTIF_WM_HINTS, + _XA_MOTIF_WM_HINTS, 32, + PROP_MWM_HINTS_ELEMENTS, NULL); + + if (!data) + return 0; + + mwmhints->flags = data[0]; + mwmhints->functions = data[1]; + mwmhints->decorations = data[2]; + mwmhints->inputMode = data[3]; + + XFree(data); + + return 1; +} + + +void +wMWMCheckClientHints(WWindow *wwin) +{ + MWMHints hints; + + if (getMWMHints(wwin->client_win, &hints)) { + setupMWMHints(wwin, &hints); + } +} + + + +#endif /* MWM_HINTS */ diff --git a/src/workspace.h b/src/motif.h similarity index 50% copy from src/workspace.h copy to src/motif.h index 07963a4e..cc664ef6 100644 --- a/src/workspace.h +++ b/src/motif.h @@ -1,8 +1,8 @@ -/* workspace.c- Workspace management +/* motif.h-- stuff for support for mwm hints * * Window Maker window manager * - * Copyright (c) 1997, 1998 Alfredo K. Kojima + * Copyright (c) 1998, 1999 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 @@ -20,31 +20,10 @@ * USA. */ -#ifndef WMWORKSPACE_H_ -#define WMWORKSPACE_H_ +#ifndef WMMWM_H_ +#define WMMWM_H_ - -typedef struct WWorkspace { - char *name; - struct WDock *clip; -} WWorkspace; - -void wWorkspaceMake(WScreen *scr, int count); -int wWorkspaceNew(WScreen *scr); -void wWorkspaceDeleteLast(WScreen *scr); -void wWorkspaceChange(WScreen *scr, int workspace); -void wWorkspaceForceChange(WScreen *scr, int workspace); - - -WMenu *wWorkspaceMenuMake(WScreen *scr, Bool titled); -void wWorkspaceMenuUpdate(WScreen *scr, WMenu *menu); - -void wWorkspaceMenuEdit(WScreen *scr); - -void wWorkspaceSaveState(WScreen *scr, proplist_t old_state); -void wWorkspaceRestoreState(WScreen *scr); - -void wWorkspaceRename(WScreen *scr, int workspace, char *name); +void wMWMCheckClientHints(WWindow *wwin); #endif diff --git a/src/moveres.c b/src/moveres.c index c11e9457..58bc5859 100644 --- a/src/moveres.c +++ b/src/moveres.c @@ -33,6 +33,7 @@ #include "window.h" #include "client.h" #include "icon.h" +#include "dock.h" #include "funcs.h" #include "actions.h" #include "workspace.h" @@ -404,27 +405,39 @@ XUnmapWindow(dpy, (w)->screen_ptr->geometry_display); static void checkEdgeResistance(WWindow *wwin, int *winx, int *winy, int off_x, int off_y) { - int scr_width = wwin->screen_ptr->scr_width; + WScreen *scr = wwin->screen_ptr; + int scr_width = wwin->screen_ptr->scr_width - 3; int scr_height = wwin->screen_ptr->scr_height; int x = *winx; int y = *winy; int edge_resistance = wPreferences.edge_resistance; + int right_side = scr_width; + int left_side = 0; + int isize = wPreferences.icon_size; x -= off_x; y -= off_y; - if ((x + wwin->frame->core->width) >= (scr_width - 2)) { - if ((x + wwin->frame->core->width) < ((scr_width - 2) + if (scr->dock) + { + if (scr->dock->on_right_side) + right_side -= isize + DOCK_EXTRA_SPACE; + else + left_side += isize + DOCK_EXTRA_SPACE; + } + + if ((x + wwin->frame->core->width) >= right_side) { + if ((x + wwin->frame->core->width) < (right_side + edge_resistance)) { - x = scr_width - wwin->frame->core->width - 2; + x = right_side - wwin->frame->core->width; } else { x -= edge_resistance; } } - if (x <= 0) { - if (x > -edge_resistance) { - x = 0; + if (x <= left_side) { + if (x > (left_side - edge_resistance)) { + x = left_side; } else { x += edge_resistance; } @@ -497,10 +510,10 @@ drawTransparentFrame(WWindow *wwin, int x, int y, int width, int height) int h = 0; int bottom = 0; - if (!wwin->window_flags.no_titlebar && !wwin->flags.shaded) { + if (!WFLAGP(wwin, no_titlebar) && !wwin->flags.shaded) { h = wwin->screen_ptr->title_font->height + TITLEBAR_EXTRA_HEIGHT; } - if (!wwin->window_flags.no_resizebar && !wwin->flags.shaded) { + if (!WFLAGP(wwin, no_resizebar) && !wwin->flags.shaded) { /* Can't use wwin-frame->bottom_width because, in some cases (e.g. interactive placement), frame does not point to anything. */ bottom = RESIZEBAR_HEIGHT - 1; @@ -623,13 +636,276 @@ crossWorkspace(WScreen *scr, WWindow *wwin, int opaque_move, * The position display configuration may be changed. *---------------------------------------------------------------------- */ + +#if 0 +typedef struct _looper { + WWindow *wwin; + int x,y,w,h,ox,oy; +} _looper; + +void +_keyloop(_looper *lpr){ + WWindow *wwin = lpr->wwin; + WScreen *scr = wwin->screen_ptr; + int w = wwin->frame->core->width; + int h = wwin->frame->core->height; + int src_x = wwin->frame_x; + int src_y = wwin->frame_y; + + if (!scr->selected_windows){ + drawTransparentFrame(wwin, src_x+lpr->ox, src_y+lpr->oy, w, h); + } + XUngrabServer(dpy); + XSync(dpy, False); + usleep(10000); + XGrabServer(dpy); + printf("called\n"); + if (!scr->selected_windows){ + drawTransparentFrame(wwin, src_x+lpr->ox, src_y+lpr->oy, w, h); + } + /* reset timer */ + if(scr->keymove_tick) + WMAddTimerHandler(15000,(WMCallback*)_keyloop, lpr); +} + +#endif +#define _KS 20; + +int +wKeyboardMoveResizeWindow(WWindow *wwin) +{ + WScreen *scr = wwin->screen_ptr; + Window root = scr->root_win; + XEvent event; + int w = wwin->frame->core->width; + int h = wwin->frame->core->height; + int scr_width = wwin->screen_ptr->scr_width; + int scr_height = wwin->screen_ptr->scr_height; + int vert_border = wwin->frame->top_width + wwin->frame->bottom_width; + int src_x = wwin->frame_x; + int src_y = wwin->frame_y; + int done,off_x,off_y,ww,wh; + KeySym keysym=NoSymbol; + KeyCode shiftl,shiftr,ctrll,ctrlmode; + + /* + int timer; + _looper looper; + looper.wwin=wwin; + scr->keymove_tick=1; + WMAddTimerHandler(1000,(WMCallback*)_keyloop, &looper); + */ + + shiftl = XKeysymToKeycode(dpy, XK_Shift_L); + shiftr = XKeysymToKeycode(dpy, XK_Shift_R); + ctrll = XKeysymToKeycode(dpy, XK_Control_L); + ctrlmode=done=off_x=off_y=0; + + XSync(dpy, False); + usleep(10000); + XGrabKeyboard(dpy, root, False, GrabModeAsync, GrabModeAsync, CurrentTime); + + if (!wwin->flags.selected) { + wUnselectWindows(scr); + } + XGrabServer(dpy); + if (!scr->selected_windows){ + drawTransparentFrame(wwin, src_x, src_y, w, h); + mapPositionDisplay(wwin, src_x, src_y, w, h); + } else { + drawFrames(wwin,scr->selected_windows,0,0,0,0); + } + ww=w; + wh=h; + while(1) { + /* + looper.ox=off_x; + looper.oy=off_y; + */ + WMMaskEvent(dpy, KeyPressMask | ButtonReleaseMask + | ButtonPressMask | ExposureMask, &event); + if (!scr->selected_windows){ + drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + else { + drawFrames(wwin,scr->selected_windows,off_x,off_y,0,0); + } + if(ctrlmode) + showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0); + switch (event.type) { + case KeyPress: + if (event.xkey.state & ControlMask){ + ctrlmode=1; + wUnselectWindows(scr); + } + else { + ctrlmode=0; + } + if (event.xkey.keycode == shiftl || event.xkey.keycode == shiftr){ + if(ctrlmode) + cycleGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh, 0); + else + cyclePositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + else { + keysym = XLookupKeysym(&event.xkey, 0); + switch(keysym){ + case XK_Return: + done=2; + break; + case XK_Escape: + done=1; + break; + case XK_Up: + case XK_KP_Up: + case XK_k: + if (ctrlmode){ + h-=_KS; + } + else off_y-=_KS; + break; + case XK_Down: + case XK_KP_Down: + case XK_j: + if (ctrlmode){ + h+=_KS; + } + else off_y+=_KS; + break; + case XK_Left: + case XK_KP_Left: + case XK_h: + if (ctrlmode){ + w-=_KS; + } + else off_x-=_KS; + break; + case XK_Right: + case XK_KP_Right: + case XK_l: + if (ctrlmode){ + w+=_KS; + } + else off_x+=_KS; + break; + } + ww=w;wh=h; + wh-=vert_border; + wWindowConstrainSize(wwin, &ww, &wh); + wh+=vert_border; + + if (wPreferences.ws_cycle){ + if (src_x + off_x + wwin->frame->core->width < 20){ + if(!scr->current_workspace) { + wWorkspaceChange(scr, scr->workspace_count-1); + } + else wWorkspaceChange(scr, scr->current_workspace-1); + off_x += scr_width; + } + else if (src_x + off_x + 20 > scr_width){ + if(scr->current_workspace == scr->workspace_count-1) { + wWorkspaceChange(scr, 0); + } + else wWorkspaceChange(scr, scr->current_workspace+1); + off_x -= scr_width; + } + } + else { + if (src_x + off_x + wwin->frame->core->width < 20) + off_x = 20 - wwin->frame->core->width - src_x; + else if (src_x + off_x + 20 > scr_width) + off_x = scr_width - 20 - src_x; + } + + if (src_y + off_y + wwin->frame->core->height < 20) + off_y = 20 - wwin->frame->core->height - src_y; + else if (src_y + off_y + 20 > scr_height) + off_y = scr_height - 20 - src_y; + + } + break; + case ButtonPress: + case ButtonRelease: + done=1; + break; + default: + } + /* + XUngrabServer(dpy); + WMHandleEvent(&event); + XSync(dpy, False); + XGrabServer(dpy); + * */ + if (!scr->selected_windows){ + if(ctrlmode){ + unmapPositionDisplay(wwin); + mapGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + else { + unmapGeometryDisplay(wwin); + mapPositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + else { + drawFrames(wwin,scr->selected_windows,off_x,off_y,0,0); + } + if(ctrlmode){ + showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0); + } + else + showPosition(wwin, src_x+off_x, src_y+off_y); + /**/ + + if(done){ + scr->keymove_tick=0; + /* + WMDeleteTimerWithClientData(&looper); + */ + if (!scr->selected_windows){ + drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh); + } + else { + drawFrames(wwin,scr->selected_windows,off_x,off_y,0,0); + } + if(ctrlmode){ + showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0); + unmapGeometryDisplay(wwin); + } + else + unmapPositionDisplay(wwin); + XUngrabKeyboard(dpy, CurrentTime); + XUngrabServer(dpy); + if(done==2){ + if (!scr->selected_windows){ + wWindowConfigure(wwin, src_x+off_x, src_y+off_y, ww, wh - vert_border); + wWindowSynthConfigureNotify(wwin); + } + else { + LinkedList *list; + list=scr->selected_windows; + doWindowMove(wwin,0,0,scr->selected_windows,off_x,off_y,0,0); + while (list) { + wWindowSynthConfigureNotify(list->head); + list = list->tail; + } + } + wWindowChangeWorkspace(wwin, scr->current_workspace); + wSetFocusTo(scr, wwin); + } + return 1; + } + } +} + + int wMouseMoveWindow(WWindow *wwin, XEvent *ev) { WScreen *scr = wwin->screen_ptr; XEvent event; Window root = scr->root_win; - KeyCode shiftl, shiftr; + KeyCode shiftl, shiftr, tab; int w = wwin->frame->core->width; int h = wwin->frame->core->height; int x = wwin->frame_x; @@ -642,7 +918,8 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev) /* This needs not to change while moving, else bad things can happen */ int opaque_move = wPreferences.opaque_move; int XOffset, YOffset, origDragX, origDragY; - + int grid = 0; + origDragX = wwin->frame_x; origDragY = wwin->frame_y; XOffset = origDragX - ev->xbutton.x_root; @@ -662,13 +939,15 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev) #endif shiftl = XKeysymToKeycode(dpy, XK_Shift_L); shiftr = XKeysymToKeycode(dpy, XK_Shift_R); + tab = XKeysymToKeycode(dpy, XK_Tab); while (1) { if (warped) { int junk; Window junkw; - + /* XWarpPointer() doesn't seem to generate Motion events, so we've got to simulate them */ + printf("warp\n"); XQueryPointer(dpy, root, &junkw, &junkw, &event.xmotion.x_root, &event.xmotion.y_root, &junk, &junk, (unsigned *) &junk); @@ -676,7 +955,7 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev) Window win; WMMaskEvent(dpy, KeyPressMask | ButtonMotionMask - | ButtonReleaseMask | ButtonPressMask | ExposureMask, &event); + | ButtonReleaseMask | ButtonPressMask | ExposureMask, &event); if (event.type == MotionNotify) { /* compress MotionNotify events */ @@ -702,10 +981,17 @@ wMouseMoveWindow(WWindow *wwin, XEvent *ev) } showPosition(wwin, x, y); } + if (event.xkey.keycode == tab) { + grid = !grid; + } break; case MotionNotify: if (started) { + if (grid) { + event.xmotion.x_root = (event.xmotion.x_root/10)*10; + event.xmotion.y_root = (event.xmotion.y_root/10)*10; + } showPosition(wwin, x, y); if (!opaque_move) { @@ -972,7 +1258,7 @@ wMouseResizeWindow(WWindow *wwin, XEvent *ev) ry2 = fy + fh - 1; shiftl = XKeysymToKeycode(dpy, XK_Shift_L); shiftr = XKeysymToKeycode(dpy, XK_Shift_R); - if (!wwin->window_flags.no_titlebar) + if (!WFLAGP(wwin, no_titlebar)) h = wwin->screen_ptr->title_font->height + TITLEBAR_EXTRA_HEIGHT; else h = 0; @@ -1139,7 +1425,7 @@ wUnselectWindows(WScreen *scr) } } - +#ifndef LITE static void selectWindowsInside(WScreen *scr, int x1, int y1, int x2, int y2) { @@ -1150,7 +1436,7 @@ selectWindowsInside(WScreen *scr, int x1, int y1, int x2, int y2) while (tmpw != NULL) { if (!(tmpw->flags.miniaturized || tmpw->flags.hidden)) { if ((tmpw->frame->workspace == scr->current_workspace - || tmpw->window_flags.omnipresent) + || IS_OMNIPRESENT(tmpw)) && (tmpw->frame_x >= x1) && (tmpw->frame_y >= y1) && (tmpw->frame->core->width + tmpw->frame_x <= x2) && (tmpw->frame->core->height + tmpw->frame_y <= y2)) { @@ -1232,7 +1518,7 @@ wSelectWindows(WScreen *scr, XEvent *ev) } } } - +#endif /* !LITE */ void InteractivePlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, @@ -1253,11 +1539,11 @@ InteractivePlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, *y_ret = 0; return; } - if (!wwin->window_flags.no_titlebar) { + if (!WFLAGP(wwin, no_titlebar)) { h = scr->title_font->height + TITLEBAR_EXTRA_HEIGHT; height += h; } - if (!wwin->window_flags.no_resizebar) { + if (!WFLAGP(wwin, no_resizebar)) { height += RESIZEBAR_HEIGHT; } XGrabKeyboard(dpy, root, False, GrabModeAsync, GrabModeAsync, CurrentTime); diff --git a/src/openlook.c b/src/openlook.c new file mode 100644 index 00000000..ea0dc10d --- /dev/null +++ b/src/openlook.c @@ -0,0 +1,384 @@ +/* + * openlook.c - OPEN LOOK (tm) compatibility stuff + * + * Window Maker window manager + * + * Copyright (c) 1998 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 + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +/* + * based on olwm code + */ + +#include "wconfig.h" + +#ifdef OLWM_HINTS + + +#include <X11/Xlib.h> +#include <X11/Xutil.h> + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + + +#include "WindowMaker.h" + +#include "wcore.h" +#include "framewin.h" +#include "window.h" +#include "properties.h" +#include "icon.h" +#include "client.h" +#include "funcs.h" + +#include "openlook.h" + + +/* pin states */ +#define OL_PIN_OUT 0 +#define OL_PIN_IN 1 + +/* flags */ +#define OL_DECORATION_HEADER (1<<0) +#define OL_DECORATION_FOOTER (1<<1) +#define OL_DECORATION_PUSHPIN (1<<2) +#define OL_DECORATION_CLOSEBUTTON (1<<3) +#define OL_DECORATION_RESIZEABLE (1<<4) +#define OL_DECORATION_ICONNAME (1<<5) +#define OL_DECORATION_WARPTOPIN (1<<6) +#define OL_DECORATION_NONE (1<<7) + + + +typedef struct { + long flags; + Atom winType; + Atom menuType; + long pinInitState; + long cancel; +} OLHints; + +#define OL_WINTYPE (1<<0) +#define OL_MENUTYPE (1<<1) +#define OL_PINSTATE (1<<2) +#define OL_CANCEL (1<<3) + + + +typedef struct { + unsigned long flags; + unsigned long state; +} OLWindowState; + +#define OL_STATE_SEMANTIC (1<<0) + +#define OL_STATE_COMPOSE (1<<0) +#define OL_STATE_CAPSLOCK (1<<1) +#define OL_STATE_NUMLOCK (1<<2) +#define OL_STATE_SCROLLLOCK (1<<3) + + +static Atom _XA_SUN_WM_PROTOCOLS = 0; + + +static Bool +getWindowState(Window win, OLWindowState *state) +{ + static Atom _XA_SUN_WINDOW_STATE = 0; + unsigned long *data; + + if (!_XA_SUN_WINDOW_STATE) { + _XA_SUN_WINDOW_STATE = XInternAtom(dpy, "_SUN_WINDOW_STATE", False); + } + + data = (unsigned long*)PropGetCheckProperty(win, _XA_SUN_WINDOW_STATE, + XA_INTEGER, 32, 2, NULL); + + if (!data) { + return False; + } + + state->flags = data[0]; + state->state = data[1]; + + XFree(data); + + return True; +} + + +static Bool +getWindowHints(Window window, OLHints *hints) +{ + long *data; + int count; + + if (!_XA_OL_WIN_ATTR) { + _XA_OL_WIN_ATTR = XInternAtom(dpy, "_OL_WIN_ATTR", False); + } + + data = (long*)PropGetCheckProperty(window, _XA_OL_WIN_ATTR, + _XA_OL_WIN_ATTR, 32, 0, &count); + + if (!data) + return False; + + if (count == 3) { + /* old format */ + + hints->flags = OL_WINTYPE|OL_MENUTYPE|OL_PINSTATE; + hints->winType = data[0]; + hints->menuType = data[1]; + hints->pinInitState = data[2]; + hints->cancel = 0; + + } else if (count == 5) { + /* new format */ + + hints->flags = data[0]; + hints->winType = data[1]; + hints->menuType = data[2]; + hints->pinInitState = data[3]; + hints->cancel = data[4]; + + } else { + XFree(data); + return False; + } + + XFree(data); + + /* do backward compatibility stuff */ + if (hints->flags & OL_PINSTATE) { + static Atom pinIn = 0, pinOut; + + if (!pinIn) { + pinIn = XInternAtom(dpy, "_OL_PIN_IN", False); + pinOut = XInternAtom(dpy, "_OL_PIN_OUT", False); + } + + if (hints->pinInitState == pinIn) + hints->pinInitState = OL_PIN_IN; + else if (hints->pinInitState == pinOut) + hints->pinInitState = OL_PIN_OUT; + } + + return True; +} + + + + +static void +applyDecorationHints(Window win, int *flags) +{ + Atom *atoms; + static Atom _XA_OL_DECOR_ADD = 0; + static Atom _XA_OL_DECOR_DEL = 0; + static Atom _XA_CLOSE, _XA_FOOTER, _XA_RESIZE, _XA_HEADER, _XA_PIN, + _XA_ICONNAME; + int count; + int i; + + if (!_XA_OL_DECOR_DEL) { + _XA_OL_DECOR_ADD = XInternAtom(dpy, "_OL_DECOR_ADD", False); + _XA_OL_DECOR_DEL = XInternAtom(dpy, "_OL_DECOR_DEL", False); + + _XA_CLOSE = XInternAtom(dpy, "_OL_DECOR_CLOSE", False); + _XA_FOOTER = XInternAtom(dpy, "_OL_DECOR_FOOTER", False); + _XA_RESIZE = XInternAtom(dpy, "_OL_DECOR_RESIZE", False); + _XA_HEADER = XInternAtom(dpy, "_OL_DECOR_HEADER", False); + _XA_PIN = XInternAtom(dpy, "_OL_DECOR_PIN", False); + _XA_ICONNAME = XInternAtom(dpy, "_OL_DECOR_ICON_NAME", False); + } + + atoms = PropGetCheckProperty(win, _XA_OL_DECOR_ADD, XA_ATOM, 32, 0, + &count); + if (atoms) { + for (i=0; i < count; i++) { + if (atoms[i] == _XA_CLOSE) + *flags |= OL_DECORATION_CLOSEBUTTON; + else if (atoms[i] == _XA_FOOTER) + *flags |= OL_DECORATION_FOOTER; + else if (atoms[i] == _XA_RESIZE) + *flags |= OL_DECORATION_RESIZEABLE; + else if (atoms[i] == _XA_HEADER) + *flags |= OL_DECORATION_HEADER; + else if (atoms[i] == _XA_PIN) + *flags |= OL_DECORATION_PUSHPIN; + else if (atoms[i] == _XA_ICONNAME) + *flags |= OL_DECORATION_ICONNAME; + } + XFree(atoms); + } + + atoms = PropGetCheckProperty(win, _XA_OL_DECOR_DEL, XA_ATOM, 32, 0, + &count); + if (atoms) { + for (i=0; i < count; i++) { + if (atoms[i] == _XA_CLOSE) + *flags &= ~OL_DECORATION_CLOSEBUTTON; + else if (atoms[i] == _XA_FOOTER) + *flags &= ~OL_DECORATION_FOOTER; + else if (atoms[i] == _XA_RESIZE) + *flags &= ~OL_DECORATION_RESIZEABLE; + else if (atoms[i] == _XA_HEADER) + *flags &= ~OL_DECORATION_HEADER; + else if (atoms[i] == _XA_PIN) + *flags &= ~OL_DECORATION_PUSHPIN; + else if (atoms[i] == _XA_ICONNAME) + *flags &= ~OL_DECORATION_ICONNAME; + } + XFree(atoms); + } +} + + +void +wOLWMInitStuff(WScreen *scr) +{ + static Atom _SUN_OL_WIN_ATTR_5; + + if (!_XA_SUN_WM_PROTOCOLS) { + _XA_SUN_WM_PROTOCOLS = XInternAtom(dpy, "_SUN_WM_PROTOCOLS", False); + _SUN_OL_WIN_ATTR_5 = XInternAtom(dpy, "_SUN_OL_WIN_ATTR_5", False); + } + + XChangeProperty(dpy, scr->root_win, _XA_SUN_WM_PROTOCOLS, XA_ATOM, 32, + PropModeReplace, (unsigned char*)&_SUN_OL_WIN_ATTR_5, 1); +} + + +void +wOLWMShutdown(WScreen *scr) +{ + XDeleteProperty(dpy, scr->root_win, _XA_SUN_WM_PROTOCOLS); +} + + +void +wOLWMCheckClientHints(WWindow *wwin) +{ + OLHints hints; + static Atom WT_BASE = 0, WT_CMD, WT_NOTICE, WT_HELP, WT_OTHER; + static Atom MT_FULL, MT_LIMITED, MT_NONE; + int decorations; + int pinInitState = OL_PIN_IN; + Atom menuType; + + if (!WT_BASE) { + WT_BASE = XInternAtom(dpy, "_OL_WT_BASE", False); + WT_CMD = XInternAtom(dpy, "_OL_WT_CMD", False); + WT_NOTICE = XInternAtom(dpy, "_OL_WT_NOTICE", False); + WT_HELP = XInternAtom(dpy, "_OL_WT_HELP", False); + WT_OTHER = XInternAtom(dpy, "_OL_WT_OTHER", False); + + MT_FULL = XInternAtom(dpy, "_OL_MENU_FULL", False); + MT_LIMITED = XInternAtom(dpy, "_OL_MENU_LIMITED", False); + MT_NONE = XInternAtom(dpy, "_OL_NONE", False); + } + + /* get attributes */ + + if (!getWindowHints(wwin->client_win, &hints) || + !(hints.flags & OL_WINTYPE)) { + + decorations = OL_DECORATION_CLOSEBUTTON|OL_DECORATION_RESIZEABLE + |OL_DECORATION_HEADER|OL_DECORATION_ICONNAME; + + menuType = MT_FULL; + + } else { + if (hints.winType == WT_BASE) { + + decorations = OL_DECORATION_CLOSEBUTTON|OL_DECORATION_RESIZEABLE + |OL_DECORATION_HEADER|OL_DECORATION_ICONNAME; + + menuType = MT_FULL; + + } else if (hints.winType == WT_CMD) { + + decorations = OL_DECORATION_PUSHPIN|OL_DECORATION_RESIZEABLE + |OL_DECORATION_HEADER|OL_DECORATION_ICONNAME; + + menuType = MT_LIMITED; + + } else if (hints.winType == WT_NOTICE) { + + decorations = OL_DECORATION_ICONNAME; + menuType = MT_NONE; + + } else if (hints.winType == WT_HELP) { + + decorations = OL_DECORATION_PUSHPIN|OL_DECORATION_HEADER + |OL_DECORATION_ICONNAME|OL_DECORATION_WARPTOPIN; + menuType = MT_LIMITED; + + } else if (hints.winType == WT_OTHER) { + + decorations = OL_DECORATION_ICONNAME; + menuType = MT_NONE; + + if (hints.flags & OL_MENUTYPE) { + menuType = hints.menuType; + } + } + + if (hints.flags & OL_PINSTATE) { + pinInitState = hints.pinInitState; + } else { + pinInitState = OL_PIN_OUT; + } + } + + /* mask attributes with decoration hints */ + applyDecorationHints(wwin->client_win, &decoration); + + if ((decoration & OL_DECORATION_CLOSEBUTTON) + && (decoration & OL_DECORATION_PUSHPIN)) + decoration &= ~OL_DECORATION_CLOSEBUTTON; + + if (!(decoration & OL_DECORATION_PUSHPIN)) + decoration &= ~OL_DECORATION_WARPTOPIN; + + + /* map the hints to our attributes */ + if (menuType == MT_FULL) + wwin->flags.olwm_limit_menu = 0; + else + wwin->flags.olwm_limit_menu = 1; + + /* + * Emulate olwm pushpin. + * If the initial state of the pin is in, then put the normal close + * button. If not, make the close button different and when the + * user moves the window or clicks in the close button, turn it + * into a normal close button. + */ + if ((decoration & OL_DECORATION_PUSHPIN) && pinInitState==OL_PIN_OUT) { + wwin->flags.olwm_push_pin = 1; + } + + +} + + +#endif + diff --git a/src/workspace.h b/src/openlook.h similarity index 50% copy from src/workspace.h copy to src/openlook.h index 07963a4e..481df8f1 100644 --- a/src/workspace.h +++ b/src/openlook.h @@ -1,8 +1,9 @@ -/* workspace.c- Workspace management +/* + * openlook.h - OPEN LOOK (tm) compatibility stuff * * Window Maker window manager * - * Copyright (c) 1997, 1998 Alfredo K. Kojima + * Copyright (c) 1998 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 @@ -20,31 +21,11 @@ * USA. */ -#ifndef WMWORKSPACE_H_ -#define WMWORKSPACE_H_ +#ifndef _OPENLOOK_H_ +#define _OPENLOOK_H_ -typedef struct WWorkspace { - char *name; - struct WDock *clip; -} WWorkspace; - -void wWorkspaceMake(WScreen *scr, int count); -int wWorkspaceNew(WScreen *scr); -void wWorkspaceDeleteLast(WScreen *scr); -void wWorkspaceChange(WScreen *scr, int workspace); -void wWorkspaceForceChange(WScreen *scr, int workspace); - - -WMenu *wWorkspaceMenuMake(WScreen *scr, Bool titled); -void wWorkspaceMenuUpdate(WScreen *scr, WMenu *menu); - -void wWorkspaceMenuEdit(WScreen *scr); - -void wWorkspaceSaveState(WScreen *scr, proplist_t old_state); -void wWorkspaceRestoreState(WScreen *scr); - -void wWorkspaceRename(WScreen *scr, int workspace, char *name); #endif + diff --git a/src/placement.c b/src/placement.c index 592fcd34..ee9e6433 100644 --- a/src/placement.c +++ b/src/placement.c @@ -41,8 +41,11 @@ extern WPreferences wPreferences; -#define X_ORIGIN wPreferences.window_place_origin.x -#define Y_ORIGIN wPreferences.window_place_origin.y +#define X_ORIGIN(scr) WMAX((scr)->totalUsableArea.x1,\ + wPreferences.window_place_origin.x) + +#define Y_ORIGIN(scr) WMAX((scr)->totalUsableArea.y1,\ + wPreferences.window_place_origin.y) /* @@ -74,7 +77,7 @@ iconPosition(WCoreWindow *wcore, int sx1, int sy1, int sx2, int sy2, ok = 1; } else if (wcore->descriptor.parent_type == WCLASS_MINIWINDOW && (((WIcon*)parent)->owner->frame->workspace==workspace - || ((WIcon*)parent)->owner->window_flags.omnipresent + || IS_OMNIPRESENT(((WIcon*)parent)->owner) || wPreferences.sticky_icons) && !((WIcon*)parent)->owner->flags.hidden) { @@ -237,84 +240,89 @@ PlaceIcon(WScreen *scr, int *x_ret, int *y_ret) -static int +static Bool smartPlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, - unsigned int width, unsigned int height) + unsigned int width, unsigned int height, int tryCount) { WScreen *scr = wwin->screen_ptr; - int test_x = 0, test_y = Y_ORIGIN; + int test_x = 0, test_y = Y_ORIGIN(scr); int loc_ok = False, tw,tx,ty,th; int swidth, sx; WWindow *test_window; int extra_height; + WArea usableArea = scr->totalUsableArea; if (wwin->frame) extra_height = wwin->frame->top_width + wwin->frame->bottom_width + 2; else extra_height = 24; /* random value */ - - swidth = scr->scr_width; - sx = X_ORIGIN; - if (scr->dock && !scr->dock->lowered) { - if (scr->dock->on_right_side) - swidth -= wPreferences.icon_size + DOCK_EXTRA_SPACE; - else if (X_ORIGIN < wPreferences.icon_size + DOCK_EXTRA_SPACE) - sx += wPreferences.icon_size + DOCK_EXTRA_SPACE - X_ORIGIN; - } + + swidth = usableArea.x2-usableArea.x1; + sx = X_ORIGIN(scr); /* this was based on fvwm2's smart placement */ height += extra_height; while (((test_y + height) < (scr->scr_height)) && (!loc_ok)) { - + test_x = sx; - + while (((test_x + width) < swidth) && (!loc_ok)) { - + loc_ok = True; test_window = scr->focused_window; - - while ((test_window != (WWindow *) 0) && (loc_ok == True)) { - + + while ((test_window != NULL) && (loc_ok == True)) { + + if (test_window->frame->core->stacking->window_level + < WMNormalLevel && tryCount > 0) { + test_window = test_window->next; + continue; + } tw = test_window->client.width; if (test_window->flags.shaded) th = test_window->frame->top_width; else - th = test_window->client.height+extra_height; + th = test_window->client.height + extra_height; tx = test_window->frame_x; ty = test_window->frame_y; - - if((tx<(test_x+width))&&((tx + tw) > test_x)&& - (ty<(test_y+height))&&((ty + th)>test_y)&& - (test_window->flags.mapped || - (test_window->flags.shaded && - !(test_window->flags.miniaturized || - test_window->flags.hidden)))) { + + if ((tx < (test_x + width)) && ((tx + tw) > test_x) && + (ty < (test_y + height)) && ((ty + th) > test_y) && + (test_window->flags.mapped || + (test_window->flags.shaded && + !(test_window->flags.miniaturized || + test_window->flags.hidden)))) { loc_ok = False; } test_window = test_window->next; } - + test_window = scr->focused_window; - - while ((test_window != (WWindow *) 0) && (loc_ok == True)) { - + + while ((test_window != NULL) && (loc_ok == True)) { + + if (test_window->frame->core->stacking->window_level + < WMNormalLevel && tryCount > 0) { + test_window = test_window->prev; + continue; + } tw = test_window->client.width; if (test_window->flags.shaded) th = test_window->frame->top_width; else - th = test_window->client.height+extra_height; + th = test_window->client.height + extra_height; tx = test_window->frame_x; ty = test_window->frame_y; - - if((tx<(test_x+width))&&((tx + tw) > test_x)&& - (ty<(test_y+height))&&((ty + th)>test_y)&& - (test_window->flags.mapped || - (test_window->flags.shaded && - !(test_window->flags.miniaturized || - test_window->flags.hidden)))) { + + if ((tx < (test_x + width)) && ((tx + tw) > test_x) && + (ty < (test_y + height)) && ((ty + th) > test_y) && + (test_window->flags.mapped || + (test_window->flags.shaded && + !(test_window->flags.miniaturized || + test_window->flags.hidden)))) { loc_ok = False; } @@ -338,31 +346,21 @@ cascadeWindow(WScreen *scr, WWindow *wwin, int *x_ret, int *y_ret, unsigned int width, unsigned int height, int h) { unsigned int extra_height; - unsigned int scr_width; - int xoffset = 0; - - scr_width = scr->scr_width; - if (scr->dock && !scr->dock->lowered) { - if (scr->dock->on_right_side) { - scr_width -= wPreferences.icon_size; - } else { - xoffset = wPreferences.icon_size; - } - } + WArea usableArea = scr->totalUsableArea; if (wwin->frame) extra_height = wwin->frame->top_width + wwin->frame->bottom_width; else extra_height = 24; /* random value */ - *x_ret = h * scr->cascade_index + X_ORIGIN; - *y_ret = h * scr->cascade_index + Y_ORIGIN; + *x_ret = h * scr->cascade_index + X_ORIGIN(scr); + *y_ret = h * scr->cascade_index + Y_ORIGIN(scr); height += extra_height; - - if (width + *x_ret > scr_width || height + *y_ret > scr->scr_height) { + + if (width + *x_ret > usableArea.x2 || height + *y_ret > usableArea.y2) { scr->cascade_index = 0; - *x_ret = h*scr->cascade_index + X_ORIGIN; - *y_ret = h*scr->cascade_index + Y_ORIGIN; + *x_ret = X_ORIGIN(scr); + *y_ret = Y_ORIGIN(scr); } } @@ -380,8 +378,11 @@ PlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, break; case WPM_SMART: - if (smartPlaceWindow(wwin, x_ret, y_ret, width, height)) - break; + if (smartPlaceWindow(wwin, x_ret, y_ret, width, height, 0)) { + break; + } else if (smartPlaceWindow(wwin, x_ret, y_ret, width, height, 1)) { + break; + } /* there isn't a break here, because if we fail, it should fall through to cascade placement, as people who want tiling want automagicness aren't going to want to place their window */ @@ -394,45 +395,26 @@ PlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, if (wPreferences.window_placement == WPM_CASCADE) scr->cascade_index++; - - if (scr->dock && !scr->dock->lowered) { - int x2; - - x2 = *x_ret + width; - if (scr->dock->on_right_side - && x2 > scr->scr_width - wPreferences.icon_size - - DOCK_EXTRA_SPACE) - *x_ret = scr->scr_width - width - - wPreferences.icon_size - DOCK_EXTRA_SPACE; - else if (!scr->dock->on_right_side && - X_ORIGIN < wPreferences.icon_size + DOCK_EXTRA_SPACE) - *x_ret += wPreferences.icon_size + DOCK_EXTRA_SPACE - X_ORIGIN; - } break; case WPM_RANDOM: { - int w, h; - - w = (scr->scr_width - width); - h = (scr->scr_height - height); + int w, h, extra_height; + WArea usableArea = scr->totalUsableArea; + + if (wwin->frame) + extra_height = wwin->frame->top_width + wwin->frame->bottom_width + 2; + else + extra_height = 24; /* random value */ + + //w = ((usableArea.x2-usableArea.x1) - width); + //h = ((usableArea.y2-usableArea.y1) - height - extra_height); + w = ((usableArea.x2-X_ORIGIN(scr)) - width); + h = ((usableArea.y2-Y_ORIGIN(scr)) - height - extra_height); if (w<1) w = 1; if (h<1) h = 1; - *x_ret = rand()%w; - *y_ret = rand()%h; - if (scr->dock && !scr->dock->lowered) { - int x2; - - x2 = *x_ret + width; - if (scr->dock->on_right_side - && x2 > scr->scr_width - wPreferences.icon_size - - DOCK_EXTRA_SPACE) - *x_ret = scr->scr_width - width - - wPreferences.icon_size - DOCK_EXTRA_SPACE; - else if (!scr->dock->on_right_side - && *x_ret < wPreferences.icon_size) - *x_ret = wPreferences.icon_size + DOCK_EXTRA_SPACE; - } + *x_ret = X_ORIGIN(scr) + rand()%w; + *y_ret = Y_ORIGIN(scr) + rand()%h; } break; @@ -444,15 +426,15 @@ PlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, #endif } - if (*x_ret < 0) - *x_ret = 0; - else if (*x_ret + width > scr->scr_width) + if (*x_ret + width > scr->scr_width) *x_ret = scr->scr_width - width; - - if (*y_ret < 0) - *y_ret = 0; - else if (*y_ret + height > scr->scr_height) + if (*x_ret < 0) + *x_ret = 0; + + if (*y_ret + height > scr->scr_height) *y_ret = scr->scr_height - height; + if (*y_ret < 0) + *y_ret = 0; } diff --git a/src/properties.c b/src/properties.c index 6b7b3d01..cdd073d3 100644 --- a/src/properties.c +++ b/src/properties.c @@ -30,9 +30,6 @@ #include "WindowMaker.h" #include "window.h" #include "GNUstep.h" -#ifdef MWM_HINTS -# include "motif.h" -#endif /* atoms */ @@ -94,6 +91,7 @@ PropGetWMClass(Window window, char **wm_class, char **wm_instance) return True; } + void PropGetProtocols(Window window, WProtocols *prots) { @@ -118,22 +116,50 @@ PropGetProtocols(Window window, WProtocols *prots) } -int -PropGetGNUstepWMAttr(Window window, GNUstepWMAttributes **attr) +unsigned char* +PropGetCheckProperty(Window window, Atom hint, Atom type, int format, + int count, int *retCount) { Atom type_ret; int fmt_ret; unsigned long nitems_ret; unsigned long bytes_after_ret; - unsigned long *data; + unsigned char *data; + int tmp; + + if (count <= 0) + tmp = 0xffffff; - if (XGetWindowProperty(dpy, window, _XA_GNUSTEP_WM_ATTR, 0, 9, - False, _XA_GNUSTEP_WM_ATTR, + if (XGetWindowProperty(dpy, window, hint, 0, tmp, False, type, &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, (unsigned char **)&data)!=Success || !data) - return False; - if (type_ret!=_XA_GNUSTEP_WM_ATTR || !data || fmt_ret!=32) - return False; + return NULL; + + if ((type!=AnyPropertyType && type!=type_ret) + || (count > 0 && nitems_ret != count) + || (format != 0 && format != fmt_ret)) { + XFree(data); + return NULL; + } + + if (retCount) + *retCount = nitems_ret; + + return data; +} + + +int +PropGetGNUstepWMAttr(Window window, GNUstepWMAttributes **attr) +{ + unsigned long *data; + + data = (unsigned long*)PropGetCheckProperty(window, _XA_GNUSTEP_WM_ATTR, + _XA_GNUSTEP_WM_ATTR, 32, 9, + NULL); + + if (!data) + return False; *attr = malloc(sizeof(GNUstepWMAttributes)); if (!*attr) { @@ -156,49 +182,6 @@ PropGetGNUstepWMAttr(Window window, GNUstepWMAttributes **attr) } - - -#ifdef MWM_HINTS -int -PropGetMotifWMHints(Window window, MWMHints **mwmhints) -{ - Atom type_ret; - int fmt_ret; - unsigned long nitems_ret; - unsigned long bytes_after_ret; - unsigned long *data; - - if (XGetWindowProperty(dpy, window, _XA_MOTIF_WM_HINTS, 0, - PROP_MWM_HINTS_ELEMENTS, - False, _XA_MOTIF_WM_HINTS, - &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, - (unsigned char **)&data)!=Success) - return 0; - - if (type_ret!=_XA_MOTIF_WM_HINTS || fmt_ret!=32 - || nitems_ret!=PROP_MWM_HINTS_ELEMENTS || !data) - return 0; - - *mwmhints = malloc(sizeof(MWMHints)); - if (!*mwmhints) { - XFree(data); - return 0; - } - - (*mwmhints)->flags = data[0]; - (*mwmhints)->functions = data[1]; - (*mwmhints)->decorations = data[2]; - (*mwmhints)->inputMode = data[3]; - - XFree(data); - - if (type_ret==_XA_MOTIF_WM_HINTS) - return 1; - else - return 0; -} -#endif /* MWM_HINTS */ - void PropSetWMakerProtocols(Window root) @@ -217,27 +200,19 @@ PropSetWMakerProtocols(Window root) Window PropGetClientLeader(Window window) { - Atom type_ret; - int fmt_ret; - unsigned long nitems_ret; - unsigned long bytes_after_ret; Window *win; Window leader; - if (XGetWindowProperty(dpy, window, _XA_WM_CLIENT_LEADER, 0, 1, - False, AnyPropertyType, - &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, - (unsigned char**)&win)!=Success || !win) - return None; + win = (Window*)PropGetCheckProperty(window, _XA_WM_CLIENT_LEADER, + XA_WINDOW, 32, 1, NULL); + + if (!win) + return None; leader = (Window)*win; XFree(win); - if (type_ret == XA_WINDOW && fmt_ret == 32 && nitems_ret == 1 - && bytes_after_ret == 0) - return leader; - else - return None; + return leader; } @@ -319,4 +294,10 @@ PropCleanUp(Window root) XDeleteProperty(dpy, root, _XA_WINDOWMAKER_WM_PROTOCOLS); XDeleteProperty(dpy, root, XA_WM_ICON_SIZE); + +#ifdef KWM_HINTS + XDeleteProperty(dpy, root, XInternAtom(dpy, "KWM_RUNNING", False)); +#endif } + + diff --git a/src/properties.h b/src/properties.h index 6239d541..60a8fa74 100644 --- a/src/properties.h +++ b/src/properties.h @@ -25,9 +25,8 @@ #include "GNUstep.h" -#ifdef MWM_HINTS -# include "motif.h" -#endif +unsigned char* PropGetCheckProperty(Window window, Atom hint, Atom type, + int format, int count, int *retCount); int PropGetNormalHints(Window window, XSizeHints *size_hints, int *pre_iccm); @@ -39,14 +38,11 @@ void PropWriteGNUstepWMAttr(Window window, GNUstepWMAttributes *attr); void PropSetWMakerProtocols(Window root); void PropCleanUp(Window root); -#ifdef MWM_HINTS -int PropGetMotifWMHints(Window window, MWMHints **mwmhints); -#endif - Window PropGetClientLeader(Window window); #ifdef R6SM char *PropGetClientID(Window window); #endif + #endif diff --git a/src/rootmenu.c b/src/rootmenu.c index 57b8dceb..d3f03eee 100644 --- a/src/rootmenu.c +++ b/src/rootmenu.c @@ -22,6 +22,8 @@ #include "wconfig.h" +#ifndef LITE + #include <assert.h> #include <stdio.h> #include <stdlib.h> @@ -59,7 +61,7 @@ extern char *Locale; extern WDDomain *WDRootMenu; -extern wCursor[WCUR_LAST]; +extern Cursor wCursor[WCUR_LAST]; extern Time LastTimestamp; @@ -152,19 +154,6 @@ static void execCommand(WMenu *menu, WMenuEntry *entry) { char *cmdline; - static char *shell = NULL; - - /* - * This have a problem: if the shell is tcsh (not sure about others) - * and ~/.tcshrc have /bin/stty erase ^H somewhere on it, the shell - * will block and the command will not be executed. - if (!shell) { - shell = getenv("SHELL"); - if (!shell) - shell = "/bin/sh"; - } - */ - shell = "/bin/sh"; cmdline = ExpandOptions(menu->frame->screen_ptr, (char*)entry->clientdata); @@ -174,26 +163,7 @@ execCommand(WMenu *menu, WMenuEntry *entry) XSync(dpy, 0); if (cmdline) { - /* We should not use ParseCommand() here, because it does not handle - * correctly '~/' expansion and '>' redirection. - * While we can do '~/' expansion ourselves, we can do nothing about - * '>' redirection. - * So we better let /bin/sh to do that for us. Dan. - * Ok. -Alfredo - */ - if (fork()==0) { - - SetupEnvironment(menu->frame->screen_ptr); - - CloseDescriptors(); - -#ifdef HAVE_SETPGID - setpgid(0, 0); -#endif - execl(shell, shell, "-c", cmdline, NULL); - wsyserror("could not exec %s -c %s\n", shell, cmdline); - Exit(-1); - } + ExecuteShellCommand(menu->frame->screen_ptr, cmdline); free(cmdline); } XUngrabPointer(dpy, CurrentTime); @@ -215,22 +185,10 @@ exitCommand(WMenu *menu, WMenuEntry *entry) || wMessageDialog(menu->frame->screen_ptr, _("Exit"), _("Exit window manager?"), _("Exit"), _("Cancel"), NULL)==WAPRDefault) { - int i; #ifdef DEBUG printf("Exiting WindowMaker.\n"); #endif - for (i=0; i<wScreenCount; i++) { - WScreen *scr; - - scr = wScreenWithNumber(i); - if (scr) - wScreenSaveState(scr); - } - - RestoreDesktop(NULL); - - ExecExitScript(); - Exit(0); + Shutdown(WSExitMode); } inside = 0; } @@ -241,7 +199,6 @@ shutdownCommand(WMenu *menu, WMenuEntry *entry) { static int inside = 0; int result; - int i; /* prevent reentrant calls */ if (inside) @@ -288,21 +245,11 @@ shutdownCommand(WMenu *menu, WMenuEntry *entry) if (result!=R_CANCEL) { #ifdef R6SM if (result == R_CLOSE) { - wSessionRequestShutdown(); + Shutdown(WSLogoutMode); } else #endif /* R6SM */ { - for (i=0; i<wScreenCount; i++) { - WScreen *scr; - - scr = wScreenWithNumber(i); - if (scr) - wScreenSaveState(scr); - } - WipeDesktop(NULL); - - ExecExitScript(); - Exit(0); + Shutdown(WSKillMode); } } #undef R_CLOSE @@ -315,16 +262,7 @@ shutdownCommand(WMenu *menu, WMenuEntry *entry) static void restartCommand(WMenu *menu, WMenuEntry *entry) { - int i; - - for (i=0; i<wScreenCount; i++) { - WScreen *scr; - - scr = wScreenWithNumber(i); - if (scr) - wScreenSaveState(scr); - } - RestoreDesktop(NULL); + Shutdown(WSRestartPreparationMode); Restart((char*)entry->clientdata); } @@ -457,7 +395,7 @@ rebindKeygrabs(WScreen *scr) while (wwin!=NULL) { XUngrabKey(dpy, AnyKey, AnyModifier, wwin->frame->core->window); - if (!wwin->window_flags.no_bind_keys) { + if (!WFLAGP(wwin, no_bind_keys)) { wWindowSetKeyGrabs(wwin); } wwin = wwin->prev; @@ -509,8 +447,7 @@ addShortcut(char *file, char *shortcutDefinition, WMenu *menu, *k = 0; mod = wXModifierFromKey(b); if (mod<0) { - wwarning(_("%s:invalid key modifier \"%s\""), file, - shortcutDefinition); + wwarning(_("%s:invalid key modifier \"%s\""), file, b); free(ptr); return False; } @@ -692,7 +629,13 @@ constructMenu(WMenu *menu, WMenuEntry *entry) i=0; while(path[i] != NULL) { char *tmp; + Bool statted = False; + if (strcmp(path[i], "-noext")==0) { + i++; + continue; + } + tmp = wexpandpath(path[i]); free(path[i]); path[i] = tmp; @@ -709,12 +652,14 @@ constructMenu(WMenu *menu, WMenuEntry *entry) if (i>2) { lpath[strlen(lpath)-(i-2)]=0; if (stat(lpath, &stat_buf)==0) { + statted = True; free(path[i]); path[i] = lpath; lpath = NULL; } } } else { + statted = True; free(path[i]); path[i] = lpath; lpath = NULL; @@ -726,7 +671,7 @@ constructMenu(WMenu *menu, WMenuEntry *entry) lpath = NULL; } - if (stat(path[i], &stat_buf)==0) { + if (statted || stat(path[i], &stat_buf)==0) { if (last < stat_buf.st_mtime) last = stat_buf.st_mtime; if (first<0) @@ -740,7 +685,7 @@ constructMenu(WMenu *menu, WMenuEntry *entry) } if (first < 0) { - wsyserror(_("%s:could not stat menu :%s"), "OPEN_MENU", + wsyserror(_("%s:could not stat menu:%s"), "OPEN_MENU", (char*)entry->clientdata); goto finish; } @@ -751,7 +696,7 @@ constructMenu(WMenu *menu, WMenuEntry *entry) if (S_ISDIR(stat_buf.st_mode)) { /* menu directory */ submenu = readMenuDirectory(menu->frame->screen_ptr, - entry->text, &path[first], cmd); + entry->text, path, cmd); if (submenu) submenu->timestamp = last; } else if (S_ISREG(stat_buf.st_mode)) { @@ -801,7 +746,7 @@ addWorkspaceMenu(WScreen *scr, WMenu *menu, char *title) wsmenu = wWorkspaceMenuMake(scr, True); scr->workspace_menu = wsmenu; - entry=wMenuAddCallback(menu, title, NULL, NULL); + entry = wMenuAddCallback(menu, title, NULL, NULL); wMenuEntrySetCascade(menu, entry, wsmenu); wWorkspaceMenuUpdate(scr, wsmenu); @@ -1302,6 +1247,25 @@ myCompare(dir_data *d1, dir_data *d2) /************ Menu Configuration From Directory *************/ + +static Bool +isFilePackage(char *file) +{ + int l; + + /* check if the extension indicates this file is a + * file package. For now, only recognize .themed */ + + l = strlen(file); + + if (l > 7 && strcmp(&(file[l-7]), ".themed")==0) { + return True; + } else { + return False; + } +} + + static WMenu* readMenuDirectory(WScreen *scr, char *title, char **path, char *command) { @@ -1313,9 +1277,16 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command) LinkedList *dirs = NULL, *files = NULL; int length, i, have_space=0; dir_data *data; + int stripExtension = 0; i=0; while (path[i]!=NULL) { + if (strcmp(path[i], "-noext")==0) { + stripExtension = 1; + i++; + continue; + } + dir = opendir(path[i]); if (!dir) { i++; @@ -1346,32 +1317,36 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command) wsyserror(_("%s:could not stat file \"%s\" in menu directory"), path[i], dentry->d_name); } else { - data = (dir_data*) wmalloc(sizeof(dir_data)); - data->name = wstrdup(dentry->d_name); - data->index = i; - if (S_ISDIR(stat_buf.st_mode)) { + Bool isFilePack = False; + + data = NULL; + if (S_ISDIR(stat_buf.st_mode) + && !(isFilePack = isFilePackage(dentry->d_name))) { + /* access always returns success for user root */ if (access(buffer, X_OK)==0) { /* Directory is accesible. Add to directory list */ + + data = (dir_data*) wmalloc(sizeof(dir_data)); + data->name = wstrdup(dentry->d_name); + data->index = i; + list_insert_sorted(data, &dirs, (int(*)())myCompare); - data = NULL; } - } else if (S_ISREG(stat_buf.st_mode)) { + } else if (S_ISREG(stat_buf.st_mode) || isFilePack) { /* Hack because access always returns X_OK success for user root */ #define S_IXANY (S_IXUSR | S_IXGRP | S_IXOTH) if ((command!=NULL && access(buffer, R_OK)==0) || (command==NULL && access(buffer, X_OK)==0 && (stat_buf.st_mode & S_IXANY))) { + + data = (dir_data*) wmalloc(sizeof(dir_data)); + data->name = wstrdup(dentry->d_name); + data->index = i; + list_insert_sorted(data, &files, (int(*)())myCompare); - data = NULL; } } - if (data!=NULL) { - if (data->name) - free(data->name); - free(data); - data = NULL; - } } free(buffer); } @@ -1467,6 +1442,11 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command) if (have_space) strcat(buffer, "\""); + if (stripExtension) { + char *ptr = strrchr(f->name, '.'); + if (ptr && ptr!=f->name) + *ptr = 0; + } addMenuEntry(menu, f->name, NULL, "EXEC", buffer, path[f->index]); free(buffer); @@ -1491,6 +1471,8 @@ makeDefaultMenu(WScreen *scr) menu = wMenuCreate(scr, _("Commands"), True); wMenuAddCallback(menu, "XTerm", execCommand, "xterm"); + wMenuAddCallback(menu, "rxvt", execCommand, "rxvt"); + wMenuAddCallback(menu, _("Restart"), restartCommand, NULL); wMenuAddCallback(menu, _("Exit..."), exitCommand, NULL); return menu; } @@ -1615,9 +1597,30 @@ configureMenu(WScreen *scr, proplist_t definition) menu = wMenuCreate(scr, mtitle, False); menu->on_destroy = removeShortcutsForMenu; +#ifdef GLOBAL_SUBMENU_FILE + { + WMenu *submenu; + WMenuEntry *mentry; + + submenu = readMenuFile(scr, GLOBAL_SUBMENU_FILE); + + if (submenu) { + mentry = wMenuAddCallback(menu, submenu->frame->title, NULL, NULL); + wMenuEntrySetCascade(menu, mentry, submenu); + } + } +#endif + for (i=1; i<count; i++) { elem = PLGetArrayElement(definition, i); - +#if 0 + if (PLIsString(elem)) { + char *file; + + file = PLGetString(elem); + + } +#endif if (!PLIsArray(elem) || PLGetNumberOfElements(elem) < 2) goto error; @@ -1766,3 +1769,4 @@ OpenRootMenu(WScreen *scr, int x, int y, int keyboard) rebindKeygrabs(scr); } +#endif /* !LITE */ diff --git a/src/screen.c b/src/screen.c index b14b3e45..5eb4b720 100644 --- a/src/screen.c +++ b/src/screen.c @@ -48,17 +48,28 @@ #include "workspace.h" #include "session.h" #include "balloon.h" +#ifdef KWM_HINTS +#include "kwm.h" +#endif +#ifdef GNOME_STUFF +#include "gnome.h" +#endif #include <proplist.h> #include "defaults.h" +#ifdef LITE +#define EVENT_MASK (LeaveWindowMask|EnterWindowMask|PropertyChangeMask\ + |SubstructureNotifyMask|PointerMotionMask \ + |SubstructureRedirectMask|KeyPressMask|KeyReleaseMask) +#else #define EVENT_MASK (LeaveWindowMask|EnterWindowMask|PropertyChangeMask\ |SubstructureNotifyMask|PointerMotionMask \ |SubstructureRedirectMask|ButtonPressMask|ButtonReleaseMask\ |KeyPressMask|KeyReleaseMask) - +#endif /**** Global variables ****/ @@ -559,13 +570,20 @@ wScreenInit(int screen_number) scr->scr_width = WidthOfScreen(ScreenOfDisplay(dpy, screen_number)); scr->scr_height = HeightOfScreen(ScreenOfDisplay(dpy, screen_number)); + scr->usableArea.x2 = scr->scr_width; + scr->usableArea.y2 = scr->scr_height; + scr->totalUsableArea.x2 = scr->scr_width; + scr->totalUsableArea.y2 = scr->scr_height; + CantManageScreen = 0; oldHandler = XSetErrorHandler((XErrorHandler)alreadyRunningError); event_mask = EVENT_MASK; - if (wPreferences.disable_root_mouse) + if (wPreferences.disable_root_mouse) { event_mask &= ~(ButtonPressMask|ButtonReleaseMask); + } + XSelectInput(dpy, scr->root_win, event_mask); XSync(dpy, False); @@ -619,9 +637,15 @@ wScreenInit(int screen_number) scr->white_pixel = scr->rcontext->white; /* create screen descriptor for WINGs */ - scr->wmscreen = WMCreateScreenWithRContext(dpy, screen_number, + scr->wmscreen = WMCreateScreenWithRContext(dpy, screen_number, scr->rcontext); + if (!scr->wmscreen) { + wfatal(_("could not do initialization of WINGs widget set")); + + return NULL; + } + color = WMGrayColor(scr->wmscreen); scr->light_pixel = WMColorPixel(color); WMReleaseColor(color); @@ -643,11 +667,19 @@ wScreenInit(int screen_number) /* read defaults for this screen */ wReadDefaults(scr, WDWindowMaker->dictionary); + createInternalWindows(scr); + +#ifdef KWM_HINTS + wKWMInitStuff(scr); +#endif + +#ifdef GNOME_STUFF + wGNOMEInitStuff(scr); +#endif + /* create initial workspace */ wWorkspaceNew(scr); - createInternalWindows(scr); - /* create shared pixmaps */ createPixmaps(scr); @@ -668,15 +700,138 @@ wScreenInit(int screen_number) wBalloonInitialize(scr); #endif + wScreenUpdateUsableArea(scr); + +#ifndef LITE /* kluge to load menu configurations at startup */ OpenRootMenu(scr, -10000, -10000, False); wMenuUnmap(scr->root_menu); +#endif return scr; } void +wScreenUpdateUsableArea(WScreen *scr) +{ +#ifdef GNOME_STUFF + WReservedArea *area; +#endif + + scr->totalUsableArea = scr->usableArea; + + + if (scr->dock && (!scr->dock->lowered + || wPreferences.no_window_over_dock)) { + + int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE; + + if (scr->dock->on_right_side) { + scr->totalUsableArea.x2 = WMIN(scr->totalUsableArea.x2, + scr->scr_width - offset); + } else { + scr->totalUsableArea.x1 = WMAX(scr->totalUsableArea.x1, offset); + } + } + + if (wPreferences.no_window_over_icons) { + if (wPreferences.icon_yard & IY_VERT) { + + if (!(wPreferences.icon_yard & IY_RIGHT)) { + scr->totalUsableArea.x1 += wPreferences.icon_size; + } else { + scr->totalUsableArea.x2 -= wPreferences.icon_size; + } + } else { + + if (wPreferences.icon_yard & IY_TOP) { + scr->totalUsableArea.y1 += wPreferences.icon_size; + } else { + scr->totalUsableArea.y2 -= wPreferences.icon_size; + } + } + } + +#ifdef KWM_HINTS + { + WArea area; + + if (wKWMGetUsableArea(scr, &area)) { + scr->totalUsableArea.x1 = WMAX(scr->totalUsableArea.x1, area.x1); + scr->totalUsableArea.y1 = WMAX(scr->totalUsableArea.y1, area.y1); + scr->totalUsableArea.x2 = WMIN(scr->totalUsableArea.x2, area.x2); + scr->totalUsableArea.y2 = WMIN(scr->totalUsableArea.y2, area.y2); + } + } +#endif + +#ifdef GNOME_STUFF + area = scr->reservedAreas; + + while (area) { + int th, bh; + int lw, rw; + int w, h; + + w = area->area.x2 - area->area.x1; + h = area->area.y2 - area->area.y1; + + th = area->area.y1; + bh = scr->scr_height - area->area.y2; + lw = area->area.x1; + rw = scr->scr_width - area->area.x2; + + if (WMIN(th, bh) < WMIN(lw, rw)) { + /* horizontal */ + if (th < bh) { + /* on top */ + if (scr->totalUsableArea.y1 < area->area.y2) + scr->totalUsableArea.y1 = area->area.y2; + } else { + /* on bottom */ + if (scr->totalUsableArea.y2 > area->area.y1) + scr->totalUsableArea.y2 = area->area.y1; + } + } else { + /* vertical */ + if (lw < rw) { + /* on left */ + if (scr->totalUsableArea.x1 < area->area.x2) + scr->totalUsableArea.x1 = area->area.x2; + } else { + /* on right */ + if (scr->totalUsableArea.x2 > area->area.x1) + scr->totalUsableArea.x2 = area->area.x1; + } + } + + area = area->next; + } +#endif /* GNOME_STUFF */ + + if (scr->totalUsableArea.x2 - scr->totalUsableArea.x1 < scr->scr_width/2) { + scr->totalUsableArea.x2 = scr->usableArea.x2; + scr->totalUsableArea.x1 = scr->usableArea.x1; + } + if (scr->totalUsableArea.y2 - scr->totalUsableArea.y1 < scr->scr_height/2) { + scr->totalUsableArea.y2 = scr->usableArea.y2; + scr->totalUsableArea.y1 = scr->usableArea.y1; + } + +#ifdef KWM_HINTS + { + int i; + + for (i = 0; i < scr->workspace_count; i++) { + wKWMSetUsableAreaHint(scr, i); + } + } +#endif +} + + +void wScreenRestoreState(WScreen *scr) { proplist_t state; @@ -713,6 +868,7 @@ wScreenRestoreState(WScreen *scr) scr->dock = wDockRestoreState(scr, state, WM_DOCK); } + wScreenUpdateUsableArea(scr); } @@ -838,3 +994,5 @@ wScreenBringInside(WScreen *scr, int *x, int *y, int width, int height) return moved; } + + diff --git a/src/screen.h b/src/screen.h index 44b349d1..485f8e7d 100644 --- a/src/screen.h +++ b/src/screen.h @@ -43,17 +43,6 @@ typedef struct WFont { short y; } WFont; -#ifdef EXPERIMENTAL -typedef struct { - Pixmap pixmap; /* None means use pixel */ - WMPixel pixel; - proplist_t spec; /* retained */ - pid_t pid; /* If !=0, process ID of wmsetbg that - * is rendering the pixmap for this - * texture. Set to 0 when finishes */ -} WWorkspaceTexture; -#endif /* EXPERIMENTAL */ - #define WTB_LEFT 0 #define WTB_RIGHT 1 @@ -63,6 +52,16 @@ typedef struct { #define WTB_PFOCUSED 4 #define WTB_MENU 6 +#ifdef GNOME_STUFF +/* an area of the screen reserved by some window */ +typedef struct WReservedArea { + WArea area; + Window window; + struct WReservedArea *next; +} WReservedArea; +#endif + + /* * each WScreen is saved into a context associated with it's root window @@ -113,16 +112,24 @@ typedef struct _WScreen { /* int window_level_count[MAX_WINDOW_LEVELS];*/ int window_count; /* number of windows in window_list */ -#ifdef EXPERIMENTAL - WWorkspaceTexture *defaultTexture; - WWorkspaceTexture **wspaceTextures; - int wspaceTextureCount; -#endif /* EXPERIMENTAL */ - int workspace_count; /* number of workspaces */ + struct WWorkspace **workspaces; /* workspace array */ + int current_workspace; /* current workspace number */ + +#ifdef GNOME_STUFF + WReservedArea *reservedAreas; /* used to build totalUsableArea */ +#endif + + WArea usableArea; /* area of the workspace where + * we can put windows on, as defined + * by other clients (not us) */ + WArea totalUsableArea; /* same as above, but including + * the dock and other stuff */ + + WMPixel black_pixel; WMPixel white_pixel; @@ -190,9 +197,11 @@ typedef struct _WScreen { struct WPixmap *menu_shade_indicator; /* for shaded window */ int app_menu_x, app_menu_y; /* position for application menus */ +#ifndef LITE struct WMenu *root_menu; /* root window menu */ - struct WMenu *workspace_menu; /* workspace operation */ struct WMenu *switch_menu; /* window list menu */ +#endif + struct WMenu *workspace_menu; /* workspace operation */ struct WMenu *window_menu; /* window command menu */ struct WMenu *icon_menu; /* icon/appicon menu */ struct WMenu *workspace_submenu; /* workspace list for window_menu */ @@ -213,6 +222,7 @@ typedef struct _WScreen { * window resize, move etc. */ unsigned int geometry_display_width; unsigned int geometry_display_height; + int keymove_tick; struct RContext *rcontext; @@ -246,12 +256,19 @@ typedef struct _WScreen { * raised */ /* for window shortcuts */ - struct WWindow *shortcutWindow[4]; + struct WWindow *shortcutWindow[MAX_WINDOW_SHORTCUTS]; #ifdef XDE_DND char *xdestring; #endif - + +#ifdef KWM_HINTS + Window kwm_dock; +#endif + + int helper_fd; + pid_t helper_pid; + struct { unsigned int startup:1; /* during window manager startup */ unsigned int regenerate_icon_textures:1; @@ -262,8 +279,13 @@ typedef struct _WScreen { unsigned int supports_tiff:1; unsigned int clip_balloon_mapped:1; unsigned int next_click_is_not_double:1; + unsigned int backimage_helper_launched:1; /* some client has issued a WM_COLORMAP_NOTIFY */ unsigned int colormap_stuff_blocked:1; +#ifdef KWM_HINTS + unsigned int kwm_syncing_name:1; + unsigned int kwm_syncing_count:1; +#endif } flags; } WScreen; @@ -295,4 +317,8 @@ WScreen *wScreenWithNumber(int i); WScreen *wScreenForRootWindow(Window window); /* window must be valid */ WScreen *wScreenForWindow(Window window); /* slower than above functions */ +void wScreenFinish(WScreen *scr); + +void wScreenUpdateUsableArea(WScreen *scr); + #endif diff --git a/src/session.c b/src/session.c index b0466161..f6b0a46e 100644 --- a/src/session.c +++ b/src/session.c @@ -254,7 +254,7 @@ wSessionSaveState(WScreen *scr) WApplication *wapp=wApplicationOf(wwin->main_window); if (wwin->transient_for==None && list_find(wapp_list, wapp)==NULL - && !wwin->window_flags.dont_save_session) { + && !WFLAGP(wwin, dont_save_session)) { /* A entry for this application was not yet saved. Save one. */ if ((win_info = makeWindowState(wwin, wapp))!=NULL) { list = PLAppendArrayElement(list, win_info); @@ -313,8 +313,6 @@ execCommand(WScreen *scr, char *command, char *host) SetupEnvironment(scr); - CloseDescriptors(); - args = malloc(sizeof(char*)*(argc+1)); if (!args) exit(111); @@ -385,7 +383,6 @@ getWindowState(WScreen *scr, proplist_t win_state) #define SAME(x, y) (((x) && (y) && !strcmp((x), (y))) || (!(x) && !(y))) - void wSessionRestoreState(WScreen *scr) { @@ -570,16 +567,144 @@ wSessionRestoreLastWorkspace(WScreen *scr) * WM_CLASSS.class * WM_WINDOW_ROLE * geometry - * (state array (miniaturized, shaded, etc)) - * workspace - * wich dock + * state = (miniaturized, shaded, etc) + * attribute + * workspace # + * app state = (which dock, hidden) + * window shortcut # */ + +static proplist_t +makeAppState(WWindow *wwin) +{ + WApplication *wapp; + proplist_t state; + WScreen *scr = wwin->screen_ptr; + + state = PLMakeArrayWithElements(NULL, NULL); + + wapp = wApplicationOf(wwin->main_window); + + if (wapp) { + if (wapp->app_icon && wapp->app_icon->dock) { + + if (wapp->app_icon->dock == scr->dock) { + PLAppendArrayElement(state, PLMakeString("Dock")); + } else { + int i; + + for(i=0; i<scr->workspace_count; i++) + if(scr->workspaces[i]->clip == wapp->app_icon->dock) + break; + + assert(i < scr->workspace_count); + + PLAppendArrayElement(state, + PLMakeString(scr->workspaces[i]->name)); + } + } + + PLAppendArrayElement(state, PLMakeString(wapp->hidden ? "1" : "0")); + } + + return state; +} + + +static proplist_t +makeAttributeState(WWindow *wwin) +{ + unsigned int data1, data2; + char buffer[256]; + +#define W_FLAG(wwin, FLAG) ((wwin)->defined_user_flags.FLAG \ + ? (wwin)->user_flags.FLAG : -1) + + sprintf(buffer, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i", + W_FLAG(no_titlebar), + W_FLAG(no_resizable), + W_FLAG(no_closable), + W_FLAG(no_miniaturizable), + W_FLAG(no_resizebar), + W_FLAG(no_close_button), + W_FLAG(no_miniaturize_button), + /* + W_FLAG(broken_close), + W_FLAG(kill_close), + */ + W_FLAG(no_shadeable), + W_FLAG(omnipresent), + W_FLAG(skip_window_list), + W_FLAG(floating), + W_FLAG(sunken), + W_FLAG(no_bind_keys), + W_FLAG(no_bind_mouse), + W_FLAG(no_hide_others), + W_FLAG(no_appicon), + W_FLAG(dont_move_off), + W_FLAG(no_focusable), + W_FLAG(always_user_icon), + W_FLAG(start_miniaturized), + W_FLAG(start_hidden), + W_FLAG(start_maximized), + W_FLAG(dont_save_session), + W_FLAG(emulate_appicon)); + + return PLMakeString(buffer); +} + + static proplist_t makeClientState(WWindow *wwin) { - proplist_t key; + proplist_t state; + proplist_t tmp; + char *str; + char buffer[256]; + int i; + + state = PLMakeArrayWithElements(NULL, NULL); + + /* spec */ + PLAppendArrayElement(state, PLMakeString(wwin->wm_instance)); + PLAppendArrayElement(state, PLMakeString(wwin->wm_class)); + + PLAppendArrayElement(state, PLMakeString(str)); + + /* geometry */ + sprintf(buffer, "%i %i %i %i", wwin->frame_x, wwin->frame_y, + wwin->frame->core->width, wwin->frame->core->height); + PLAppendArrayElement(state, PLMakeString(buffer)); + + /* state */ + sprintf(buffer, "%i %i %i", wwin->flags.miniaturized, + wwin->flags.shaded, wwin->flags.maximized); + PLAppendArrayElement(state, PLMakeString(buffer)); + + /* attributes */ + PLAppendArrayElement(state, makeAttributeState(wwin)); + + /* workspace */ + sprintf(buffer, "%i", wwin->frame->workspace); + PLAppendArrayElement(state, PLMakeString(buffer)); + + /* app state (repeated for all windows of the app) */ + PLAppendArrayElement(state, makeAppState(wwin)); + + /* shortcuts */ + tmp = PLMakeArrayWithElements(NULL, NULL); + for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { + + if (scr->shortcutWindow[i] == wwin) { + sprintf(buffer, "%i", i); + PLAppendArrayElement(tmp, PLMakeString(buffer)); + } + } + PLAppendArrayElement(state, tmp); + + return state; } @@ -647,8 +772,8 @@ smSaveYourselfPhase2Proc(SmcConn smc_conn, SmPointer client_data) * Format: * * state_file ::= dictionary with version_info ; state - * version_info ::= version = 1; - * state ::= state = array of screen_info + * version_info ::= 'version' = '1'; + * state ::= 'state' = array of screen_info * screen_info ::= array of (screen number, window_info, window_info, ...) * window_info ::= */ @@ -680,7 +805,7 @@ smSaveYourselfPhase2Proc(SmcConn smc_conn, SmPointer client_data) proplist_t statefile; statefile = PLMakeDictionaryFromEntries(PLMakeString("Version"), - PLMakeString("1"), + PLMakeString("1.0"), PLMakeString("Screens"), state, @@ -805,10 +930,7 @@ smDieProc(SmcConn smc_conn, SmPointer client_data) wSessionDisconnectManager(); - RestoreDesktop(NULL); - - ExecExitScript(); - Exit(0); + Shutdown(WSExitMode); } @@ -910,7 +1032,10 @@ wSessionConnectManager(char **argv, int argc) /* check for session manager clients */ iceConn = SmcGetIceConnection(smcConn); - + + if (fcntl(IceConnectionNumber(iceConn), F_SETFD, FD_CLOEXEC) < 0) { + wsyserror("error setting close-on-exec flag for ICE connection"); + } sSMInputHandler = WMAddInputHandler(IceConnectionNumber(iceConn), WIReadMask, iceMessageProc, iceConn); @@ -960,12 +1085,6 @@ wSessionConnectManager(char **argv, int argc) } -void -_wSessionCloseDescriptors(void) -{ - if (sSMCConn) - close(IceConnectionNumber(SmcGetIceConnection(smcConn))); -} void wSessionDisconnectManager(void) diff --git a/src/shutdown.c b/src/shutdown.c index 760943a9..15ef1e23 100644 --- a/src/shutdown.c +++ b/src/shutdown.c @@ -22,6 +22,8 @@ #include "wconfig.h" #include <stdlib.h> +#include <signal.h> +#include <unistd.h> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -33,12 +35,106 @@ #include "funcs.h" #include "properties.h" #include "winspector.h" - +#ifdef KWM_HINTS +#include "kwm.h" +#endif extern Atom _XA_WM_DELETE_WINDOW; extern Time LastTimestamp; extern int wScreenCount; + +static void wipeDesktop(WScreen *scr); + + +/* + *---------------------------------------------------------------------- + * Shutdown- + * Exits the window manager cleanly. If mode is WSLogoutMode, + * the whole X session will be closed, by killing all clients if + * no session manager is running or by asking a shutdown to + * it if its present. + * + *---------------------------------------------------------------------- + */ +void +Shutdown(WShutdownMode mode) +{ + int i; + + switch (mode) { + case WSExitMode: + for (i=0; i<wScreenCount; i++) { + WScreen *scr; + + scr = wScreenWithNumber(i); + if (scr) { + if (scr->helper_pid) + kill(scr->helper_pid, SIGKILL); + +#ifdef KWM_HINTS + wKWMShutdown(scr); +#endif + wScreenSaveState(scr); + + RestoreDesktop(scr); + } + } + + ExecExitScript(); + Exit(0); + break; + + case WSLogoutMode: +#ifdef R6SM + wSessionRequestShutdown(); + break; +#else + /* fall through */ +#endif + case WSKillMode: + for (i=0; i<wScreenCount; i++) { + WScreen *scr; + + scr = wScreenWithNumber(i); + if (scr) { + if (scr->helper_pid) + kill(scr->helper_pid, SIGKILL); +#ifdef KWM_HINTS + wKWMShutdown(scr); +#endif + wScreenSaveState(scr); + + wipeDesktop(scr); + } + } + ExecExitScript(); + Exit(0); + break; + + case WSRestartPreparationMode: + for (i=0; i<wScreenCount; i++) { + WScreen *scr; + + scr = wScreenWithNumber(i); + if (scr) { + if (scr->helper_pid) + kill(scr->helper_pid, SIGKILL); +#ifdef KWM_HINTS + wKWMShutdown(scr); +#endif + wScreenSaveState(scr); + + RestoreDesktop(scr); + } + } + break; + } +} + + + + /* *---------------------------------------------------------------------- * RestoreDesktop-- @@ -56,18 +152,11 @@ RestoreDesktop(WScreen *scr) { int i; - if (!scr) { - int j; - for (j=0; j<wScreenCount; j++) { - WScreen *scr; - scr = wScreenWithNumber(j); - if (scr) { - RestoreDesktop(scr); - } - } - return; + if (scr->helper_pid) { + kill(scr->helper_pid, SIGTERM); + scr->helper_pid = 0; } - + XGrabServer(dpy); wDestroyInspectorPanels(); @@ -106,7 +195,7 @@ RestoreDesktop(WScreen *scr) /* *---------------------------------------------------------------------- - * WipeDesktop-- + * wipeDesktop-- * Kills all windows in a screen. Send DeleteWindow to all windows * that support it and KillClient on all windows that don't. * @@ -116,23 +205,11 @@ RestoreDesktop(WScreen *scr) * TODO: change to XQueryTree() *---------------------------------------------------------------------- */ -void -WipeDesktop(WScreen *scr) +static void +wipeDesktop(WScreen *scr) { WWindow *wwin; - if (!scr) { - int j; - for (j=0; j<wScreenCount; j++) { - WScreen *scr; - scr = wScreenWithNumber(j); - if (scr) { - WipeDesktop(scr); - } - } - return; - } - wwin = scr->focused_window; while (wwin) { if (wwin->protocols.DELETE_WINDOW) diff --git a/src/stacking.c b/src/stacking.c index 0fd35551..7f52abcb 100644 --- a/src/stacking.c +++ b/src/stacking.c @@ -34,6 +34,9 @@ #include "actions.h" #include "properties.h" #include "stacking.h" +#ifdef KWM_HINTS +#include "kwm.h" +#endif /*** Global Variables ***/ extern XContext wStackContext; @@ -162,7 +165,7 @@ CommitStacking(WScreen *scr) * Changes the stacking order of frame. *---------------------------------------------------------------------- */ -static void +void moveFrameToUnder(WCoreWindow *under, WCoreWindow *frame) { Window wins[2]; @@ -200,8 +203,8 @@ wRaiseFrame(WCoreWindow *frame) /* insert on top of other windows */ while (wlist) - wlist = wlist->stacking->above; - + wlist = wlist->stacking->above; + /* window is inserted before the point found */ if (wlist==NULL) { /* top most window (last on the list) */ @@ -262,7 +265,7 @@ wRaiseFrame(WCoreWindow *frame) /* can't optimize */ above = frame->screen_ptr->stacking_list[i]; while (above->stacking->under) - above = above->stacking->under; + above = above->stacking->under; break; } } @@ -274,6 +277,14 @@ wRaiseFrame(WCoreWindow *frame) } else { moveFrameToUnder(frame->stacking->above, frame); } +#ifdef KWM_HINTS + { + WWindow *wwin = wWindowFor(frame->window); + + if (wwin) + wKWMSendEventMessage(wwin, WKWMRaiseWindow); + } +#endif } void @@ -362,6 +373,14 @@ wLowerFrame(WCoreWindow *frame) } else { moveFrameToUnder(frame->stacking->above, frame); } +#ifdef KWM_HINTS + { + WWindow *wwin = wWindowFor(frame->window); + + if (wwin) + wKWMSendEventMessage(wwin, WKWMLowerWindow); + } +#endif } @@ -500,7 +519,7 @@ MoveInStackListAbove(WCoreWindow *next, WCoreWindow *frame) /* *---------------------------------------------------------------------- * MoveInStackListUnder-- - * Moves the frame under "prev". + * Moves the frame to under "prev". * * Returns: * None diff --git a/src/startup.c b/src/startup.c index d25dc0d5..909ee914 100644 --- a/src/startup.c +++ b/src/startup.c @@ -42,9 +42,6 @@ #include "WindowMaker.h" #include "GNUstep.h" -#ifdef MWM_HINTS -# include "motif.h" -#endif #include "texture.h" #include "screen.h" #include "window.h" @@ -64,6 +61,10 @@ #include "wmsound.h" #endif +#ifdef KWM_HINTS +#include "kwm.h" +#endif + #if 0 #ifdef SYS_SIGLIST_DECLARED extern const char * const sys_siglist[]; @@ -154,10 +155,6 @@ static void manageAllWindows(); extern void NotifyDeadProcess(pid_t pid, unsigned char status); -#ifdef R6SM -extern void _wSessionCloseDescriptors(); -#endif - static int catchXError(Display *dpy, XErrorEvent *error) @@ -209,6 +206,7 @@ static int handleXIO(Display *dpy) { Exit(0); + return 0; } @@ -289,15 +287,23 @@ handleSig(int sig) wfatal(_("got signal %i\n"), sig); #endif - if (sig==SIGSEGV || sig==SIGFPE || sig==SIGBUS || sig==SIGILL) { + if (sig==SIGSEGV || sig==SIGFPE || sig==SIGBUS || sig==SIGILL + || sig==SIGABRT) { if (already_crashed) { wfatal(_("crashed while trying to do some post-crash cleanup. Aborting immediatelly.")); +#ifndef NO_EMERGENCY_AUTORESTART + exit(1); +#else abort(); +#endif } already_crashed = 1; dumpcore = 1; + wfatal(_("a fatal error has occured, probably due to a bug. " + "Please fill the included BUGFORM and report it.")); + #ifndef NO_EMERGENCY_AUTORESTART /* restart another window manager so that the X session doesn't * go to space */ @@ -386,7 +392,7 @@ getOffendingModifiers() int i; XModifierKeymap *modmap; KeyCode nlock, slock; - static mask_table[8] = { + static int mask_table[8] = { ShiftMask,LockMask,ControlMask,Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; @@ -562,16 +568,6 @@ wScreenForWindow(Window window) } -void -CloseDescriptors() -{ - if (dpy) - close(ConnectionNumber(dpy)); -#ifdef R6SM - _wSessionCloseDescriptors(); -#endif -} - /* *---------------------------------------------------------- @@ -621,9 +617,6 @@ StartUp(Bool defaultScreenOnly) _XA_WM_COLORMAP_NOTIFY = XInternAtom(dpy, "WM_COLORMAP_NOTIFY", False); _XA_GNUSTEP_WM_ATTR = XInternAtom(dpy, GNUSTEP_WM_ATTR_NAME, False); -#ifdef MWM_HINTS - _XA_MOTIF_WM_HINTS = XInternAtom(dpy, "_MOTIF_WM_HINTS", False); -#endif _XA_WINDOWMAKER_MENU = XInternAtom(dpy, "_WINDOWMAKER_MENU", False); _XA_WINDOWMAKER_STATE = XInternAtom(dpy, "_WINDOWMAKER_STATE", False); @@ -675,6 +668,9 @@ StartUp(Bool defaultScreenOnly) sigaction(SIGSEGV, &sig_action, NULL); sigaction(SIGBUS, &sig_action, NULL); sigaction(SIGFPE, &sig_action, NULL); +#ifndef NO_EMERGENCY_AUTORESTART + sigaction(SIGABRT, &sig_action, NULL); +#endif /* Here we set SA_RESTART for safety, because SIGHUP may not be handled * immediately. @@ -814,6 +810,10 @@ StartUp(Bool defaultScreenOnly) } else { wSessionRestoreLastWorkspace(wScreen[j]); } + +#ifdef KWM_HINTS + wKWMSetInitializedHint(wScreen[j]); +#endif } if (wScreenCount == 0) { @@ -914,6 +914,10 @@ manageAllWindows(WScreen *scr) if (children[i]==None) continue; +#ifdef KWM_HINTS + wKWMCheckModule(scr, children[i]); +#endif + XGetWindowAttributes(dpy, children[i], &wattribs); state = getState(children[i]); @@ -978,6 +982,7 @@ manageAllWindows(WScreen *scr) XFree(children); scr->flags.startup = 0; scr->flags.startup2 = 1; + while (XPending(dpy)) { XEvent ev; WMNextEvent(dpy, &ev); diff --git a/src/switchmenu.c b/src/switchmenu.c index ba13b3d9..0574b67a 100644 --- a/src/switchmenu.c +++ b/src/switchmenu.c @@ -23,6 +23,8 @@ #include "wconfig.h" +#ifndef LITE + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -128,6 +130,37 @@ OpenSwitchMenu(WScreen *scr, int x, int y, int keyboard) } } + +static int +menuIndexForWindow(WMenu *menu, WWindow *wwin, int old_pos) +{ + int idx; + + if (menu->entry_no == 0) + return -1; + +#define WS(i) ((WWindow*)menu->entries[i]->clientdata)->frame->workspace + if (old_pos >= 0) { + if (WS(old_pos) >= wwin->frame->workspace + && (old_pos == 0 || WS(old_pos-1) <= wwin->frame->workspace)) { + return old_pos; + } + } +#undef WS + + for (idx = 0; idx < menu->entry_no; idx++) { + WWindow *tw = (WWindow*)menu->entries[idx]->clientdata; + + if (!IS_OMNIPRESENT(tw) + && tw->frame->workspace > wwin->frame->workspace) { + break; + } + } + + return idx; +} + + /* * * Update switch menu @@ -152,29 +185,38 @@ UpdateSwitchMenu(WScreen *scr, WWindow *wwin, int action) * 2. When a window is destroyed. * * 3. When a window changes it's title. + * 4. When a window changes its workspace. */ if (action == ACTION_ADD) { char *t; - if (wwin->flags.internal_window - || wwin->window_flags.skip_window_list) - return; + int idx; + + if (wwin->flags.internal_window || WFLAGP(wwin, skip_window_list)) + return; if (wwin->frame->title) sprintf(title, "%s", wwin->frame->title); else sprintf(title, "%s", DEF_WINDOW_TITLE); t = ShrinkString(scr->menu_entry_font, title, MAX_WINDOWLIST_WIDTH); - entry = wMenuAddCallback(switchmenu, t, focusWindow, wwin); + + if (IS_OMNIPRESENT(wwin)) + idx = -1; + else { + idx = menuIndexForWindow(switchmenu, wwin, -1); + } + + entry = wMenuInsertCallback(switchmenu, idx, t, focusWindow, wwin); free(t); entry->flags.indicator = 1; entry->rtext = wmalloc(MAX_WORKSPACENAME_WIDTH+8); - if (wwin->window_flags.omnipresent) + if (IS_OMNIPRESENT(wwin)) sprintf(entry->rtext, "[*]"); else sprintf(entry->rtext, "[%s]", scr->workspaces[wwin->frame->workspace]->name); - + if (wwin->flags.hidden) { entry->flags.indicator_type = MI_HIDDEN; entry->flags.indicator_on = 1; @@ -216,14 +258,45 @@ UpdateSwitchMenu(WScreen *scr, WWindow *wwin, int action) t = ShrinkString(scr->menu_entry_font, title, MAX_WINDOWLIST_WIDTH); entry->text = t; - /* fall through to update workspace number */ + + wMenuRealize(switchmenu); + checkVisibility = 1; + break; + case ACTION_CHANGE_WORKSPACE: if (entry->rtext) { - if (wwin->window_flags.omnipresent) + int idx = -1; + char *t, *rt; + int it, ion; + + if (IS_OMNIPRESENT(wwin)) { sprintf(entry->rtext, "[*]"); - else + } else { sprintf(entry->rtext, "[%s]", scr->workspaces[wwin->frame->workspace]->name); + } + + rt = entry->rtext; + entry->rtext = NULL; + t = entry->text; + entry->text = NULL; + + it = entry->flags.indicator_type; + ion = entry->flags.indicator_on; + + wMenuRemoveItem(switchmenu, i); + + if (!IS_OMNIPRESENT(wwin) && idx < 0) { + idx = menuIndexForWindow(switchmenu, wwin, i); + } + + entry = wMenuInsertCallback(switchmenu, idx, t, + focusWindow, wwin); + free(t); + entry->rtext = rt; + entry->flags.indicator = 1; + entry->flags.indicator_type = it; + entry->flags.indicator_on = ion; } wMenuRealize(switchmenu); checkVisibility = 1; @@ -280,8 +353,8 @@ UpdateSwitchMenuWorkspace(WScreen *scr, int workspace) wwin = (WWindow*)menu->entries[i]->clientdata; if (wwin->frame->workspace==workspace - && !wwin->window_flags.omnipresent) { - if (wwin->window_flags.omnipresent) + && !IS_OMNIPRESENT(wwin)) { + if (IS_OMNIPRESENT(wwin)) sprintf(menu->entries[i]->rtext, "[*]"); else sprintf(menu->entries[i]->rtext, "[%s]", @@ -292,3 +365,6 @@ UpdateSwitchMenuWorkspace(WScreen *scr, int workspace) if (!menu->flags.realized) wMenuRealize(menu); } + + +#endif /* !LITE */ diff --git a/src/texture.c b/src/texture.c index 0c93ea0f..ef95bdcd 100644 --- a/src/texture.c +++ b/src/texture.c @@ -145,7 +145,7 @@ wTextureDestroy(WScreen *scr, WTexture *texture) /* * some stupid servers don't like white or black being freed... */ -#define CANFREE(c) (c!=scr->black_pixel && c!=scr->white_pixel) +#define CANFREE(c) (c!=scr->black_pixel && c!=scr->white_pixel && c!=0) switch (texture->any.type) { case WTEX_SOLID: XFreeGC(dpy, texture->solid.light_gc); @@ -171,6 +171,12 @@ wTextureDestroy(WScreen *scr, WTexture *texture) } free(texture->mgradient.colors); break; + + case WTEX_THGRADIENT: + case WTEX_TVGRADIENT: + case WTEX_TDGRADIENT: + RDestroyImage(texture->tgradient.pixmap); + break; } if (CANFREE(texture->any.color.pixel)) colors[count++] = texture->any.color.pixel; @@ -179,6 +185,7 @@ wTextureDestroy(WScreen *scr, WTexture *texture) /* ignore error from buggy servers that don't know how * to do reference counting for colors. */ + XSync(dpy,0); oldhandler = XSetErrorHandler(dummyErrorHandler); XFreeColors(dpy, scr->colormap, colors, count, 0); XSync(dpy,0); @@ -192,7 +199,7 @@ wTextureDestroy(WScreen *scr, WTexture *texture) WTexGradient* -wTextureMakeGradient(WScreen *scr, int style, XColor *from, XColor *to) +wTextureMakeGradient(WScreen *scr, int style, RColor *from, RColor *to) { WTexGradient *texture; XGCValues gcv; @@ -206,9 +213,9 @@ wTextureMakeGradient(WScreen *scr, int style, XColor *from, XColor *to) texture->color1 = *from; texture->color2 = *to; - texture->normal.red = (from->red + to->red)/2; - texture->normal.green = (from->green + to->green)/2; - texture->normal.blue = (from->blue + to->blue)/2; + texture->normal.red = (from->red + to->red)<<7; + texture->normal.green = (from->green + to->green)<<7; + texture->normal.blue = (from->blue + to->blue)<<7; XAllocColor(dpy, scr->w_colormap, &texture->normal); gcv.background = gcv.foreground = texture->normal.pixel; @@ -296,11 +303,62 @@ wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file, XColor *color) } + +WTexTGradient* +wTextureMakeTGradient(WScreen *scr, int style, RColor *from, RColor *to, + char *pixmap_file, int opacity) +{ + WTexTGradient *texture; + XGCValues gcv; + RImage *image; + char *file; + + file = FindImage(wPreferences.pixmap_path, pixmap_file); + if (!file) { + wwarning(_("image file \"%s\" used as texture could not be found."), + pixmap_file); + return NULL; + } + image = RLoadImage(scr->rcontext, file, 0); + if (!image) { + wwarning(_("could not load texture pixmap \"%s\":%s"), file, + RMessageForError(RErrorCode)); + free(file); + return NULL; + } + free(file); + + texture = wmalloc(sizeof(WTexture)); + memset(texture, 0, sizeof(WTexture)); + texture->type = style; + + texture->opacity = opacity; + + texture->color1 = *from; + texture->color2 = *to; + + texture->normal.red = (from->red + to->red)<<7; + texture->normal.green = (from->green + to->green)<<7; + texture->normal.blue = (from->blue + to->blue)<<7; + + XAllocColor(dpy, scr->w_colormap, &texture->normal); + gcv.background = gcv.foreground = texture->normal.pixel; + gcv.graphics_exposures = False; + texture->normal_gc = XCreateGC(dpy, scr->w_win, GCForeground|GCBackground + |GCGraphicsExposures, &gcv); + + texture->pixmap = image; + + return texture; +} + + + RImage* wTextureRenderImage(WTexture *texture, int width, int height, int relief) { RImage *image; - RColor color1, color2; + RColor color1; int d; int subtype; @@ -342,14 +400,9 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief) case WTEX_DGRADIENT: subtype = RGRD_DIAGONAL; render_gradient: - color1.red = texture->gradient.color1.red >> 8; - color1.green = texture->gradient.color1.green >> 8; - color1.blue = texture->gradient.color1.blue >> 8; - color2.red = texture->gradient.color2.red >> 8; - color2.green = texture->gradient.color2.green >> 8; - color2.blue = texture->gradient.color2.blue >> 8; - - image = RRenderGradient(width, height, &color1, &color2, subtype); + + image = RRenderGradient(width, height, &texture->gradient.color1, + &texture->gradient.color2, subtype); break; case WTEX_MHGRADIENT: @@ -367,10 +420,43 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief) &(texture->mgradient.colors[1]), subtype); break; - + + case WTEX_THGRADIENT: + subtype = RGRD_HORIZONTAL; + goto render_tgradient; + + case WTEX_TVGRADIENT: + subtype = RGRD_VERTICAL; + goto render_tgradient; + + case WTEX_TDGRADIENT: + subtype = RGRD_DIAGONAL; + render_tgradient: + { + RImage *grad; + + image = RMakeTiledImage(texture->tgradient.pixmap, width, height); + if (!image) + break; + + grad = RRenderGradient(width, height, &texture->tgradient.color1, + &texture->tgradient.color2, subtype); + if (!grad) { + RDestroyImage(image); + image = NULL; + break; + } + + RCombineImagesWithOpaqueness(image, grad, + texture->tgradient.opacity); + RDestroyImage(grad); + } + break; + default: puts("ERROR in wTextureRenderImage()"); image = NULL; + break; } if (!image) { diff --git a/src/texture.h b/src/texture.h index 4fe757ce..62a2c3c8 100644 --- a/src/texture.h +++ b/src/texture.h @@ -44,20 +44,15 @@ #define WTEX_MVGRADIENT ((1<<6)|WREL_BORDER_MASK) #define WTEX_MDGRADIENT ((1<<7)|WREL_BORDER_MASK) #define WTEX_PIXMAP (1<<8) +#define WTEX_THGRADIENT ((1<<9)|WREL_BORDER_MASK) +#define WTEX_TVGRADIENT ((1<<10)|WREL_BORDER_MASK) +#define WTEX_TDGRADIENT ((1<<11)|WREL_BORDER_MASK) /* pixmap subtypes */ #define WTP_TILE 2 #define WTP_SCALE 4 #define WTP_CENTER 6 -/* - * (solid <color>) - * (hgradient <color> <color>) - * (vgradient <color> <color>) - * (dgradient <color> <color>) - * (pixmap <file> <mode>) - */ - typedef struct { short type; /* type of texture */ @@ -89,8 +84,8 @@ typedef struct WTexGradient { XColor normal; GC normal_gc; - XColor color1; - XColor color2; + RColor color1; + RColor color2; } WTexGradient; @@ -113,16 +108,17 @@ typedef struct WTexPixmap { struct RImage *pixmap; } WTexPixmap; -typedef struct WTexCompose { +typedef struct WTexTGradient { short type; char subtype; XColor normal; GC normal_gc; - union WTexture *back; - union WTexture *fore; + RColor color1; + RColor color2; + struct RImage *pixmap; int opacity; -} WTexCompose; +} WTexTGradient; typedef union WTexture { WTexAny any; @@ -130,13 +126,14 @@ typedef union WTexture { WTexGradient gradient; WTexMGradient mgradient; WTexPixmap pixmap; - WTexCompose compose; + WTexTGradient tgradient; } WTexture; WTexSolid *wTextureMakeSolid(WScreen*, XColor*); -WTexGradient *wTextureMakeGradient(WScreen*, int, XColor*, XColor*); +WTexGradient *wTextureMakeGradient(WScreen*, int, RColor*, RColor*); WTexMGradient *wTextureMakeMGradient(WScreen*, int, RColor**); +WTexTGradient *wTextureMakeTGradient(WScreen*, int, RColor*, RColor*, char *, int); WTexPixmap *wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file, XColor *color); void wTextureDestroy(WScreen*, WTexture*); diff --git a/src/wconfig.h b/src/wconfig.h index bff15b07..17362bb7 100644 --- a/src/wconfig.h +++ b/src/wconfig.h @@ -74,6 +74,11 @@ */ #undef XDE_DND +/* + * support for Motif window manager (mwm) window hints + */ +#define MWM_HINTS + /* * Undefine BALLOON_TEXT if you don't want balloons for showing extra @@ -102,13 +107,10 @@ #define FALLBACK_WINDOWMANAGER "blackbox" -/* Define if you want MWM hint support (and consequently GNOME). */ -#define MWM_HINTS - - /* Define if you have a 5 button mouse and want to use button 4 * (in the root window) for switching to the previous workspace - * and 5 for the next */ + * and 5 for the next. This will not work if you enable + * DisableWSMouseActions or compile wmaker with --enable-lite */ #undef MOUSE_WS_SWITCH /* @@ -129,6 +131,16 @@ /* + * define EXTEND_WINDOWSHORTCUT if you have a great memory and want 10 + * window shortcuts instead of 4. You will also need to define the + * same thing in WPrefs.app/WPrefs.h to get the corresponding entries + * in WPrefs. + */ +#undef EXTEND_WINDOWSHORTCUT + + + +/* * define OPTIMIZE_SHAPE if you want the shape setting code to be optimized * for applications that change their shape frequently (like xdaliclock * -shape), removing flickering. If wmaker and your display are on @@ -146,6 +158,15 @@ /* + * disable/enable workspace indicator in the dock + */ + +#undef WS_INDICATOR + + +#define SILLYNESS + +/* *.......................................................................... * The following options WILL NOT BE MADE RUN-TIME. Please do not request. * They will only add unneeded bloat. @@ -205,6 +226,11 @@ #define DEFAULTS_DIR "Defaults" +/* the file of the system wide submenu to be forced into the main menu */ +/* remove the comments if you want it */ +/* +#define GLOBAL_SUBMENU_FILE PKGDATADIR"/GlobalMenu" +*/ /* pixmap path */ #define DEF_PIXMAP_PATHS \ @@ -248,6 +274,12 @@ #define DEF_APPMENU_X 10 #define DEF_APPMENU_Y 10 +/* number of window shortcuts */ +#ifdef EXTEND_WINDOWSHORTCUT +# define MAX_WINDOW_SHORTCUTS 10 +#else +# define MAX_WINDOW_SHORTCUTS 4 +#endif /* Window level where icons reside */ #define NORMAL_ICON_LEVEL WMNormalLevel @@ -284,7 +316,7 @@ #define BALLOON_DELAY 1000 /* delay for menu item selection hysteresis */ -#define MENU_SELECT_DELAY 300 +#define MENU_SELECT_DELAY 200 /* animation speed constants */ @@ -372,6 +404,13 @@ /* Delay (in ms) after which the clip will autocollapse when leaved */ #define AUTO_COLLAPSE_DELAY 1000 +/* Delay (in ms) after which the clip will be lowered when leaved */ +#define AUTO_LOWER_DELAY 1000 + +/* Delay (in ms) after which the clip will be raised when entered. + * Set this to zero if you want instant raise. */ +#define AUTO_RAISE_DELAY 650 + /* Max. number of icons the clip can have */ #define CLIP_MAX_ICONS 32 @@ -382,7 +421,8 @@ #define CURSOR_BLINK_RATE 300 -#define MOVE_THRESHOLD 3 /* how many pixels to move before dragging windows */ +#define MOVE_THRESHOLD 5 /* how many pixels to move before dragging windows + * and other objects */ #define HRESIZE_THRESHOLD 3 @@ -400,12 +440,8 @@ /* don't put titles in miniwindows */ #undef NO_MINIWINDOW_TITLES -/* - * disable/enable workspace indicator in the dock - */ - -#undef WS_INDICATOR +#define FRAME_BORDER_COLOR "black" /* *---------------------------------------------------------------------- @@ -418,8 +454,6 @@ #define WM_PI 3.14159265358979323846 -#define FRAME_BORDER_COLOR "black" - #define FRAME_BORDER_WIDTH 1 /* width of window border for frames */ #define RESIZEBAR_HEIGHT 8 /* height of the resizebar */ @@ -442,7 +476,12 @@ #define MAX_ICON_WIDTH 60 /* size of the icon pixmap */ #define MAX_ICON_HEIGHT 48 -#define MAX_WORKSPACES 100 +/* KDE may have problems with more than 32 workspaces */ +#ifdef KWM_HINTS +# define MAX_WORKSPACES 32 +#else +# define MAX_WORKSPACES 100 +#endif #define MAX_MENU_TEXT_LENGTH 512 diff --git a/src/wconfig.h.in b/src/wconfig.h.in index 733b85ba..1174ccb8 100644 --- a/src/wconfig.h.in +++ b/src/wconfig.h.in @@ -74,6 +74,11 @@ */ #undef XDE_DND +/* + * support for Motif window manager (mwm) window hints + */ +#define MWM_HINTS + /* * Undefine BALLOON_TEXT if you don't want balloons for showing extra @@ -102,13 +107,10 @@ #define FALLBACK_WINDOWMANAGER "blackbox" -/* Define if you want MWM hint support (and consequently GNOME). */ -#define MWM_HINTS - - /* Define if you have a 5 button mouse and want to use button 4 * (in the root window) for switching to the previous workspace - * and 5 for the next */ + * and 5 for the next. This will not work if you enable + * DisableWSMouseActions or compile wmaker with --enable-lite */ #undef MOUSE_WS_SWITCH /* @@ -129,6 +131,16 @@ /* + * define EXTEND_WINDOWSHORTCUT if you have a great memory and want 10 + * window shortcuts instead of 4. You will also need to define the + * same thing in WPrefs.app/WPrefs.h to get the corresponding entries + * in WPrefs. + */ +#undef EXTEND_WINDOWSHORTCUT + + + +/* * define OPTIMIZE_SHAPE if you want the shape setting code to be optimized * for applications that change their shape frequently (like xdaliclock * -shape), removing flickering. If wmaker and your display are on @@ -146,6 +158,15 @@ /* + * disable/enable workspace indicator in the dock + */ + +#undef WS_INDICATOR + + +#define SILLYNESS + +/* *.......................................................................... * The following options WILL NOT BE MADE RUN-TIME. Please do not request. * They will only add unneeded bloat. @@ -205,6 +226,11 @@ #define DEFAULTS_DIR "Defaults" +/* the file of the system wide submenu to be forced into the main menu */ +/* remove the comments if you want it */ +/* +#define GLOBAL_SUBMENU_FILE PKGDATADIR"/GlobalMenu" +*/ /* pixmap path */ #define DEF_PIXMAP_PATHS \ @@ -248,6 +274,12 @@ #define DEF_APPMENU_X 10 #define DEF_APPMENU_Y 10 +/* number of window shortcuts */ +#ifdef EXTEND_WINDOWSHORTCUT +# define MAX_WINDOW_SHORTCUTS 10 +#else +# define MAX_WINDOW_SHORTCUTS 4 +#endif /* Window level where icons reside */ #define NORMAL_ICON_LEVEL WMNormalLevel @@ -284,7 +316,7 @@ #define BALLOON_DELAY 1000 /* delay for menu item selection hysteresis */ -#define MENU_SELECT_DELAY 300 +#define MENU_SELECT_DELAY 200 /* animation speed constants */ @@ -372,6 +404,13 @@ /* Delay (in ms) after which the clip will autocollapse when leaved */ #define AUTO_COLLAPSE_DELAY 1000 +/* Delay (in ms) after which the clip will be lowered when leaved */ +#define AUTO_LOWER_DELAY 1000 + +/* Delay (in ms) after which the clip will be raised when entered. + * Set this to zero if you want instant raise. */ +#define AUTO_RAISE_DELAY 650 + /* Max. number of icons the clip can have */ #define CLIP_MAX_ICONS 32 @@ -382,7 +421,8 @@ #define CURSOR_BLINK_RATE 300 -#define MOVE_THRESHOLD 3 /* how many pixels to move before dragging windows */ +#define MOVE_THRESHOLD 5 /* how many pixels to move before dragging windows + * and other objects */ #define HRESIZE_THRESHOLD 3 @@ -400,12 +440,8 @@ /* don't put titles in miniwindows */ #undef NO_MINIWINDOW_TITLES -/* - * disable/enable workspace indicator in the dock - */ - -#undef WS_INDICATOR +#define FRAME_BORDER_COLOR "black" /* *---------------------------------------------------------------------- @@ -418,8 +454,6 @@ #define WM_PI 3.14159265358979323846 -#define FRAME_BORDER_COLOR "black" - #define FRAME_BORDER_WIDTH 1 /* width of window border for frames */ #define RESIZEBAR_HEIGHT 8 /* height of the resizebar */ @@ -442,7 +476,12 @@ #define MAX_ICON_WIDTH 60 /* size of the icon pixmap */ #define MAX_ICON_HEIGHT 48 -#define MAX_WORKSPACES 100 +/* KDE may have problems with more than 32 workspaces */ +#ifdef KWM_HINTS +# define MAX_WORKSPACES 32 +#else +# define MAX_WORKSPACES 100 +#endif #define MAX_MENU_TEXT_LENGTH 512 diff --git a/src/wdefaults.c b/src/wdefaults.c index 9e73149a..389729b6 100644 --- a/src/wdefaults.c +++ b/src/wdefaults.c @@ -78,6 +78,7 @@ static proplist_t AKeepInsideScreen; static proplist_t AUnfocusable; static proplist_t AAlwaysUserIcon; static proplist_t AStartMiniaturized; +static proplist_t AStartMaximized; static proplist_t AStartHidden; /* app */ static proplist_t ADontSaveSession; /* app */ static proplist_t AEmulateAppIcon; @@ -113,6 +114,7 @@ init_wdefaults(WScreen *scr) AAlwaysUserIcon = PLMakeString("AlwaysUserIcon"); AStartMiniaturized = PLMakeString("StartMiniaturized"); AStartHidden = PLMakeString("StartHidden"); + AStartMaximized = PLMakeString("StartMaximized"); ADontSaveSession = PLMakeString("DontSaveSession"); AEmulateAppIcon = PLMakeString("EmulateAppIcon"); @@ -167,9 +169,22 @@ get_value(proplist_t dict_win, proplist_t dict_class, proplist_t dict_name, } +/* + *---------------------------------------------------------------------- + * wDefaultFillAttributes-- + * Retrieves attributes for the specified instance/class and + * fills attr with it. Values that are actually defined are also + * set in mask. If useGlobalDefault is True, the default for + * all windows ("*") will be used for when no values are found + * for that instance/class. + * + *---------------------------------------------------------------------- + */ void wDefaultFillAttributes(WScreen *scr, char *instance, char *class, - WWindowAttributes *attr, Bool useGlobalDefault) + WWindowAttributes *attr, + WWindowAttributes *mask, + Bool useGlobalDefault) { proplist_t value; proplist_t key1, key2, key3; @@ -181,12 +196,12 @@ wDefaultFillAttributes(WScreen *scr, char *instance, char *class, key1 = PLMakeString(strcat(strcat(strcpy(buffer,instance),"."),class)); else key1 = NULL; - + if (instance) key2 = PLMakeString(instance); else key2 = NULL; - + if (class) key3 = PLMakeString(class); else @@ -219,82 +234,70 @@ wDefaultFillAttributes(WScreen *scr, char *instance, char *class, if (key3) PLRelease(key3); +#define APPLY_VAL(value, flag, attrib) \ + if (value) {attr->flag = getBool(attrib, value); \ + if (mask) mask->flag = 1;} + /* get the data */ value = get_value(dw, dc, dn, da, ANoTitlebar, No, useGlobalDefault); - if (value) - attr->no_titlebar = getBool(ANoTitlebar, value); + APPLY_VAL(value, no_titlebar, ANoTitlebar); value = get_value(dw, dc, dn, da, ANoResizebar, No, useGlobalDefault); - if (value) - attr->no_resizebar = getBool(ANoResizebar, value); + APPLY_VAL(value, no_resizebar, ANoResizebar); value = get_value(dw, dc, dn, da, ANoMiniaturizeButton, No, useGlobalDefault); - if (value) - attr->no_miniaturize_button = getBool(ANoMiniaturizeButton, value); + APPLY_VAL(value, no_miniaturize_button, ANoMiniaturizeButton); value = get_value(dw, dc, dn, da, ANoCloseButton, No, useGlobalDefault); - if (value) - attr->no_close_button = getBool(ANoCloseButton, value); + APPLY_VAL(value, no_close_button, ANoCloseButton); value = get_value(dw, dc, dn, da, ANoHideOthers, No, useGlobalDefault); - if (value) - attr->no_hide_others = getBool(ANoHideOthers, value); + APPLY_VAL(value, no_hide_others, ANoHideOthers); value = get_value(dw, dc, dn, da, ANoMouseBindings, No, useGlobalDefault); - if (value) - attr->no_bind_mouse = getBool(ANoMouseBindings, value); + APPLY_VAL(value, no_bind_mouse, ANoMouseBindings); value = get_value(dw, dc, dn, da, ANoKeyBindings, No, useGlobalDefault); - if (value) - attr->no_bind_keys = getBool(ANoKeyBindings, value); + APPLY_VAL(value, no_bind_keys, ANoKeyBindings); value = get_value(dw, dc, dn, da, ANoAppIcon, No, useGlobalDefault); - if (value) - attr->no_appicon = getBool(ANoAppIcon, value); + APPLY_VAL(value, no_appicon, ANoAppIcon); value = get_value(dw, dc, dn, da, AKeepOnTop, No, useGlobalDefault); - if (value) - attr->floating = getBool(AKeepOnTop, value); + APPLY_VAL(value, floating, AKeepOnTop); value = get_value(dw, dc, dn, da, AKeepOnBottom, No, useGlobalDefault); - if (value) - attr->floating = getBool(AKeepOnBottom, value); + APPLY_VAL(value, sunken, AKeepOnBottom); value = get_value(dw, dc, dn, da, AOmnipresent, No, useGlobalDefault); - if (value) - attr->omnipresent = getBool(AOmnipresent, value); + APPLY_VAL(value, omnipresent, AOmnipresent); value = get_value(dw, dc, dn, da, ASkipWindowList, No, useGlobalDefault); - if (value) - attr->skip_window_list = getBool(ASkipWindowList, value); + APPLY_VAL(value, skip_window_list, ASkipWindowList); value = get_value(dw, dc, dn, da, AKeepInsideScreen, No, useGlobalDefault); - if (value) - attr->dont_move_off = getBool(AKeepInsideScreen, value); + APPLY_VAL(value, dont_move_off, AKeepInsideScreen); value = get_value(dw, dc, dn, da, AUnfocusable, No, useGlobalDefault); - if (value) - attr->no_focusable = getBool(AUnfocusable, value); + APPLY_VAL(value, no_focusable, AUnfocusable); value = get_value(dw, dc, dn, da, AAlwaysUserIcon, No, useGlobalDefault); - if (value) - attr->always_user_icon = getBool(AAlwaysUserIcon, value); + APPLY_VAL(value, always_user_icon, AAlwaysUserIcon); value = get_value(dw, dc, dn, da, AStartMiniaturized, No, useGlobalDefault); - if (value) - attr->start_miniaturized = getBool(AStartMiniaturized, value); + APPLY_VAL(value, start_miniaturized, AStartMiniaturized); value = get_value(dw, dc, dn, da, AStartHidden, No, useGlobalDefault); - if (value) - attr->start_hidden = getBool(AStartHidden, value); + APPLY_VAL(value, start_hidden, AStartHidden); + + value = get_value(dw, dc, dn, da, AStartMaximized, No, useGlobalDefault); + APPLY_VAL(value, start_maximized, AStartMaximized); value = get_value(dw, dc, dn, da, ADontSaveSession, No, useGlobalDefault); - if (value) - attr->dont_save_session = getBool(ADontSaveSession, value); + APPLY_VAL(value, dont_save_session, ADontSaveSession); value = get_value(dw, dc, dn, da, AEmulateAppIcon, No, useGlobalDefault); - if (value) - attr->emulate_appicon = getBool(AEmulateAppIcon, value); + APPLY_VAL(value, emulate_appicon, AEmulateAppIcon); /* clean up */ PLSetStringCmpHook(StringCompareHook); @@ -483,18 +486,6 @@ wDefaultChangeIcon(WScreen *scr, char *instance, char* class, char *file) buffer = wmalloc(strlen(instance) + strlen(class) + 2); strcat(strcat(strcpy(buffer, instance), "."), class); key = PLMakeString(buffer); - if (PLGetDictionaryEntry(dict, key)==NULL) { - PLRelease(key); - key = PLMakeString(instance); - if (PLGetDictionaryEntry(dict, key)==NULL) { - PLRelease(key); - key = PLMakeString(class); - if (PLGetDictionaryEntry(dict, key)==NULL) { - PLRelease(key); - key = PLMakeString(buffer); - } - } - } free(buffer); } else if (instance) { key = PLMakeString(instance); @@ -517,15 +508,14 @@ wDefaultChangeIcon(WScreen *scr, char *instance, char* class, char *file) same = 1; } - if((attr = PLGetDictionaryEntry(dict, key)) != NULL) { + if ((attr = PLGetDictionaryEntry(dict, key)) != NULL) { if (PLIsDictionary(attr)) { if (icon_value!=NULL && !same) PLMergeDictionaries(attr, icon_value); else PLRemoveDictionaryEntry(attr, AIcon); } - } - else if (icon_value!=NULL && !same) { + } else if (icon_value!=NULL && !same) { PLInsertDictionaryEntry(dict, key, icon_value); } if (!wPreferences.flags.noupdates) diff --git a/src/window.c b/src/window.c index a547510e..7d34e8a4 100644 --- a/src/window.c +++ b/src/window.c @@ -37,9 +37,6 @@ #include "WindowMaker.h" #include "GNUstep.h" -#ifdef MWM_HINTS -# include "motif.h" -#endif #include "wcore.h" #include "framewin.h" #include "texture.h" @@ -55,6 +52,18 @@ #include "defaults.h" #include "workspace.h" +#ifdef MWM_HINTS +# include "motif.h" +#endif + +#ifdef KWM_HINTS +#include "kwm.h" +#endif + +#ifdef GNOME_STUFF +#include "gnome.h" +#endif + /****** Global Variables ******/ extern WShortKey wKeyBindings[WKBD_LAST]; @@ -97,13 +106,9 @@ static FocusMode getFocusMode(WWindow *wwin); static int getSavedState(Window window, WSavedState **state); -static void setupGNUstepHints(WWindowAttributes *attribs, +static void setupGNUstepHints(WWindow *wwin, GNUstepWMAttributes *gs_hints); -#ifdef MWM_HINTS -static void setupMWMHints(WWindowAttributes *attribs, MWMHints *mwm_hints); -#endif - /* event handlers */ @@ -175,7 +180,7 @@ wWindowDestroy(WWindow *wwin) wwin->flags.destroyed = 1; - for (i = 0; i < 4; i++) { + for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { if (wwin->screen_ptr->shortcutWindow[i] == wwin) { wwin->screen_ptr->shortcutWindow[i] = NULL; } @@ -217,203 +222,205 @@ wWindowDestroy(WWindow *wwin) static void -setupGNUstepHints(WWindowAttributes *attribs, GNUstepWMAttributes *gs_hints) +setupGNUstepHints(WWindow *wwin, GNUstepWMAttributes *gs_hints) { if (gs_hints->flags & GSWindowStyleAttr) { - attribs->no_titlebar = - ((gs_hints->window_style & WMTitledWindowMask)?0:1); + WSETUFLAG(wwin, no_titlebar, + ((gs_hints->window_style & WMTitledWindowMask)?0:1)); - attribs->no_close_button = attribs->no_closable = - ((gs_hints->window_style & WMClosableWindowMask)?0:1); - - attribs->no_miniaturize_button = attribs->no_miniaturizable = - ((gs_hints->window_style & WMMiniaturizableWindowMask)?0:1); - - attribs->no_resizebar = attribs->no_resizable = - ((gs_hints->window_style & WMResizableWindowMask)?0:1); + WSETUFLAG(wwin, no_close_button, + ((gs_hints->window_style & WMClosableWindowMask)?0:1)); + + WSETUFLAG(wwin, no_closable, + ((gs_hints->window_style & WMClosableWindowMask)?0:1)); + + WSETUFLAG(wwin, no_miniaturize_button, + ((gs_hints->window_style & WMMiniaturizableWindowMask)?0:1)); + + WSETUFLAG(wwin, no_miniaturizable, + ((gs_hints->window_style & WMMiniaturizableWindowMask)?0:1)); + + WSETUFLAG(wwin, no_resizebar, + ((gs_hints->window_style & WMResizableWindowMask)?0:1)); + + WSETUFLAG(wwin, no_resizable, + ((gs_hints->window_style & WMResizableWindowMask)?0:1)); } else { /* setup the defaults */ - attribs->no_titlebar = 0; - attribs->no_closable = 0; - attribs->no_miniaturizable = 0; - attribs->no_resizable = 0; - attribs->no_close_button = 0; - attribs->no_miniaturize_button = 0; - attribs->no_resizebar = 0; + WSETUFLAG(wwin, no_titlebar, 0); + WSETUFLAG(wwin, no_closable, 0); + WSETUFLAG(wwin, no_miniaturizable, 0); + WSETUFLAG(wwin, no_resizable, 0); + WSETUFLAG(wwin, no_close_button, 0); + WSETUFLAG(wwin, no_miniaturize_button, 0); + WSETUFLAG(wwin, no_resizebar, 0); } - + if (gs_hints->extra_flags & GSNoApplicationIconFlag) { - attribs->no_appicon = 1; + WSETUFLAG(wwin, no_appicon, 1); } } -#ifdef MWM_HINTS -static void -setupMWMHints(WWindowAttributes *attribs, MWMHints *mwm_hints) +void +wWindowCheckAttributeSanity(WWindow *wwin, WWindowAttributes *wflags, + WWindowAttributes *mask) { + if (wflags->no_appicon && mask->no_appicon) + wflags->emulate_appicon = 0; - /* - * We will ignore all decoration hints that have an equivalent as - * functions, because wmaker does not distinguish decoration hints - */ + if (wwin->main_window!=None) { + WApplication *wapp = wApplicationOf(wwin->main_window); + if (wapp && !wapp->flags.emulated) + wflags->emulate_appicon = 0; + } - if (mwm_hints->flags & MWM_HINTS_DECORATIONS) { -# ifdef DEBUG - fprintf(stderr,"has decor hints [ "); -# endif - attribs->no_titlebar = 1; - attribs->no_close_button = 1; - attribs->no_miniaturize_button = 1; - attribs->no_resizebar = 1; - - if (mwm_hints->decorations & MWM_DECOR_ALL) { -# ifdef DEBUG - fprintf(stderr,"ALL "); -# endif - attribs->no_titlebar = 0; - attribs->no_close_button = 0; - attribs->no_closable = 0; - attribs->no_miniaturize_button = 0; - attribs->no_miniaturizable = 0; - attribs->no_resizebar = 0; - attribs->no_resizable = 0; - } -/* - if (mwm_hints->decorations & MWM_DECOR_BORDER) { -# ifdef DEBUG - fprintf(stderr,"(BORDER) "); -# endif - } - */ + if (wwin->transient_for!=None + && wwin->transient_for!=wwin->screen_ptr->root_win) + wflags->emulate_appicon = 0; + + if (wflags->sunken && mask->sunken && wflags->floating && mask->floating) + wflags->sunken = 0; +} - if (mwm_hints->decorations & MWM_DECOR_RESIZEH) { -# ifdef DEBUG - fprintf(stderr,"RESIZEH "); -# endif - attribs->no_resizebar = 0; - } - if (mwm_hints->decorations & MWM_DECOR_TITLE) { -# ifdef DEBUG - fprintf(stderr,"TITLE+close "); -# endif - attribs->no_titlebar = 0; - attribs->no_close_button = 0; - attribs->no_closable = 0; - } -/* - if (mwm_hints->decorations & MWM_DECOR_MENU) { -# ifdef DEBUG - fprintf(stderr,"(MENU) "); -# endif - } - */ - if (mwm_hints->decorations & MWM_DECOR_MINIMIZE) { -# ifdef DEBUG - fprintf(stderr,"MINIMIZE "); -# endif - attribs->no_miniaturize_button = 0; - attribs->no_miniaturizable = 0; - } -/* - if (mwm_hints->decorations & MWM_DECOR_MAXIMIZE) { -# ifdef DEBUG - fprintf(stderr,"(MAXIMIZE) "); -# endif - } - */ -# ifdef DEBUG - fprintf(stderr,"]\n"); -# endif +void +wWindowSetupInitialAttributes(WWindow *wwin, int *level, int *workspace) +{ + WScreen *scr = wwin->screen_ptr; + + /* sets global default stuff */ + wDefaultFillAttributes(scr, wwin->wm_instance, wwin->wm_class, + &wwin->client_flags, NULL, True); + /* + * Decoration setting is done in this precedence (lower to higher) + * - use global default in the resource database + * - guess some settings + * - use GNUstep/external window attributes + * - set hints specified for the app in the resource DB + * + */ + WSETUFLAG(wwin, broken_close, 0); + + if (wwin->protocols.DELETE_WINDOW) + WSETUFLAG(wwin, kill_close, 0); + else + WSETUFLAG(wwin, kill_close, 1); + + /* transients can't be iconified or maximized */ + if (wwin->transient_for) { + WSETUFLAG(wwin, no_miniaturizable, 1); + WSETUFLAG(wwin, no_miniaturize_button, 1); } + /* if the window can't be resized, remove the resizebar */ + if (wwin->normal_hints->flags & (PMinSize|PMaxSize) + && (wwin->normal_hints->min_width==wwin->normal_hints->max_width) + && (wwin->normal_hints->min_height==wwin->normal_hints->max_height)) { + WSETUFLAG(wwin, no_resizable, 1); + WSETUFLAG(wwin, no_resizebar, 1); + } + + /* set GNUstep window attributes */ + if (wwin->wm_gnustep_attr) { + setupGNUstepHints(wwin, wwin->wm_gnustep_attr); + + if (wwin->wm_gnustep_attr->flags & GSWindowLevelAttr) { - if (mwm_hints->flags & MWM_HINTS_FUNCTIONS) { -# ifdef DEBUG - fprintf(stderr,"has function hints [ "); -# endif - attribs->no_closable = 1; - attribs->no_miniaturizable = 1; - attribs->no_resizable = 1; - - if (mwm_hints->functions & MWM_FUNC_ALL) { -# ifdef DEBUG - fprintf(stderr,"ALL "); -# endif - attribs->no_closable = 0; - attribs->no_miniaturizable = 0; - attribs->no_resizable = 0; - } - if (mwm_hints->functions & MWM_FUNC_RESIZE) { -# ifdef DEBUG - fprintf(stderr,"RESIZE "); -# endif - attribs->no_resizable = 0; - } - /* - if (mwm_hints->functions & MWM_FUNC_MOVE) { -# ifdef DEBUG - fprintf(stderr,"(MOVE) "); -# endif - } - */ - if (mwm_hints->functions & MWM_FUNC_MINIMIZE) { -# ifdef DEBUG - fprintf(stderr,"MINIMIZE "); -# endif - attribs->no_miniaturizable = 0; + switch (wwin->wm_gnustep_attr->window_level) { + case WMNormalWindowLevel: + *level = WMNormalLevel; + break; + case WMFloatingWindowLevel: + *level = WMFloatingLevel; + break; + case WMDockWindowLevel: + *level = WMDockLevel; + break; + case WMSubmenuWindowLevel: + *level = WMSubmenuLevel; + break; + case WMMainMenuWindowLevel: + *level = WMMainMenuLevel; + break; + default: + *level = WMNormalLevel; + break; + } + } else { + /* setup defaults */ + *level = WMNormalLevel; } - if (mwm_hints->functions & MWM_FUNC_MAXIMIZE) { -# ifdef DEBUG - fprintf(stderr,"MAXIMIZE "); - /* a window must be resizable to be maximizable */ - attribs->no_resizable = 0; -# endif + } else { + int tmp_workspace = -1; + int tmp_level = -1; + +#ifdef MWM_HINTS + wMWMCheckClientHints(wwin); +#endif /* MWM_HINTS */ + +#ifdef KWM_HINTS + wKWMCheckClientHints(wwin, &tmp_workspace); +#endif /* KWM_HINTS */ + +#ifdef GNOME_STUFF + wGNOMECheckClientHints(wwin, &tmp_level, &tmp_workspace); +#endif /* GNOME_STUFF */ + + if (tmp_level < 0) { + if (WFLAGP(wwin, floating)) + *level = WMFloatingLevel; + else if (WFLAGP(wwin, sunken)) + *level = WMSunkenLevel; + else + *level = WMNormalLevel; } - if (mwm_hints->functions & MWM_FUNC_CLOSE) { -# ifdef DEBUG - fprintf(stderr,"CLOSE "); -# endif - attribs->no_closable = 0; + + if (tmp_workspace >= 0) { + *workspace = tmp_workspace % scr->workspace_count; } -# ifdef DEBUG - fprintf(stderr,"]\n"); -# endif } -} -#endif /* MWM_HINTS */ - -void -wWindowCheckAttributeSanity(WWindow *wwin, WWindowAttributes *wflags) -{ - if (wflags->no_appicon) - wflags->emulate_appicon = 0; + /* + * Set attributes specified only for that window/class. + * This might do duplicate work with the 1st wDefaultFillAttributes(). + */ + wDefaultFillAttributes(scr, wwin->wm_instance, wwin->wm_class, + &wwin->user_flags, &wwin->defined_user_flags, + False); + /* + * Sanity checks for attributes that depend on other attributes + */ + if (wwin->user_flags.no_appicon && wwin->defined_user_flags.no_appicon) + wwin->user_flags.emulate_appicon = 0; if (wwin->main_window!=None) { WApplication *wapp = wApplicationOf(wwin->main_window); if (wapp && !wapp->flags.emulated) - wflags->emulate_appicon = 0; + wwin->user_flags.emulate_appicon = 0; } if (wwin->transient_for!=None && wwin->transient_for!=wwin->screen_ptr->root_win) - wflags->emulate_appicon = 0; + wwin->user_flags.emulate_appicon = 0; - if (wflags->sunken && wflags->floating) - wflags->sunken = 0; + if (wwin->user_flags.sunken && wwin->defined_user_flags.sunken + && wwin->user_flags.floating && wwin->defined_user_flags.floating) + wwin->user_flags.sunken = 0; + + WSETUFLAG(wwin, no_shadeable, WFLAGP(wwin, no_titlebar)); } + Bool wWindowCanReceiveFocus(WWindow *wwin) { if (!wwin->flags.mapped && !wwin->flags.shaded) return False; - if (wwin->window_flags.no_focusable || wwin->flags.miniaturized) + if (WFLAGP(wwin, no_focusable) || wwin->flags.miniaturized) return False; if (wwin->frame->workspace != wwin->screen_ptr->current_workspace) return False; @@ -421,6 +428,24 @@ wWindowCanReceiveFocus(WWindow *wwin) return True; } +#if 0 +Bool +wWindowObscuresWindow(WWindow *wwin, WWindow *obscured) +{ + if (!IS_OMNIPRESENT(wwin) && !IS_OMNIPRESENT(obscured) + && wwin->frame->workspace != obscured->frame->workspace) + return False; + + if (wwin->frame_x+wwin->frame->core->width < obscured->frame_x + || wwin->frame_y+wwin->frame->core->height < obscured->frame_y + || wwin->frame_x > obscured->frame_x+obscured->frame->core->width + || wwin->frame_y > obscured->frame_y+obscured->frame->core->height) { + return False; + } + + return True; +} +#endif /* *---------------------------------------------------------------- @@ -442,8 +467,6 @@ wWindowCanReceiveFocus(WWindow *wwin) * Event handler contexts are associated for some objects * (buttons, titlebar and resizebar) * - * TODO: - * Check if the window_flags setting is correct. *---------------------------------------------------------------- */ WWindow* @@ -454,11 +477,7 @@ wManageWindow(WScreen *scr, Window window) unsigned width, height; XWindowAttributes wattribs; XSetWindowAttributes attribs; - int iconic = 0; WWindowState *win_state; -#ifdef MWM_HINTS - MWMHints *motif_hints = NULL; -#endif int window_level; int foo; int workspace = -1; @@ -472,6 +491,20 @@ wManageWindow(WScreen *scr, Window window) XUngrabServer(dpy); return NULL; } + + if (!wFetchName(dpy, window, &title)) { + title = NULL; + } + +#ifdef KWM_HINTS + if (title && !wKWMManageableClient(scr, window, title)) { + XFree(title); + XUngrabServer(dpy); + return NULL; + } +#endif /* KWM_HINTS */ + + wwin = wWindowCreate(); XSaveContext(dpy, window, wWinContext, (XPointer)&wwin->client_descriptor); @@ -516,20 +549,11 @@ wManageWindow(WScreen *scr, Window window) |CWSaveUnder, &attribs); XSetWindowBorderWidth(dpy, window, 0); - /* fill in property/hint data */ - if (!wFetchName(dpy, window, &title)) { - title = NULL; - } /* get hints from GNUstep app */ if (!PropGetGNUstepWMAttr(window, &wwin->wm_gnustep_attr)) { wwin->wm_gnustep_attr=NULL; } -#ifdef MWM_HINTS - if (!PropGetMotifWMHints(window, &motif_hints)) - motif_hints = NULL; -#endif /* MWM_HINTS */ - wwin->client_leader = PropGetClientLeader(window); if (wwin->client_leader!=None) wwin->main_window = wwin->client_leader; @@ -542,7 +566,7 @@ wManageWindow(WScreen *scr, Window window) if (wwin->wm_hints) { if ((wwin->wm_hints->flags&StateHint) && (wwin->wm_hints->initial_state == IconicState)) { - iconic = 1; + wwin->flags.miniaturized = 1; /* don't do iconify animation */ wwin->flags.skip_next_animation = 1; } @@ -579,8 +603,9 @@ wManageWindow(WScreen *scr, Window window) /* don't let transients start miniaturized if their owners * are not */ - if (owner && !owner->flags.miniaturized && iconic) { - iconic = 0; + if (owner && !owner->flags.miniaturized + && wwin->flags.miniaturized) { + wwin->flags.miniaturized = 0; if (wwin->wm_hints) wwin->wm_hints->initial_state = NormalState; } @@ -605,125 +630,39 @@ wManageWindow(WScreen *scr, Window window) * *-------------------------------------------------- */ - /* sets global default stuff */ - wDefaultFillAttributes(scr, wwin->wm_instance, wwin->wm_class, - &wwin->window_flags, True); - /* - * Decoration setting is done in this precedence (lower to higher) - * - use default in the resource database - * - guess some settings - * - use GNUstep/external window attributes - * - set hints specified for the app in the resource DB - */ - wwin->window_flags.broken_close = 0; - - if (wwin->protocols.DELETE_WINDOW) - wwin->window_flags.kill_close = 0; - else - wwin->window_flags.kill_close = 1; - - /* transients can't be iconified or maximized */ - if (wwin->transient_for) { - wwin->window_flags.no_miniaturizable = 1; - wwin->window_flags.no_miniaturize_button = 1; -#ifdef DEBUG - printf("%x is transient for %x\n", (unsigned)window, - (unsigned)wwin->transient_for); -#endif - } - - /* if the window can't be resized, remove the resizebar */ - if (wwin->normal_hints->flags & (PMinSize|PMaxSize) - && (wwin->normal_hints->min_width==wwin->normal_hints->max_width) - && (wwin->normal_hints->min_height==wwin->normal_hints->max_height)) { - wwin->window_flags.no_resizable = 1; - wwin->window_flags.no_resizebar = 1; - } - - /* set GNUstep window attributes */ - if (wwin->wm_gnustep_attr) { - setupGNUstepHints(&wwin->window_flags, wwin->wm_gnustep_attr); - - if (wwin->wm_gnustep_attr->flags & GSWindowLevelAttr) { - - switch (wwin->wm_gnustep_attr->window_level) { - case WMNormalWindowLevel: - window_level = WMNormalLevel; - break; - case WMFloatingWindowLevel: - window_level = WMFloatingLevel; - break; - case WMDockWindowLevel: - window_level = WMDockLevel; - break; - case WMSubmenuWindowLevel: - window_level = WMSubmenuLevel; - break; - case WMMainMenuWindowLevel: - window_level = WMMainMenuLevel; - break; - default: - window_level = WMNormalLevel; - break; - } - } else { - /* setup defaults */ - window_level = WMNormalLevel; - } - } else { -#ifdef MWM_HINTS - if (motif_hints) { - setupMWMHints(&wwin->window_flags, motif_hints); - } -#endif /* MWM_HINTS */ - if (wwin->window_flags.floating) - window_level = WMFloatingLevel; - else if (wwin->window_flags.sunken) - window_level = WMSunkenLevel; - else - window_level = WMNormalLevel; - } -#ifdef MWM_HINTS - if (motif_hints) - free(motif_hints); -#endif - - /* - * Set attributes specified only for that window/class. - * This might do duplicate work with the 1st wDefaultFillAttributes(). - * TODO: Do something about that. - */ - wDefaultFillAttributes(scr, wwin->wm_instance, wwin->wm_class, - &wwin->window_flags, False); - - /* - * Sanity checks for attributes that depend on other attributes - */ - wWindowCheckAttributeSanity(wwin, &wwin->window_flags); - wwin->window_flags.no_shadeable = wwin->window_flags.no_titlebar; + wWindowSetupInitialAttributes(wwin, &window_level, &workspace); /* * Make broken apps behave as a nice app. */ - if (wwin->window_flags.emulate_appicon) { + if (WFLAGP(wwin, emulate_appicon)) { wwin->main_window = wwin->client_win; } /* - *------------------------------------------------------------ - * + *------------------------------------------------------------ + * * Setup the initial state of the window * *------------------------------------------------------------ */ - if (wwin->window_flags.start_miniaturized - && !wwin->window_flags.no_miniaturizable) { + if (WFLAGP(wwin, start_miniaturized) && !WFLAGP(wwin, no_miniaturizable)) { wwin->flags.miniaturized = 1; - iconic = 1; } + if (WFLAGP(wwin, start_maximized)) { + wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL; + } + +#ifdef GNOME_STUFF + wGNOMECheckInitialClientState(wwin); +#endif +#ifdef KWM_HINTS + wKWMCheckClientInitialState(wwin); +#endif + /* if there is a saved state, restore it */ win_state = NULL; if (wwin->main_window!=None/* && wwin->main_window!=window*/) { @@ -735,19 +674,18 @@ wManageWindow(WScreen *scr, Window window) wwin->wm_hints->initial_state==WithdrawnState)) { if (win_state->state->hidden>0) wwin->flags.hidden = win_state->state->hidden; - if (win_state->state->shaded>0 && !wwin->window_flags.no_shadeable) + if (win_state->state->shaded>0 && !WFLAGP(wwin, no_shadeable)) wwin->flags.shaded = win_state->state->shaded; if (win_state->state->miniaturized>0 && - !wwin->window_flags.no_miniaturizable) { + !WFLAGP(wwin, no_miniaturizable)) { wwin->flags.miniaturized = win_state->state->miniaturized; - iconic = 1; } - if (!wwin->window_flags.omnipresent) { + if (!IS_OMNIPRESENT(wwin)) { int w = wDefaultGetStartWorkspace(scr, wwin->wm_instance, wwin->wm_class); if (w < 0 || w >= scr->workspace_count) { workspace = win_state->state->workspace; - if (workspace>=scr->workspace_count) + if (workspace >= scr->workspace_count) workspace = scr->current_workspace; } else { workspace = w; @@ -781,7 +719,7 @@ wManageWindow(WScreen *scr, Window window) int w; w = wDefaultGetStartWorkspace(scr, wwin->wm_instance, wwin->wm_class); - if (w>=0 && w<scr->workspace_count && !wwin->window_flags.omnipresent) { + if (w >= 0 && w < scr->workspace_count && !(IS_OMNIPRESENT(wwin))) { workspace = w; } else { workspace = scr->current_workspace; @@ -807,14 +745,16 @@ wManageWindow(WScreen *scr, Window window) x = win_state->state->x; y = win_state->state->y; } else if (wwin->transient_for==None && !scr->flags.startup && - workspace==scr->current_workspace && !iconic && - !(wwin->normal_hints->flags & (USPosition|PPosition))) { + workspace==scr->current_workspace + && !wwin->flags.miniaturized + && !wwin->flags.maximized + && !(wwin->normal_hints->flags & (USPosition|PPosition))) { PlaceWindow(wwin, &x, &y, width, height); if (wPreferences.window_placement == WPM_MANUAL) dontBring = True; } - if (wwin->window_flags.dont_move_off && dontBring) + if (WFLAGP(wwin, dont_move_off) && dontBring) wScreenBringInside(scr, &x, &y, width, height); } /* @@ -826,9 +766,9 @@ wManageWindow(WScreen *scr, Window window) */ foo = WFF_LEFT_BUTTON | WFF_RIGHT_BUTTON; - if (!wwin->window_flags.no_titlebar) + if (!WFLAGP(wwin, no_titlebar)) foo |= WFF_TITLEBAR; - if (!wwin->window_flags.no_resizebar) + if (!WFLAGP(wwin, no_resizebar)) foo |= WFF_RESIZEBAR; wwin->frame = wFrameWindowCreate(scr, window_level, @@ -847,9 +787,9 @@ wManageWindow(WScreen *scr, Window window) /* hide unused buttons */ foo = 0; - if (wwin->window_flags.no_close_button) + if (WFLAGP(wwin, no_close_button)) foo |= WFF_RIGHT_BUTTON; - if (wwin->window_flags.no_miniaturize_button) + if (WFLAGP(wwin, no_miniaturize_button)) foo |= WFF_LEFT_BUTTON; if (foo!=0) wFrameWindowHideButton(wwin->frame, foo); @@ -860,35 +800,32 @@ wManageWindow(WScreen *scr, Window window) wFrameWindowChangeTitle(wwin->frame, title ? title : DEF_WINDOW_TITLE); if (title) XFree(title); - + wwin->frame->workspace = workspace; - + wwin->frame->on_click_left = windowIconifyClick; - + wwin->frame->on_click_right = windowCloseClick; wwin->frame->on_dblclick_right = windowCloseDblClick; - + wwin->frame->on_mousedown_titlebar = titlebarMouseDown; wwin->frame->on_dblclick_titlebar = titlebarDblClick; - + wwin->frame->on_mousedown_resizebar = resizebarMouseDown; XReparentWindow(dpy, wwin->client_win, wwin->frame->core->window, 0, wwin->frame->top_width); -#if 0 { int gx, gy; wClientGetGravityOffsets(wwin, &gx, &gy); - /* set the position of the frame on screen */ - x += gx * FRAME_BORDER_WIDTH; - y += gy * FRAME_BORDER_WIDTH; + /* if gravity is to the south, account for the border sizes */ if (gy > 0) y -= wwin->frame->top_width + wwin->frame->bottom_width; } -#endif + /* * wWindowConfigure() will init the client window's size * (wwin->client.{width,height}) and all other geometry @@ -916,7 +853,6 @@ wManageWindow(WScreen *scr, Window window) if (leader && leader->main_window==None) { leader->main_window = leader->client_win; } - app = wApplicationCreate(scr, wwin->main_window); if (app) { app->last_workspace = workspace; @@ -949,8 +885,8 @@ wManageWindow(WScreen *scr, Window window) XLowerWindow(dpy, window); /* if window is in this workspace and should be mapped, then map it */ - if (!iconic && (workspace == scr->current_workspace - || wwin->window_flags.omnipresent) + if (!wwin->flags.miniaturized && (workspace == scr->current_workspace + || IS_OMNIPRESENT(wwin)) && !wwin->flags.hidden && !(wwin->wm_hints && (wwin->wm_hints->flags & StateHint) && wwin->wm_hints->initial_state == WithdrawnState)) { @@ -963,6 +899,18 @@ wManageWindow(WScreen *scr, Window window) } else { wClientSetState(wwin, NormalState, None); } + +#if 0 + /* if not auto focus, then map the window under the currently + * focused window */ + if (!wPreferences.auto_focus && scr->focused_window + && !scr->flags.startup + && wWindowObscuresWindow(wwin, scr->focused_window) + && WINDOW_LEVEL(scr->focused_window) == WINDOW_LEVEL(wwin)) { + MoveInStackListUnder(scr->focused_window->frame->core, + wwin->frame->core); + } +#endif if (wPreferences.superfluous && !wPreferences.no_animations && !scr->flags.startup && wwin->transient_for==None /* @@ -986,6 +934,7 @@ wManageWindow(WScreen *scr, Window window) DoWindowBirth(wwin); } XMapSubwindows(dpy, wwin->frame->core->window); + wWindowMap(wwin); } else { XMapSubwindows(dpy, wwin->frame->core->window); @@ -1020,6 +969,14 @@ wManageWindow(WScreen *scr, Window window) wwin->prev = NULL; } + +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, True); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientWorkspace(wwin); + wKWMUpdateClientState(wwin, KWMAllFlags); +#endif XUngrabServer(dpy); @@ -1034,7 +991,7 @@ wManageWindow(WScreen *scr, Window window) wFrameWindowChangeState(wwin->frame, WS_UNFOCUSED); - if (!iconic && workspace == scr->current_workspace) { + if (!wwin->flags.miniaturized && workspace == scr->current_workspace) { WWindow *tmp = wWindowFor(wwin->transient_for); if ((tmp && tmp->flags.focused) || wPreferences.auto_focus) @@ -1044,10 +1001,15 @@ wManageWindow(WScreen *scr, Window window) } wWindowResetMouseGrabs(wwin); - if (!wwin->window_flags.no_bind_keys) { + if (!WFLAGP(wwin, no_bind_keys)) { wWindowSetKeyGrabs(wwin); } - +#ifdef GNOME_STUFF + wGNOMEUpdateClientListHint(scr); +#endif +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMAddWindow); +#endif /* * Prevent window withdrawal when getting the * unmap notifies generated during reparenting @@ -1059,6 +1021,7 @@ wManageWindow(WScreen *scr, Window window) wColormapInstallForWindow(wwin->screen_ptr, scr->cmap_window); UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_ADD); + /* *-------------------------------------------------- * Cleanup temporary stuff @@ -1085,11 +1048,12 @@ wManageInternalWindow(WScreen *scr, Window window, Window owner, wwin = wWindowCreate(); wwin->flags.internal_window = 1; - wwin->window_flags.omnipresent = 1; - wwin->window_flags.no_shadeable = 1; - wwin->window_flags.no_resizable = 1; - wwin->window_flags.no_miniaturizable = 1; - + + WSETUFLAG(wwin, omnipresent, 1); + WSETUFLAG(wwin, no_shadeable, 1); + WSETUFLAG(wwin, no_resizable, 1); + WSETUFLAG(wwin, no_miniaturizable, 1); + wwin->focus_mode = WFM_PASSIVE; wwin->client_win = window; @@ -1197,7 +1161,7 @@ wManageInternalWindow(WScreen *scr, Window window, Window owner, wWindowSetKeyGrabs(wwin); UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_ADD); - + return wwin; } @@ -1289,7 +1253,7 @@ wUnmanageWindow(WWindow *wwin, int restore) tmp = NULL; if (wPreferences.focus_mode==WKF_CLICK) { tmp = wWindowFor(wwin->transient_for); - if (tmp && (!tmp->flags.mapped || tmp->window_flags.no_focusable)) { + if (tmp && (!tmp->flags.mapped || WFLAGP(tmp, no_focusable))) { tmp = NULL; } } @@ -1297,7 +1261,7 @@ wUnmanageWindow(WWindow *wwin, int restore) if (!tmp) { tmp = scr->focused_window; while (tmp) { - if (!tmp->window_flags.no_focusable + if (!WFLAGP(tmp, no_focusable) && (tmp->flags.mapped || tmp->flags.shaded)) break; tmp = tmp->prev; @@ -1326,6 +1290,16 @@ wUnmanageWindow(WWindow *wwin, int restore) newFocusedWindow = NULL; } } + + if (!wwin->flags.internal_window) { +#ifdef GNOME_STUFF + wGNOMERemoveClient(wwin); +#endif +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMRemoveWindow); +#endif + } + #ifdef DEBUG printf("destroying window %x frame %x\n", (unsigned)wwin->client_win, (unsigned)frame->window); @@ -1336,7 +1310,7 @@ wUnmanageWindow(WWindow *wwin, int restore) XFlush(dpy); } - + void wWindowFocus(WWindow *wwin) { @@ -1355,6 +1329,7 @@ wWindowFocus(WWindow *wwin) wWindowResetMouseGrabs(wwin); UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } @@ -1402,6 +1377,7 @@ wWindowUnfocus(WWindow *wwin) wWindowResetMouseGrabs(wwin); UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_STATE); + } @@ -1507,13 +1483,12 @@ wWindowChangeWorkspace(WWindow *wwin, int workspace) if (workspace >= scr->workspace_count || workspace < 0 || workspace == wwin->frame->workspace) - return; + return; if (workspace != scr->current_workspace) { /* Sent to other workspace. Unmap window */ if ((wwin->flags.mapped||wwin->flags.shaded) - && !wwin->window_flags.omnipresent - && !wwin->flags.changing_workspace) { + && !IS_OMNIPRESENT(wwin) && !wwin->flags.changing_workspace) { wapp = wApplicationOf(wwin->main_window); if (wapp) { @@ -1530,10 +1505,17 @@ wWindowChangeWorkspace(WWindow *wwin, int workspace) wWindowMap(wwin); } } - if (!wwin->window_flags.omnipresent) { + if (!IS_OMNIPRESENT(wwin)) { wwin->frame->workspace = workspace; UpdateSwitchMenu(scr, wwin, ACTION_CHANGE_WORKSPACE); } +#ifdef GNOME_STUFF + wGNOMEUpdateClientStateHint(wwin, True); +#endif +#ifdef KWM_HINTS + wKWMUpdateClientWorkspace(wwin); + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif if (unmap) XUnmapWindow(dpy, wwin->frame->core->window); } @@ -1555,13 +1537,16 @@ wWindowSynthConfigureNotify(WWindow *wwin) sevent.xconfigure.height = wwin->client.height; sevent.xconfigure.border_width = wwin->old_border_width; - if (wwin->window_flags.no_titlebar) + if (WFLAGP(wwin, no_titlebar)) sevent.xconfigure.above = None; else sevent.xconfigure.above = wwin->frame->titlebar->window; sevent.xconfigure.override_redirect = False; XSendEvent(dpy, wwin->client_win, False, StructureNotifyMask, &sevent); +#ifdef KWM_HINTS + wKWMSendEventMessage(wwin, WKWMChangedClient); +#endif XFlush(dpy); } @@ -1604,7 +1589,7 @@ int req_width, req_height; /* new size of the client */ synth_notify = True; } - if (wwin->window_flags.dont_move_off) + if (WFLAGP(wwin, dont_move_off)) wScreenBringInside(wwin->screen_ptr, &req_x, &req_y, req_width, req_height); if (resize) { @@ -1622,12 +1607,18 @@ int req_width, req_height; /* new size of the client */ XResizeWindow(dpy, wwin->client_win, req_width, req_height); if (wwin->flags.shaded) { - wFrameWindowResize(wwin->frame, req_width, wwin->frame->core->height); + wFrameWindowConfigure(wwin->frame, req_x, req_y, + req_width, wwin->frame->core->height); wwin->old_geometry.height = req_height; } else { - wFrameWindowResizeInternal(wwin->frame, req_width, req_height); + int h; + + h = req_height + wwin->frame->top_width + + wwin->frame->bottom_width; + + wFrameWindowConfigure(wwin->frame, req_x, req_y, req_width, h); } - + if (!(req_height > wwin->frame->core->height || req_width > wwin->frame->core->width)) XResizeWindow(dpy, wwin->client_win, req_width, req_height); @@ -1636,8 +1627,6 @@ int req_width, req_height; /* new size of the client */ wwin->client.y = req_y + wwin->frame->top_width; wwin->client.width = req_width; wwin->client.height = req_height; - - XMoveWindow(dpy, wwin->frame->core->window, req_x, req_y); } else { wwin->client.x = req_x; wwin->client.y = req_y + wwin->frame->top_width; @@ -1676,7 +1665,7 @@ int req_x, req_y; /* new position of the frame */ * a completed (opaque) movement in moveres.c */ #endif - if (wwin->window_flags.dont_move_off) + if (WFLAGP(wwin, dont_move_off)) wScreenBringInside(wwin->screen_ptr, &req_x, &req_y, wwin->frame->core->width, wwin->frame->core->height); @@ -1702,12 +1691,12 @@ wWindowUpdateButtonImages(WWindow *wwin) Pixmap pixmap, mask; WFrameWindow *fwin = wwin->frame; - if (wwin->window_flags.no_titlebar) - return; + if (WFLAGP(wwin, no_titlebar)) + return; /* miniaturize button */ - if (!wwin->window_flags.no_miniaturize_button) { + if (!WFLAGP(wwin, no_miniaturize_button)) { if (wwin->wm_gnustep_attr && wwin->wm_gnustep_attr->flags & GSMiniaturizePixmapAttr) { pixmap = wwin->wm_gnustep_attr->miniaturize_pixmap; @@ -1740,7 +1729,7 @@ wWindowUpdateButtonImages(WWindow *wwin) /* close button */ - if (!wwin->window_flags.no_close_button) { + if (!WFLAGP(wwin, no_close_button)) { if (wwin->wm_gnustep_attr && wwin->wm_gnustep_attr->flags&GSClosePixmapAttr) { pixmap = wwin->wm_gnustep_attr->close_pixmap; @@ -1763,12 +1752,12 @@ wWindowUpdateButtonImages(WWindow *wwin) fwin->rbutton_image->client_owned = 1; fwin->rbutton_image->client_owned_mask = 1; } - } else if (wwin->window_flags.kill_close) { + } else if (WFLAGP(wwin, kill_close)) { if (fwin->rbutton_image && !fwin->rbutton_image->shared) { wPixmapDestroy(fwin->rbutton_image); } fwin->rbutton_image = scr->b_pixmaps[WBUT_KILL]; - } else if (wwin->window_flags.broken_close) { + } else if (WFLAGP(wwin, broken_close)) { if (fwin->rbutton_image && !fwin->rbutton_image->shared) { wPixmapDestroy(fwin->rbutton_image); } @@ -1790,7 +1779,7 @@ wWindowUpdateButtonImages(WWindow *wwin) /* *--------------------------------------------------------------------------- * wWindowConfigureBorders-- - * Update window border configuration according to window_flags + * Update window border configuration according to attribute flags. * *--------------------------------------------------------------------------- */ @@ -1802,9 +1791,9 @@ wWindowConfigureBorders(WWindow *wwin) int newy, oldh; flags = WFF_LEFT_BUTTON|WFF_RIGHT_BUTTON; - if (!wwin->window_flags.no_titlebar) + if (!WFLAGP(wwin, no_titlebar)) flags |= WFF_TITLEBAR; - if (!wwin->window_flags.no_resizebar) + if (!WFLAGP(wwin, no_resizebar)) flags |= WFF_RESIZEBAR; oldh = wwin->frame->top_width; @@ -1818,11 +1807,11 @@ wWindowConfigureBorders(WWindow *wwin) } flags = 0; - if (!wwin->window_flags.no_miniaturize_button + if (!WFLAGP(wwin, no_miniaturize_button) && wwin->frame->flags.hide_left_button) flags |= WFF_LEFT_BUTTON; - if (!wwin->window_flags.no_close_button + if (!WFLAGP(wwin, no_close_button) && wwin->frame->flags.hide_right_button) flags |= WFF_RIGHT_BUTTON; @@ -1832,11 +1821,11 @@ wWindowConfigureBorders(WWindow *wwin) } flags = 0; - if (wwin->window_flags.no_miniaturize_button + if (WFLAGP(wwin, no_miniaturize_button) && !wwin->frame->flags.hide_left_button) flags |= WFF_LEFT_BUTTON; - if (wwin->window_flags.no_close_button + if (WFLAGP(wwin, no_close_button) && !wwin->frame->flags.hide_right_button) flags |= WFF_RIGHT_BUTTON; @@ -1925,7 +1914,7 @@ wWindowSetShape(WWindow *wwin) int ordering; /* only shape is the client's */ - if (wwin->window_flags.no_titlebar && wwin->window_flags.no_resizebar) { + if (WFLAGP(wwin, no_titlebar) && WFLAGP(wwin, no_resizebar)) { goto alt_code; } @@ -1946,14 +1935,14 @@ wWindowSetShape(WWindow *wwin) memcpy(urec, rects, sizeof(XRectangle)*count); XFree(rects); - if (!wwin->window_flags.no_titlebar) { + if (!WFLAGP(wwin, no_titlebar)) { urec[count].x = -1; urec[count].y = -1 - wwin->frame->top_width; urec[count].width = wwin->frame->core->width + 2; urec[count].height = wwin->frame->top_width + 1; count++; } - if (!wwin->window_flags.no_resizebar) { + if (!WFLAGP(wwin, no_resizebar)) { urec[count].x = -1; urec[count].y = wwin->frame->core->height - wwin->frame->bottom_width - wwin->frame->top_width; @@ -1973,14 +1962,14 @@ wWindowSetShape(WWindow *wwin) alt_code: #endif /* OPTIMIZE_SHAPE */ count = 0; - if (!wwin->window_flags.no_titlebar) { + if (!WFLAGP(wwin, no_titlebar)) { rect[count].x = -1; rect[count].y = -1; rect[count].width = wwin->frame->core->width + 2; rect[count].height = wwin->frame->top_width + 1; count++; } - if (!wwin->window_flags.no_resizebar) { + if (!WFLAGP(wwin, no_resizebar)) { rect[count].x = -1; rect[count].y = wwin->frame->core->height - wwin->frame->bottom_width; rect[count].width = wwin->frame->core->width + 2; @@ -2052,7 +2041,9 @@ wWindowSetKeyGrabs(WWindow *wwin) wwin->frame->core->window, True, GrabModeAsync, GrabModeAsync); } +#ifndef LITE wRootMenuBindShortcuts(wwin->frame->core->window); +#endif } @@ -2070,7 +2061,7 @@ wWindowResetMouseGrabs(WWindow *wwin) XUngrabButton(dpy, AnyButton, AnyModifier, wwin->client_win); - if (!wwin->window_flags.no_bind_mouse) { + if (!WFLAGP(wwin, no_bind_mouse)) { /* grabs for Meta+drag */ wHackedGrabButton(AnyButton, MOD_MASK, wwin->client_win, True, ButtonPressMask, GrabModeSync, @@ -2093,9 +2084,10 @@ wWindowUpdateGNUstepAttr(WWindow *wwin, GNUstepWMAttributes *attr) { if (attr->flags & GSExtraFlagsAttr) { - if (wwin->window_flags.broken_close != + if (WFLAGP(wwin, broken_close) != (attr->extra_flags & GSDocumentEditedFlag)) { - wwin->window_flags.broken_close = !wwin->window_flags.broken_close; + + wwin->client_flags.broken_close = !WFLAGP(wwin, broken_close); wWindowUpdateButtonImages(wwin); } @@ -2328,7 +2320,7 @@ titlebarDblClick(WCoreWindow *sender, void *data, XEvent *event) if (event->xbutton.button==Button1) { if (event->xbutton.state == 0) { - if (!wwin->window_flags.no_shadeable) { + if (!WFLAGP(wwin, no_shadeable)) { /* shade window */ if (wwin->flags.shaded) wUnshadeWindow(wwin); @@ -2348,7 +2340,7 @@ titlebarDblClick(WCoreWindow *sender, void *data, XEvent *event) } /* maximize window */ - if (dir !=0 && !wwin->window_flags.no_resizable) { + if (dir !=0 && !WFLAGP(wwin, no_resizable)) { if (wwin->flags.maximized) wUnmaximizeWindow(wwin); else @@ -2393,7 +2385,7 @@ frameMouseDown(WObjDescriptor *desc, XEvent *event) #endif return; } - if (event->xbutton.button == Button3 && !wwin->window_flags.no_resizable) + if (event->xbutton.button == Button3 && !WFLAGP(wwin, no_resizable)) wMouseResizeWindow(wwin, event); else wMouseMoveWindow(wwin, event); @@ -2535,7 +2527,7 @@ windowIconifyClick(WCoreWindow *sender, void *data, XEvent *event) (event->xbutton.button == Button3)) { wapp = wApplicationOf(wwin->main_window); - if (wapp && !wwin->window_flags.no_appicon) + if (wapp && !WFLAGP(wwin, no_appicon)) wHideApplication(wapp); } else if (event->xbutton.state==0) { wIconifyWindow(wwin); diff --git a/src/window.h b/src/window.h index 1ada3074..16383513 100644 --- a/src/window.h +++ b/src/window.h @@ -26,9 +26,6 @@ #include "wconfig.h" #include "GNUstep.h" -#ifdef MWM_HINTS -# include "motif.h" -#endif #include "texture.h" #include "menu.h" #include "application.h" @@ -67,10 +64,27 @@ typedef enum { * that the value that will be used will be that of the leader foo.bar. * The attributes inspector must always save application wide options * in the name of the leader window, not the child. + * */ /* * All flags must have their default values = 0 + * + * New flag scheme: + * + * user_flags, defined_flags + * client_flags + * + * if defined window_flag then window_flag else client_flag + * */ + +#define WFLAGP(wwin, FLAG) ((wwin)->defined_user_flags.FLAG \ + ? (wwin)->user_flags.FLAG \ + : (wwin)->client_flags.FLAG) + +#define WSETUFLAG(wwin, FLAG, VAL) (wwin)->user_flags.FLAG = (VAL),\ + (wwin)->defined_user_flags.FLAG = 1 + typedef struct { /* OpenStep */ unsigned int no_titlebar:1; /* draw titlebar? */ @@ -107,11 +121,12 @@ typedef struct { unsigned int always_user_icon:1; /* ignore client IconPixmap or * IconWindow */ - + unsigned int start_miniaturized:1; unsigned int start_hidden:1; + unsigned int start_maximized:1; unsigned int dont_save_session:1; /* do not save app's state in session */ - + /* * emulate_app_icon must be automatically disabled for apps that can * generate their own appicons and for apps that have no_appicon=1 @@ -119,6 +134,8 @@ typedef struct { unsigned int emulate_appicon:1; } WWindowAttributes; + + /* * Window manager protocols that both the client as we understand. */ @@ -144,7 +161,11 @@ typedef struct WWindow { struct WWindow *next; WScreen *screen_ptr; /* pointer to the screen structure */ - WWindowAttributes window_flags; /* window attribute flags */ + WWindowAttributes user_flags; /* window attribute flags set by user */ + WWindowAttributes defined_user_flags;/* mask for user_flags */ + WWindowAttributes client_flags; /* window attribute flags set by app + * initialized with global defaults */ + struct InspectorPanel *inspector; /* pointer to attribute editor panel */ struct WFrameWindow *frame; /* the frame window */ @@ -203,6 +224,7 @@ typedef struct WWindow { unsigned int hidden:1; unsigned int shaded:1; unsigned int maximized:2; + unsigned int omnipresent:1; unsigned int semi_focused:1; /* window type flags */ @@ -210,7 +232,7 @@ typedef struct WWindow { #ifdef SHAPE unsigned int shaped:1; #endif - + /* info flags */ unsigned int buttons_dont_fit:1; unsigned int rebuild_texture:1;/* the window was resized and @@ -228,8 +250,16 @@ typedef struct WWindow { unsigned int inspector_open:1; /* attrib inspector is already open */ unsigned int destroyed:1; /* window was already destroyed */ - + unsigned int menu_open_for_me:1; /* window commands menu */ + +#ifdef KWM_HINTS + unsigned int kwm_hidden_for_modules:1; +#endif +#ifdef OLWM_HINTS + unsigned int olwm_push_pin:1; /* emulate pushpin behaviour */ + unsigned int olwm_limit_menu:1; +#endif } flags; /* state of the window */ struct WIcon *icon; /* icon info for the window */ @@ -237,6 +267,12 @@ typedef struct WWindow { } WWindow; +#define IS_OMNIPRESENT(w) ((w)->flags.omnipresent ^ WFLAGP(w, omnipresent)) + +#define WINDOW_LEVEL(w) ((w)->frame->core->stacking->window_level) + + + /* * Changes to this must update wWindowSaveState/getSavedState * @@ -309,7 +345,7 @@ WWindow *wManageInternalWindow(WScreen *scr, Window window, Window owner, char *title, int x, int y, int width, int height); -void wWindowCheckAttributeSanity(WWindow *wwin, WWindowAttributes *flags); +void wWindowSetupInitialAttributes(WWindow *wwin, int *level, int *workspace); void wWindowUpdateGNUstepAttr(WWindow *wwin, GNUstepWMAttributes *attr); @@ -326,5 +362,6 @@ WMagicNumber wWindowGetSavedState(Window win); void wWindowDeleteSavedState(WMagicNumber id); +Bool wWindowObscuresWindow(WWindow *wwin, WWindow *obscured); #endif diff --git a/src/winmenu.c b/src/winmenu.c index cb825665..3695b3d8 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -42,20 +42,27 @@ #include "workspace.h" #include "winspector.h" #include "dialog.h" +#include "stacking.h" #define MC_MAXIMIZE 0 #define MC_MINIATURIZE 1 #define MC_SHADE 2 #define MC_HIDE 3 -#define MC_SELECT 4 -#define MC_DUMMY_MOVETO 5 -#define MC_PROPERTIES 6 -#define MC_SHORTCUT 7 +#define MC_MOVERESIZE 4 +#define MC_SELECT 5 +#define MC_DUMMY_MOVETO 6 +#define MC_PROPERTIES 7 +#define MC_OPTIONS 8 +#define MC_SHORTCUT 8 -#define MC_CLOSE 8 -#define MC_KILL 9 +#define MC_CLOSE 9 +#define MC_KILL 10 +#define WO_KEEP_ON_TOP 0 +#define WO_KEEP_AT_BOTTOM 1 +#define WO_OMNIPRESENT 2 +#define WO_ENTRIES 3 /**** Global data ***/ extern Time LastTimestamp; @@ -66,6 +73,36 @@ extern WShortKey wKeyBindings[WKBD_LAST]; extern WPreferences wPreferences; +static void updateOptionsMenu(WMenu *menu, WWindow *wwin); + +static void +execWindowOptionCommand(WMenu *menu, WMenuEntry *entry) +{ + WWindow *wwin = (WWindow*)entry->clientdata; + + switch (entry->order) { + case WO_KEEP_ON_TOP: + if(wwin->frame->core->stacking->window_level!=WMFloatingLevel) + ChangeStackingLevel(wwin->frame->core, WMFloatingLevel); + else + ChangeStackingLevel(wwin->frame->core, WMNormalLevel); + break; + + case WO_KEEP_AT_BOTTOM: + if(wwin->frame->core->stacking->window_level!=WMSunkenLevel) + ChangeStackingLevel(wwin->frame->core, WMSunkenLevel); + else + ChangeStackingLevel(wwin->frame->core, WMNormalLevel); + break; + + case WO_OMNIPRESENT: + wwin->flags.omnipresent^=1; + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_WORKSPACE); + break; + } +} + + static void execMenuCommand(WMenu *menu, WMenuEntry *entry) { @@ -79,6 +116,7 @@ execMenuCommand(WMenu *menu, WMenuEntry *entry) /* send delete message */ wClientSendProtocol(wwin, _XA_WM_DELETE_WINDOW, LastTimestamp); break; + case MC_KILL: wretain(wwin); if (wPreferences.dont_confirm_kill @@ -90,38 +128,52 @@ execMenuCommand(WMenu *menu, WMenuEntry *entry) } wrelease(wwin); break; + case MC_MINIATURIZE: - if (wwin->protocols.MINIATURIZE_WINDOW) { - wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW, - LastTimestamp); - } else { - wIconifyWindow(wwin); + if (wwin->flags.miniaturized) { + wDeiconifyWindow(wwin); + } else{ + if (wwin->protocols.MINIATURIZE_WINDOW) { + wClientSendProtocol(wwin, _XA_GNUSTEP_WM_MINIATURIZE_WINDOW, + LastTimestamp); + } else { + wIconifyWindow(wwin); + } } break; + case MC_MAXIMIZE: if (wwin->flags.maximized) wUnmaximizeWindow(wwin); else wMaximizeWindow(wwin, MAX_VERTICAL|MAX_HORIZONTAL); break; + case MC_SHADE: if (wwin->flags.shaded) wUnshadeWindow(wwin); else wShadeWindow(wwin); break; + case MC_SELECT: wSelectWindow(wwin, !wwin->flags.selected); break; + + case MC_MOVERESIZE: + wKeyboardMoveResizeWindow(wwin); + break; + case MC_PROPERTIES: if (wwin->wm_class || wwin->wm_instance) wShowInspectorForWindow(wwin); break; - + case MC_HIDE: wapp = wApplicationOf(wwin->main_window); wHideApplication(wapp); break; + } } @@ -141,7 +193,7 @@ makeShortcutCommand(WMenu *menu, WMenuEntry *entry) { WWindow *wwin = (WWindow*)entry->clientdata; - wwin->screen_ptr->shortcutWindow[entry->order] = wwin; + wwin->screen_ptr->shortcutWindow[entry->order-WO_ENTRIES] = wwin; wSelectWindow(wwin, !wwin->flags.selected); XFlush(dpy); @@ -194,15 +246,25 @@ updateMakeShortcutMenu(WMenu *menu, WWindow *wwin) if (!smenu) return; - buffer = wmalloc(strlen(_("Shortcut"))+16); + buffer = wmalloc(strlen(_("Set Shortcut"))+16); - for (i=0; i<smenu->entry_no; i++) { + for (i=WO_ENTRIES; i<smenu->entry_no; i++) { char *tmp; - WWindow *twin = wwin->screen_ptr->shortcutWindow[i]; + int shortcutNo = i-WO_ENTRIES; + WWindow *twin = wwin->screen_ptr->shortcutWindow[shortcutNo]; WMenuEntry *entry = smenu->entries[i]; - sprintf(buffer, "%s %s %i", twin ? (twin == wwin ? "+" : "-" ) : " ", - _("Shortcut"), i+1); + sprintf(buffer, "%s %i", _("Set Shortcut"), shortcutNo+1); + + if (!twin) { + entry->flags.indicator_on = 0; + } else { + entry->flags.indicator_on = 1; + if (twin != wwin) + entry->flags.indicator_type = MI_CHECK; + else + entry->flags.indicator_type = MI_DIAMOND; + } if (strcmp(buffer, entry->text)!=0) { free(entry->text); @@ -210,7 +272,7 @@ updateMakeShortcutMenu(WMenu *menu, WWindow *wwin) smenu->flags.realized = 0; } - kcode = wKeyBindings[WKBD_WINDOW1+i].keycode; + kcode = wKeyBindings[WKBD_WINDOW1+shortcutNo].keycode; if (kcode) { if ((tmp = XKeysymToString(XKeycodeToKeysym(dpy, kcode, 0))) @@ -237,6 +299,30 @@ updateMakeShortcutMenu(WMenu *menu, WWindow *wwin) } +static void +updateOptionsMenu(WMenu *menu, WWindow *wwin) +{ + WMenu *smenu = menu->cascades[menu->entries[MC_OPTIONS]->cascade]; + + /* keep on top check */ + smenu->entries[WO_KEEP_ON_TOP]->clientdata = wwin; + smenu->entries[WO_KEEP_ON_TOP]->flags.indicator_on = + (wwin->frame->core->stacking->window_level == WMFloatingLevel)?1:0; + + /* keep at bottom check */ + smenu->entries[WO_KEEP_AT_BOTTOM]->clientdata = wwin; + smenu->entries[WO_KEEP_AT_BOTTOM]->flags.indicator_on = + (wwin->frame->core->stacking->window_level == WMSunkenLevel)?1:0; + + /* omnipresent check */ + smenu->entries[WO_OMNIPRESENT]->clientdata = wwin; + smenu->entries[WO_OMNIPRESENT]->flags.indicator_on = IS_OMNIPRESENT(wwin); + + smenu->flags.realized = 0; + wMenuRealize(smenu); +} + + static WMenu* makeWorkspaceMenu(WScreen *scr) { @@ -253,10 +339,40 @@ makeWorkspaceMenu(WScreen *scr) return menu; } + +static WMenu* +makeMakeShortcutMenu(WScreen *scr, WMenu *menu) +{ + /* + WMenu *menu; + */ + int i; +/* + menu = wMenuCreate(scr, NULL, False); + if (!menu) { + wwarning(_("could not create submenu for window menu")); + return NULL; + } + */ + + for (i=0; i<MAX_WINDOW_SHORTCUTS; i++) { + WMenuEntry *entry; + + entry = wMenuAddCallback(menu, "", makeShortcutCommand, NULL); + + entry->flags.indicator = 1; + } + + return menu; +} + + + static WMenu* -makeMakeShortcutMenu(WScreen *scr) +makeOptionsMenu(WScreen *scr) { WMenu *menu; + WMenuEntry *entry; menu = wMenuCreate(scr, NULL, False); if (!menu) { @@ -264,14 +380,25 @@ makeMakeShortcutMenu(WScreen *scr) return NULL; } - wMenuAddCallback(menu, "", makeShortcutCommand, NULL); - wMenuAddCallback(menu, "", makeShortcutCommand, NULL); - wMenuAddCallback(menu, "", makeShortcutCommand, NULL); - wMenuAddCallback(menu, "", makeShortcutCommand, NULL); - + entry = wMenuAddCallback(menu, _("Keep on top"), execWindowOptionCommand, + NULL); + entry->flags.indicator = 1; + entry->flags.indicator_type = MI_CHECK; + + entry = wMenuAddCallback(menu, _("Keep at bottom"), execWindowOptionCommand, + NULL); + entry->flags.indicator = 1; + entry->flags.indicator_type = MI_CHECK; + + entry = wMenuAddCallback(menu, _("Omnipresent"), execWindowOptionCommand, + NULL); + entry->flags.indicator = 1; + entry->flags.indicator_type = MI_CHECK; + return menu; } + static WMenu* createWindowMenu(WScreen *scr) { @@ -286,7 +413,7 @@ createWindowMenu(WScreen *scr) * entries, you must update the command #defines in the top of * this file. */ - entry = wMenuAddCallback(menu, _("(Un)Maximize"), execMenuCommand, NULL); + entry = wMenuAddCallback(menu, _("Maximize"), execMenuCommand, NULL); if (wKeyBindings[WKBD_MAXIMIZE].keycode!=0) { kcode = wKeyBindings[WKBD_MAXIMIZE].keycode; @@ -303,7 +430,7 @@ createWindowMenu(WScreen *scr) entry->rtext = wstrdup(tmp); } - entry = wMenuAddCallback(menu, _("(Un)Shade"), execMenuCommand, NULL); + entry = wMenuAddCallback(menu, _("Shade"), execMenuCommand, NULL); if (wKeyBindings[WKBD_SHADE].keycode!=0) { kcode = wKeyBindings[WKBD_SHADE].keycode; @@ -319,6 +446,14 @@ createWindowMenu(WScreen *scr) entry->rtext = wstrdup(tmp); } + entry = wMenuAddCallback(menu, _("Resize/Move"), execMenuCommand, NULL); + if (wKeyBindings[WKBD_MOVERESIZE].keycode!=0) { + kcode = wKeyBindings[WKBD_MOVERESIZE].keycode; + + if (kcode && (tmp = XKeysymToString(XKeycodeToKeysym(dpy, kcode, 0)))) + entry->rtext = wstrdup(tmp); + } + entry = wMenuAddCallback(menu, _("Select"), execMenuCommand, NULL); if (wKeyBindings[WKBD_SELECT].keycode!=0) { kcode = wKeyBindings[WKBD_SELECT].keycode; @@ -334,8 +469,14 @@ createWindowMenu(WScreen *scr) entry = wMenuAddCallback(menu, _("Attributes..."), execMenuCommand, NULL); + entry = wMenuAddCallback(menu, _("Options"), NULL, NULL); + wMenuEntrySetCascade(menu, entry, + makeMakeShortcutMenu(scr, makeOptionsMenu(scr))); + +/* entry = wMenuAddCallback(menu, _("Select Shortcut"), NULL, NULL); wMenuEntrySetCascade(menu, entry, makeMakeShortcutMenu(scr)); + */ entry = wMenuAddCallback(menu, _("Close"), execMenuCommand, NULL); if (wKeyBindings[WKBD_CLOSE].keycode!=0) { @@ -367,44 +508,63 @@ CloseWindowMenu(WScreen *scr) } -void -OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard) + +static void +updateMenuForWindow(WMenu *menu, WWindow *wwin) { - WMenu *menu; WApplication *wapp = wApplicationOf(wwin->main_window); WScreen *scr = wwin->screen_ptr; int i; - wwin->flags.menu_open_for_me = 1; + updateOptionsMenu(menu, wwin); - if (!scr->window_menu) { - scr->window_menu = createWindowMenu(scr); - } else { - updateWorkspaceMenu(scr->workspace_submenu); - } - - menu = scr->window_menu; - if (menu->flags.mapped) { - wMenuUnmap(menu); - if (menu->entries[0]->clientdata==wwin) { - return; - } - } - updateMakeShortcutMenu(menu, wwin); wMenuSetEnabled(menu, MC_HIDE, wapp!=NULL - && !wapp->main_window_desc->window_flags.no_appicon); + && !WFLAGP(wapp->main_window_desc, no_appicon)); wMenuSetEnabled(menu, MC_CLOSE, (wwin->protocols.DELETE_WINDOW - && !wwin->window_flags.no_closable)); - - wMenuSetEnabled(menu, MC_MINIATURIZE, !wwin->window_flags.no_miniaturizable); + && !WFLAGP(wwin, no_closable))); + + if (wwin->flags.miniaturized) { + static char *text = _("Deminiaturize"); + + menu->entries[MC_MINIATURIZE]->text = text; + } else { + static char *text = _("Miniaturize"); + + menu->entries[MC_MINIATURIZE]->text = text; + } + + wMenuSetEnabled(menu, MC_MINIATURIZE, !WFLAGP(wwin, no_miniaturizable)); + + if (wwin->flags.maximized) { + static char *text = _("Unmaximize"); + + menu->entries[MC_MAXIMIZE]->text = text; + } else { + static char *text = _("Maximize"); + + menu->entries[MC_MAXIMIZE]->text = text; + } - wMenuSetEnabled(menu, MC_SHADE, !wwin->window_flags.no_shadeable); + wMenuSetEnabled(menu, MC_MOVERESIZE, !WFLAGP(wwin, no_resizable)); - wMenuSetEnabled(menu, MC_DUMMY_MOVETO, !wwin->window_flags.omnipresent); + if (wwin->flags.shaded) { + static char *text = _("Unshade"); + + menu->entries[MC_SHADE]->text = text; + } else { + static char *text = _("Shade"); + + menu->entries[MC_SHADE]->text = text; + } + + wMenuSetEnabled(menu, MC_SHADE, !WFLAGP(wwin, no_shadeable) + && !wwin->flags.miniaturized); + + wMenuSetEnabled(menu, MC_DUMMY_MOVETO, !IS_OMNIPRESENT(wwin)); if ((wwin->wm_class || wwin->wm_instance) && !wwin->flags.inspector_open) { wMenuSetEnabled(menu, MC_PROPERTIES, True); @@ -426,8 +586,39 @@ OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard) } } - if (!menu->flags.realized) - wMenuRealize(menu); + menu->flags.realized = 0; + wMenuRealize(menu); +} + + +void +OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard) +{ + WMenu *menu; + WScreen *scr = wwin->screen_ptr; + + wwin->flags.menu_open_for_me = 1; + + if (!scr->window_menu) { + scr->window_menu = createWindowMenu(scr); + + /* hack to save some memory allocation/deallocation */ + free(scr->window_menu->entries[MC_MINIATURIZE]->text); + free(scr->window_menu->entries[MC_MAXIMIZE]->text); + free(scr->window_menu->entries[MC_SHADE]->text); + } else { + updateWorkspaceMenu(scr->workspace_submenu); + } + + menu = scr->window_menu; + if (menu->flags.mapped) { + wMenuUnmap(menu); + if (menu->entries[0]->clientdata==wwin) { + return; + } + } + + updateMenuForWindow(menu, wwin); x -= menu->frame->core->width/2; if (x + menu->frame->core->width > wwin->frame_x+wwin->frame->core->width) @@ -438,3 +629,40 @@ OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard) if (!wwin->flags.internal_window) wMenuMapAt(menu, x, y, keyboard); } + + +#if 0 +void +OpenMiniwindowMenu(WWindow *wwin, int x, int y) +{ + WMenu *menu; + WScreen *scr = wwin->screen_ptr; + + wwin->flags.menu_open_for_me = 1; + + if (!scr->window_menu) { + scr->window_menu = createWindowMenu(scr); + + /* hack to save some memory allocation/deallocation */ + free(scr->window_menu->entries[MC_MINIATURIZE]->text); + free(scr->window_menu->entries[MC_MAXIMIZE]->text); + free(scr->window_menu->entries[MC_SHADE]->text); + } else { + updateWorkspaceMenu(scr->workspace_submenu); + } + + menu = scr->window_menu; + if (menu->flags.mapped) { + wMenuUnmap(menu); + if (menu->entries[0]->clientdata==wwin) { + return; + } + } + + updateMenuForWindow(menu, wwin); + + x -= menu->frame->core->width/2; + + wMenuMapAt(menu, x, y, False); +} +#endif diff --git a/src/winspector.c b/src/winspector.c index d3844037..8109ba1b 100644 --- a/src/winspector.c +++ b/src/winspector.c @@ -69,6 +69,7 @@ static proplist_t AKeepInsideScreen; static proplist_t AUnfocusable; static proplist_t AAlwaysUserIcon; static proplist_t AStartMiniaturized; +static proplist_t AStartMaximized; static proplist_t ADontSaveSession; static proplist_t AEmulateAppIcon; @@ -114,6 +115,7 @@ make_keys() AUnfocusable = PLMakeString("Unfocusable"); AAlwaysUserIcon = PLMakeString("AlwaysUserIcon"); AStartMiniaturized = PLMakeString("StartMiniaturized"); + AStartMaximized = PLMakeString("StartMaximized"); AStartHidden = PLMakeString("StartHidden"); ADontSaveSession = PLMakeString("DontSaveSession"); AEmulateAppIcon = PLMakeString("EmulateAppIcon"); @@ -505,6 +507,9 @@ saveSettings(WMButton *button, InspectorPanel *panel) insertAttribute(dict, winDic, AStartMiniaturized, value, &different, flags); value = (WMGetButtonSelected(panel->attrChk[8])!=0) ? Yes : No; + insertAttribute(dict, winDic, AStartMaximized, value, &different, flags); + + value = (WMGetButtonSelected(panel->attrChk[9])!=0) ? Yes : No; insertAttribute(dict, winDic, ASkipWindowList, value, &different, flags); @@ -610,7 +615,7 @@ makeAppIconFor(WApplication *wapp) if (wapp->app_icon) return; - if (!wapp->main_window_desc->window_flags.no_appicon) + if (!WFLAGP(wapp->main_window_desc, no_appicon)) wapp->app_icon = wAppIconCreate(wapp->main_window_desc); else wapp->app_icon = NULL; @@ -676,66 +681,77 @@ static void applySettings(WMButton *button, InspectorPanel *panel) { WWindow *wwin = panel->inspected; - WWindowAttributes *wflags = &wwin->window_flags; - WWindowAttributes oldFlags = *wflags; WApplication *wapp = wApplicationOf(wwin->main_window); int floating, sunken, skip_window_list; + int old_omnipresent; + int old_no_bind_keys; + int old_no_bind_mouse; + + old_omnipresent = WFLAGP(wwin, omnipresent); + old_no_bind_keys = WFLAGP(wwin, no_bind_keys); + old_no_bind_mouse = WFLAGP(wwin, no_bind_mouse); showIconFor(WMWidgetScreen(button), panel, NULL, NULL, USE_TEXT_FIELD); - wflags->no_titlebar = WMGetButtonSelected(panel->attrChk[0]); - wflags->no_resizebar = WMGetButtonSelected(panel->attrChk[1]); - wflags->no_close_button = WMGetButtonSelected(panel->attrChk[2]); - wflags->no_miniaturize_button = WMGetButtonSelected(panel->attrChk[3]); + WSETUFLAG(wwin, no_titlebar, WMGetButtonSelected(panel->attrChk[0])); + WSETUFLAG(wwin, no_resizebar, WMGetButtonSelected(panel->attrChk[1])); + WSETUFLAG(wwin, no_close_button, WMGetButtonSelected(panel->attrChk[2])); + WSETUFLAG(wwin, no_miniaturize_button, WMGetButtonSelected(panel->attrChk[3])); floating = WMGetButtonSelected(panel->attrChk[4]); sunken = WMGetButtonSelected(panel->attrChk[5]); - wflags->omnipresent = WMGetButtonSelected(panel->attrChk[6]); - wflags->start_miniaturized = WMGetButtonSelected(panel->attrChk[7]); - skip_window_list = WMGetButtonSelected(panel->attrChk[8]); - - wflags->no_hide_others = WMGetButtonSelected(panel->moreChk[0]); - wflags->no_bind_keys = WMGetButtonSelected(panel->moreChk[1]); - wflags->no_bind_mouse = WMGetButtonSelected(panel->moreChk[2]); - wflags->dont_move_off = WMGetButtonSelected(panel->moreChk[3]); - wflags->no_focusable = WMGetButtonSelected(panel->moreChk[4]); - wflags->dont_save_session = WMGetButtonSelected(panel->moreChk[5]); - wflags->emulate_appicon = WMGetButtonSelected(panel->moreChk[6]); - wflags->always_user_icon = WMGetButtonSelected(panel->alwChk); - - if (wflags->no_titlebar && wwin->flags.shaded) + WSETUFLAG(wwin, omnipresent, WMGetButtonSelected(panel->attrChk[6])); + WSETUFLAG(wwin, start_miniaturized, WMGetButtonSelected(panel->attrChk[7])); + WSETUFLAG(wwin, start_maximized, WMGetButtonSelected(panel->attrChk[8])); + skip_window_list = WMGetButtonSelected(panel->attrChk[9]); + + WSETUFLAG(wwin, no_hide_others, WMGetButtonSelected(panel->moreChk[0])); + WSETUFLAG(wwin, no_bind_keys, WMGetButtonSelected(panel->moreChk[1])); + WSETUFLAG(wwin, no_bind_mouse, WMGetButtonSelected(panel->moreChk[2])); + WSETUFLAG(wwin, dont_move_off, WMGetButtonSelected(panel->moreChk[3])); + WSETUFLAG(wwin, no_focusable, WMGetButtonSelected(panel->moreChk[4])); + WSETUFLAG(wwin, dont_save_session, WMGetButtonSelected(panel->moreChk[5])); + WSETUFLAG(wwin, emulate_appicon, WMGetButtonSelected(panel->moreChk[6])); + WSETUFLAG(wwin, always_user_icon, WMGetButtonSelected(panel->alwChk)); + + if (WFLAGP(wwin, no_titlebar) && wwin->flags.shaded) wUnshadeWindow(wwin); - wflags->no_shadeable = wflags->no_titlebar; + + WSETUFLAG(wwin, no_shadeable, WFLAGP(wwin, no_titlebar)); if (floating) { - if (!wflags->floating) + if (!WFLAGP(wwin, floating)) ChangeStackingLevel(wwin->frame->core, WMFloatingLevel); } else if (sunken) { - if (!wflags->sunken) + if (!WFLAGP(wwin, sunken)) ChangeStackingLevel(wwin->frame->core, WMSunkenLevel); } else { - if (wflags->floating || wflags->sunken) + if (WFLAGP(wwin, floating) || WFLAGP(wwin, sunken)) ChangeStackingLevel(wwin->frame->core, WMNormalLevel); } - wflags->sunken = sunken; - wflags->floating = floating; + WSETUFLAG(wwin, sunken, sunken); + WSETUFLAG(wwin, floating, floating); + wwin->flags.omnipresent = 0; - - if (wflags->skip_window_list != skip_window_list) { - int action = ((wflags->skip_window_list = skip_window_list)) - ? ACTION_REMOVE : ACTION_ADD; - UpdateSwitchMenu(wwin->screen_ptr, wwin, action); + if (WFLAGP(wwin, skip_window_list) != skip_window_list) { + WSETUFLAG(wwin, skip_window_list, skip_window_list); + UpdateSwitchMenu(wwin->screen_ptr, wwin, + skip_window_list ? ACTION_REMOVE : ACTION_ADD); + } else { + if (WFLAGP(wwin, omnipresent) != old_omnipresent) { + UpdateSwitchMenu(wwin->screen_ptr, wwin, ACTION_CHANGE_WORKSPACE); + } } - if (wflags->no_bind_keys != oldFlags.no_bind_keys) { - if (!wflags->no_bind_keys) { + if (WFLAGP(wwin, no_bind_keys) != old_no_bind_keys) { + if (!WFLAGP(wwin, no_bind_keys)) { XUngrabKey(dpy, AnyKey, AnyModifier, wwin->frame->core->window); } else { wWindowSetKeyGrabs(wwin); } } - if (wflags->no_bind_mouse != oldFlags.no_bind_mouse) { + if (WFLAGP(wwin, no_bind_mouse) != old_no_bind_mouse) { wWindowResetMouseGrabs(wwin); } @@ -749,12 +765,13 @@ applySettings(WMButton *button, InspectorPanel *panel) if (wapp) { /* do application wide stuff */ - wflags = &wapp->main_window_desc->window_flags; + WSETUFLAG(wapp->main_window_desc, start_hidden, + WMGetButtonSelected(panel->appChk[0])); - wflags->start_hidden = WMGetButtonSelected(panel->appChk[0]); - wflags->no_appicon = WMGetButtonSelected(panel->appChk[1]); + WSETUFLAG(wapp->main_window_desc, no_appicon, + WMGetButtonSelected(panel->appChk[1])); - if (wflags->no_appicon) + if (WFLAGP(wapp->main_window_desc, no_appicon)) removeAppIconFor(wapp); else makeAppIconFor(wapp); @@ -780,9 +797,10 @@ revertSettings(WMButton *button, InspectorPanel *panel) { WWindow *wwin = panel->inspected; WApplication *wapp = wApplicationOf(wwin->main_window); - int i, n, floating, sunken, skip_window_list; + int i, n; char *wm_instance = NULL; char *wm_class = NULL; + int workspace, level; if (WMGetButtonSelected(panel->instRb) != 0) wm_instance = wwin->wm_instance; @@ -792,54 +810,45 @@ revertSettings(WMButton *button, InspectorPanel *panel) wm_instance = wwin->wm_instance; wm_class = wwin->wm_class; } - memset(&wwin->window_flags, 0, sizeof(WWindowAttributes)); - wDefaultFillAttributes(wwin->screen_ptr, wm_instance, wm_class, - &wwin->window_flags, True); + memset(&wwin->defined_user_flags, 0, sizeof(WWindowAttributes)); + memset(&wwin->user_flags, 0, sizeof(WWindowAttributes)); + memset(&wwin->client_flags, 0, sizeof(WWindowAttributes)); - wWindowCheckAttributeSanity(wwin, &wwin->window_flags); + wWindowSetupInitialAttributes(wwin, &level, &workspace); - wwin->window_flags.kill_close = (wwin->protocols.DELETE_WINDOW) ? 0 : 1; - /* transients can't be iconified or maximized */ - if (wwin->window_flags.no_miniaturizable) { - wwin->window_flags.no_miniaturize_button = 1; - } - /* if the window can't be resized, remove the resizebar */ - if (wwin->window_flags.no_resizable) { - wwin->window_flags.no_resizebar = 1; - } - - wwin->window_flags.no_shadeable = wwin->window_flags.no_titlebar; - - for (i=0; i < 9; i++) { + for (i=0; i < 10; i++) { int flag = 0; switch (i) { case 0: - flag = wwin->window_flags.no_titlebar; + flag = WFLAGP(wwin, no_titlebar); break; case 1: - flag = wwin->window_flags.no_resizebar; + flag = WFLAGP(wwin, no_resizebar); break; case 2: - flag = wwin->window_flags.no_close_button; + flag = WFLAGP(wwin, no_close_button); break; case 3: - flag = wwin->window_flags.no_miniaturize_button; + flag = WFLAGP(wwin, no_miniaturize_button); break; case 4: - flag = wwin->window_flags.floating; + flag = WFLAGP(wwin, floating); break; case 5: - flag = wwin->window_flags.sunken; + flag = WFLAGP(wwin, sunken); break; case 6: - flag = wwin->window_flags.omnipresent; + flag = WFLAGP(wwin, omnipresent); break; case 7: - flag = wwin->window_flags.no_focusable; + flag = WFLAGP(wwin, start_miniaturized); break; case 8: - flag = wwin->window_flags.skip_window_list; + flag = WFLAGP(wwin, start_maximized!=0); + break; + case 9: + flag = WFLAGP(wwin, skip_window_list); break; } WMSetButtonSelected(panel->attrChk[i], flag); @@ -849,25 +858,25 @@ revertSettings(WMButton *button, InspectorPanel *panel) switch (i) { case 0: - flag = wwin->window_flags.no_hide_others; + flag = WFLAGP(wwin, no_hide_others); break; case 1: - flag = wwin->window_flags.no_bind_keys; + flag = WFLAGP(wwin, no_bind_keys); break; case 2: - flag = wwin->window_flags.no_bind_mouse; + flag = WFLAGP(wwin, no_bind_mouse); break; case 3: - flag = wwin->window_flags.dont_move_off; + flag = WFLAGP(wwin, dont_move_off); break; case 4: - flag = wwin->window_flags.start_miniaturized; + flag = WFLAGP(wwin, no_focusable); break; case 5: - flag = wwin->window_flags.dont_save_session; + flag = WFLAGP(wwin, dont_save_session); break; case 6: - flag = wwin->window_flags.emulate_appicon; + flag = WFLAGP(wwin, emulate_appicon); break; } WMSetButtonSelected(panel->moreChk[i], flag); @@ -878,22 +887,22 @@ revertSettings(WMButton *button, InspectorPanel *panel) switch (i) { case 0: - flag = wapp->main_window_desc->window_flags.start_hidden; + flag = WFLAGP(wapp->main_window_desc, start_hidden); break; case 1: - flag = wapp->main_window_desc->window_flags.no_appicon; + flag = WFLAGP(wapp->main_window_desc, no_appicon); break; } WMSetButtonSelected(panel->appChk[i], flag); } } - WMSetButtonSelected(panel->alwChk, wwin->window_flags.always_user_icon); + WMSetButtonSelected(panel->alwChk, WFLAGP(wwin, always_user_icon)); showIconFor(WMWidgetScreen(panel->alwChk), panel, wm_instance, wm_class, REVERT_TO_DEFAULT); n = wDefaultGetStartWorkspace(wwin->screen_ptr, wm_instance, wm_class); - + if (n >= 0 && n <= wwin->screen_ptr->workspace_count) { WMPerformButtonClick(panel->setRb); WMSetTextFieldText(panel->wsText, wwin->screen_ptr->workspaces[n]->name); @@ -950,6 +959,20 @@ textEditedObserver(void *observerData, WMNotification *notification) WMPerformButtonClick(panel->setRb); } + +static void +selectSpecification(WMWidget *bPtr, void *data) +{ + InspectorPanel *panel = (InspectorPanel*)data; + + if (bPtr == panel->defaultRb) { + WMSetButtonEnabled(panel->applyBtn, False); + } else { + WMSetButtonEnabled(panel->applyBtn, True); + } +} + + static InspectorPanel* createInspectorForWindow(WWindow *wwin) { @@ -989,7 +1012,7 @@ createInspectorForWindow(WWindow *wwin) btn_width = (PWIDTH - (2 * 15) - (2 * 10)) / 3; panel->saveBtn = WMCreateCommandButton(panel->win); WMSetButtonAction(panel->saveBtn, (WMAction*)saveSettings, panel); - WMMoveWidget(panel->saveBtn, 15, 310); + WMMoveWidget(panel->saveBtn, (2 * (btn_width + 10)) + 15, 310); WMSetButtonText(panel->saveBtn, _("Save")); WMResizeWidget(panel->saveBtn, btn_width, 28); if (wPreferences.flags.noupdates) @@ -1003,8 +1026,8 @@ createInspectorForWindow(WWindow *wwin) panel->revertBtn = WMCreateCommandButton(panel->win); WMSetButtonAction(panel->revertBtn, (WMAction*)revertSettings, panel); - WMMoveWidget(panel->revertBtn, (2 * (btn_width + 10)) + 15, 310); - WMSetButtonText(panel->revertBtn, _("Revert")); + WMMoveWidget(panel->revertBtn, 15, 310); + WMSetButtonText(panel->revertBtn, _("Reload")); WMResizeWidget(panel->revertBtn, btn_width, 28); /* page selection popup button */ @@ -1033,6 +1056,7 @@ createInspectorForWindow(WWindow *wwin) WMResizeWidget(panel->defaultRb, frame_width - (2 * 10), 20); WMSetButtonText(panel->defaultRb, _("Defaults for all windows")); WMSetButtonSelected(panel->defaultRb, False); + WMSetButtonAction(panel->defaultRb, selectSpecification, panel); if (wwin->wm_class && wwin->wm_instance) { @@ -1043,6 +1067,8 @@ createInspectorForWindow(WWindow *wwin) WMSetButtonText(panel->bothRb, charbuf); WMSetButtonSelected(panel->bothRb, True); WMGroupButtons(panel->defaultRb, panel->bothRb); + + WMSetButtonAction(panel->bothRb, selectSpecification, panel); } if (wwin->wm_instance) { @@ -1052,6 +1078,8 @@ createInspectorForWindow(WWindow *wwin) WMSetButtonText(panel->instRb, wwin->wm_instance); WMSetButtonSelected(panel->instRb, False); WMGroupButtons(panel->defaultRb, panel->instRb); + + WMSetButtonAction(panel->instRb, selectSpecification, panel); } if (wwin->wm_class) { @@ -1061,6 +1089,8 @@ createInspectorForWindow(WWindow *wwin) WMSetButtonText(panel->clsRb, wwin->wm_class); WMSetButtonSelected(panel->clsRb, False); WMGroupButtons(panel->defaultRb, panel->clsRb); + + WMSetButtonAction(panel->clsRb, selectSpecification, panel); } panel->specLbl = WMCreateLabel(panel->win); @@ -1078,46 +1108,50 @@ createInspectorForWindow(WWindow *wwin) WMMoveWidget(panel->attrFrm, 15, 50); WMResizeWidget(panel->attrFrm, frame_width, 240); - for (i=0; i < 9; i++) { + for (i=0; i < 10; i++) { char *caption = NULL; int flag = 0; switch (i) { case 0: caption = _("Disable titlebar"); - flag = wwin->window_flags.no_titlebar; + flag = WFLAGP(wwin, no_titlebar); break; case 1: caption = _("Disable resizebar"); - flag = wwin->window_flags.no_resizebar; + flag = WFLAGP(wwin, no_resizebar); break; case 2: caption = _("Disable close button"); - flag = wwin->window_flags.no_close_button; + flag = WFLAGP(wwin, no_close_button); break; case 3: caption = _("Disable miniaturize button"); - flag = wwin->window_flags.no_miniaturize_button; + flag = WFLAGP(wwin, no_miniaturize_button); break; case 4: caption = _("Keep on top / floating"); - flag = wwin->window_flags.floating; + flag = WFLAGP(wwin, floating); break; case 5: - caption = _("Keep on bottom / sunken"); - flag = wwin->window_flags.sunken; + caption = _("Keep at bottom / sunken"); + flag = WFLAGP(wwin, sunken); break; case 6: caption = _("Omnipresent"); - flag = wwin->window_flags.omnipresent; + flag = WFLAGP(wwin, omnipresent); break; case 7: caption = _("Start Miniaturized"); - flag = wwin->window_flags.start_miniaturized; + flag = WFLAGP(wwin, start_miniaturized); break; case 8: + caption = _("Start Maximized"); + flag = WFLAGP(wwin, start_maximized!=0); + break; + case 9: caption = _("Skip window list"); - flag = wwin->window_flags.skip_window_list; + flag = WFLAGP(wwin, skip_window_list); break; } panel->attrChk[i] = WMCreateSwitchButton(panel->attrFrm); @@ -1141,31 +1175,31 @@ createInspectorForWindow(WWindow *wwin) switch (i) { case 0: caption = _("Ignore HideOthers"); - flag = wwin->window_flags.no_hide_others; + flag = WFLAGP(wwin, no_hide_others); break; case 1: caption = _("Don't bind keyboard shortcuts"); - flag = wwin->window_flags.no_bind_keys; + flag = WFLAGP(wwin, no_bind_keys); break; case 2: caption = _("Don't bind mouse clicks"); - flag = wwin->window_flags.no_bind_mouse; + flag = WFLAGP(wwin, no_bind_mouse); break; case 3: caption = _("Keep inside screen"); - flag = wwin->window_flags.dont_move_off; + flag = WFLAGP(wwin, dont_move_off); break; case 4: caption = _("Don't let it take focus"); - flag = wwin->window_flags.no_focusable; + flag = WFLAGP(wwin, no_focusable); break; case 5: caption = _("Don't Save Session"); - flag = wwin->window_flags.dont_save_session; + flag = WFLAGP(wwin, dont_save_session); break; case 6: caption = _("Emulate Application Icon"); - flag = wwin->window_flags.emulate_appicon; + flag = WFLAGP(wwin, emulate_appicon); break; } panel->moreChk[i] = WMCreateSwitchButton(panel->moreFrm); @@ -1233,7 +1267,7 @@ createInspectorForWindow(WWindow *wwin) WMMoveWidget(panel->alwChk, 20, 140); WMResizeWidget(panel->alwChk, PWIDTH - (2 * 15) - (2 * 15), 20); WMSetButtonText(panel->alwChk, _("Ignore client supplied icon")); - WMSetButtonSelected(panel->alwChk, wwin->window_flags.always_user_icon); + WMSetButtonSelected(panel->alwChk, WFLAGP(wwin, always_user_icon)); panel->wsFrm = WMCreateFrame(panel->win); @@ -1289,11 +1323,11 @@ createInspectorForWindow(WWindow *wwin) switch (i) { case 0: caption = _("Start Hidden"); - flag = wapp->main_window_desc->window_flags.start_hidden; + flag = WFLAGP(wapp->main_window_desc, start_hidden); break; case 1: caption = _("No application icon"); - flag = wapp->main_window_desc->window_flags.no_appicon; + flag = WFLAGP(wapp->main_window_desc, no_appicon); break; } panel->appChk[i] = WMCreateSwitchButton(panel->appFrm); @@ -1303,7 +1337,7 @@ createInspectorForWindow(WWindow *wwin) WMSetButtonText(panel->appChk[i], caption); } - if (wwin->window_flags.emulate_appicon) { + if (WFLAGP(wwin, emulate_appicon)) { WMSetButtonEnabled(panel->appChk[1], False); WMSetButtonEnabled(panel->moreChk[6], True); } else { @@ -1326,7 +1360,7 @@ createInspectorForWindow(WWindow *wwin) /* if the window is a transient, don't let it have a miniaturize * button */ - if (wwin->transient_for!=None && wwin->transient_for!=scr->root_win) + if (wWindowFor(wwin->transient_for)!=NULL) WMSetButtonEnabled(panel->attrChk[3], False); else WMSetButtonEnabled(panel->attrChk[3], True); @@ -1343,7 +1377,7 @@ createInspectorForWindow(WWindow *wwin) if (panel->appFrm) WMMapSubwidgets(panel->appFrm); - WMSetPopUpButtonSelectedItem(panel->pagePopUp, 0); + WMSetPopUpButtonSelectedItem(panel->pagePopUp, 1); changePage(panel->pagePopUp, panel); @@ -1361,14 +1395,16 @@ createInspectorForWindow(WWindow *wwin) y = wwin->frame_y+wwin->frame->top_width*2; if (y + PHEIGHT > scr->scr_height) y = scr->scr_height - PHEIGHT - 30; + if (x + PWIDTH > scr->scr_width) + x = scr->scr_width - PWIDTH; panel->frame = wManageInternalWindow(scr, parent, wwin->client_win, charbuf, x, y, PWIDTH, PHEIGHT); /* kluge to know who should get the key events */ panel->frame->client_leader = WMWidgetXID(panel->win); - panel->frame->window_flags.no_closable = 0; - panel->frame->window_flags.no_close_button = 0; + WSETUFLAG(panel->frame, no_closable, 0); + WSETUFLAG(panel->frame, no_close_button, 0); wWindowUpdateButtonImages(panel->frame); wFrameWindowShowButton(panel->frame->frame, WFF_RIGHT_BUTTON); panel->frame->frame->on_click_right = destroyInspector; diff --git a/src/winspector.h b/src/winspector.h index 787c1d2f..edf32590 100644 --- a/src/winspector.h +++ b/src/winspector.h @@ -56,7 +56,7 @@ typedef struct InspectorPanel { /* second page. attributes */ WMFrame *attrFrm; - WMButton *attrChk[9]; + WMButton *attrChk[10]; /* 3rd page. more attributes */ WMFrame *moreFrm; diff --git a/src/workspace.c b/src/workspace.c index fa912c03..f8d2b616 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -41,6 +41,12 @@ #include "actions.h" #include "workspace.h" #include "appicon.h" +#ifdef GNOME_STUFF +#include "gnome.h" +#endif +#ifdef KWM_HINTS +#include "kwm.h" +#endif #include <proplist.h> @@ -85,17 +91,26 @@ wWorkspaceNew(WScreen *scr) scr->workspace_count++; wspace = wmalloc(sizeof(WWorkspace)); + wspace->name = NULL; + +#ifdef KWM_HINTS + if (scr->flags.kwm_syncing_count) { + wspace->name = wKWMGetWorkspaceName(scr, scr->workspace_count-1); + } +#endif + if (!wspace->name) { + wspace->name = wmalloc(strlen(_("Workspace %i"))+8); + sprintf(wspace->name, _("Workspace %i"), scr->workspace_count); + } + - wspace->name = wmalloc(strlen(_("Workspace %i"))+8); - sprintf(wspace->name, _("Workspace %i"), scr->workspace_count); if (!wPreferences.flags.noclip) { wspace->clip = wDockCreate(scr, WM_CLIP); } else wspace->clip = NULL; - list = wmalloc(sizeof(WWorkspace*)*scr->workspace_count); - + for (i=0; i<scr->workspace_count-1; i++) { list[i] = scr->workspaces[i]; } @@ -105,7 +120,18 @@ wWorkspaceNew(WScreen *scr) wWorkspaceMenuUpdate(scr, scr->workspace_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu); - +#ifdef GNOME_STUFF + wGNOMEUpdateWorkspaceHints(scr); +#endif +#ifdef KWM_HINTS + if (!scr->flags.kwm_syncing_count) { + wKWMUpdateWorkspaceCountHint(scr); + wKWMUpdateWorkspaceNameHint(scr, scr->workspace_count-1); + } + wKWMSetUsableAreaHint(scr, scr->workspace_count-1); +#endif + XFlush(dpy); + return scr->workspace_count-1; } return -1; @@ -113,24 +139,25 @@ wWorkspaceNew(WScreen *scr) -void +Bool wWorkspaceDelete(WScreen *scr, int workspace) { WWindow *tmp; WWorkspace **list; int i, j; + if (workspace<=0) - return; + return False; /* verify if workspace is in use by some window */ tmp = scr->focused_window; while (tmp) { - if (tmp->frame->workspace==workspace) - return; + if (!IS_OMNIPRESENT(tmp) && tmp->frame->workspace==workspace) + return False; tmp = tmp->prev; } - + if (!wPreferences.flags.noclip) { wDockDestroy(scr->workspaces[workspace]->clip); scr->workspaces[workspace]->clip = NULL; @@ -176,6 +203,18 @@ wWorkspaceDelete(WScreen *scr, int workspace) wMenuRemoveItem(menu, --i); wMenuRealize(menu); } + +#ifdef GNOME_STUFF + wGNOMEUpdateWorkspaceHints(scr); +#endif +#ifdef KWM_HINTS + wKWMUpdateWorkspaceCountHint(scr); +#endif + + if (scr->current_workspace >= scr->workspace_count) + wWorkspaceChange(scr, scr->workspace_count-1); + + return True; } @@ -191,42 +230,43 @@ wWorkspaceChange(WScreen *scr, int workspace) } } + +void +wWorkspaceRelativeChange(WScreen *scr, int amount) +{ + int w; + + w = scr->current_workspace + amount; + + if (amount < 0) { + + if (w >= 0) + wWorkspaceChange(scr, w); + else if (wPreferences.ws_cycle) + wWorkspaceChange(scr, scr->workspace_count + w); + + } else if (amount > 0) { + + if (w < scr->workspace_count) + wWorkspaceChange(scr, w); + else if (wPreferences.ws_advance) + wWorkspaceChange(scr, WMAX(w, MAX_WORKSPACES-1)); + else if (wPreferences.ws_cycle) + wWorkspaceChange(scr, w % scr->workspace_count); + } +} + + + void wWorkspaceForceChange(WScreen *scr, int workspace) { WWindow *tmp, *foc=NULL; -#ifdef EXPERIMENTAL - WWorkspaceTexture *wsback; -#endif if (workspace >= MAX_WORKSPACES || workspace < 0) return; -#ifdef EXPERIMENTAL - /* update the background for the workspace */ - if (workspace < scr->wspaceTextureCount - && scr->wspaceTextures[workspace]) { - wsback = scr->wspaceTextures[workspace]; - } else { - /* check if the previous workspace used the default background */ - if (scr->current_workspace < 0 - || scr->current_workspace >= scr->wspaceTextureCount - || scr->wspaceTextures[scr->current_workspace]==NULL) { - wsback = NULL; - } else { - wsback = scr->defaultTexure; - } - } - if (wsback) { - if (wsback->pixmap!=None) { - XSetWindowBackgroundPixmap(dpy, scr->root_win, wsback->pixmap); - } else { - XSetWindowBackground(dpy, scr->root_win, wsback->solid); - } - XClearWindow(dpy, scr->root_win); - XFlush(dpy); - } -#endif /* EXPERIMENTAL */ + SendHelperMessage(scr, 'C', workspace+1, NULL); if (workspace > scr->workspace_count-1) { wWorkspaceMake(scr, workspace - scr->workspace_count + 1); @@ -245,14 +285,14 @@ wWorkspaceForceChange(WScreen *scr, int workspace) if (tmp->frame->workspace!=workspace && !tmp->flags.selected) { /* unmap windows not on this workspace */ if ((tmp->flags.mapped||tmp->flags.shaded) - && !tmp->window_flags.omnipresent + && !IS_OMNIPRESENT(tmp) && !tmp->flags.changing_workspace) { XUnmapWindow(dpy, tmp->frame->core->window); tmp->flags.mapped = 0; } /* also unmap miniwindows not on this workspace */ - if (tmp->flags.miniaturized && - !tmp->window_flags.omnipresent && tmp->icon) { + if (tmp->flags.miniaturized && !IS_OMNIPRESENT(tmp) + && tmp->icon) { if (!wPreferences.sticky_icons) { XUnmapWindow(dpy, tmp->icon->core->window); tmp->icon->mapped = 0; @@ -263,7 +303,7 @@ wWorkspaceForceChange(WScreen *scr, int workspace) } } /* update current workspace of omnipresent windows */ - if (tmp->window_flags.omnipresent) { + if (IS_OMNIPRESENT(tmp)) { WApplication *wapp = wApplicationOf(tmp->main_window); tmp->frame->workspace = workspace; @@ -292,7 +332,7 @@ wWorkspaceForceChange(WScreen *scr, int workspace) /* Also map miniwindow if not omnipresent */ if (!wPreferences.sticky_icons && tmp->flags.miniaturized && - !tmp->window_flags.omnipresent && tmp->icon) { + !IS_OMNIPRESENT(tmp) && tmp->icon) { tmp->icon->mapped = 1; XMapWindow(dpy, tmp->icon->core->window); } @@ -337,7 +377,8 @@ wWorkspaceForceChange(WScreen *scr, int workspace) if (scr->dock) wAppIconPaint(scr->dock->icon_array[0]); if (scr->clip_icon) { - if (scr->workspaces[workspace]->clip->auto_collapse) { + if (scr->workspaces[workspace]->clip->auto_collapse || + scr->workspaces[workspace]->clip->auto_raise_lower) { /* to handle enter notify. This will also */ XUnmapWindow(dpy, scr->clip_icon->icon->core->window); XMapWindow(dpy, scr->clip_icon->icon->core->window); @@ -345,6 +386,14 @@ wWorkspaceForceChange(WScreen *scr, int workspace) wClipIconPaint(scr->clip_icon); } } + +#ifdef GNOME_STUFF + wGNOMEUpdateCurrentWorkspaceHint(scr); +#endif +#ifdef KWM_HINTS + wKWMUpdateCurrentWorkspaceHint(scr); +#endif + XFlush(dpy); } @@ -444,9 +493,18 @@ wWorkspaceRename(WScreen *scr, int workspace, char *name) wMenuRealize(scr->workspace_menu); } } + UpdateSwitchMenuWorkspace(scr, workspace); + if (scr->clip_icon) wClipIconPaint(scr->clip_icon); + +#ifdef GNOME_STUFF + wGNOMEUpdateWorkspaceNamesHint(scr); +#endif +#ifdef KWM_HINTS + wKWMUpdateWorkspaceNameHint(scr, workspace); +#endif } @@ -613,7 +671,13 @@ wWorkspaceRestoreState(WScreen *scr) if (i>0) wDockHideIcons(scr->workspaces[i]->clip); } +#ifdef KWM_HINTS + wKWMUpdateWorkspaceNameHint(scr, i); +#endif } +#ifdef GNOME_STUFF + wGNOMEUpdateWorkspaceNamesHint(scr); +#endif } diff --git a/src/workspace.h b/src/workspace.h index 07963a4e..e5793fde 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -32,7 +32,7 @@ typedef struct WWorkspace { void wWorkspaceMake(WScreen *scr, int count); int wWorkspaceNew(WScreen *scr); -void wWorkspaceDeleteLast(WScreen *scr); +Bool wWorkspaceDelete(WScreen *scr, int workspace); void wWorkspaceChange(WScreen *scr, int workspace); void wWorkspaceForceChange(WScreen *scr, int workspace); @@ -47,4 +47,6 @@ void wWorkspaceRestoreState(WScreen *scr); void wWorkspaceRename(WScreen *scr, int workspace, char *name); +void wWorkspaceRelativeChange(WScreen *scr, int amount); + #endif diff --git a/src/xde.c b/src/xde.c new file mode 100644 index 00000000..a8ef769d --- /dev/null +++ b/src/xde.c @@ -0,0 +1,113 @@ + +#include "wconfig.h" + +#ifdef XDE_DND + +#include <X11/Xlib.h> +#include "WindowMaker.h" +#include "window.h" + +#include "stdlib.h" + +#include <X11/Xatom.h> +#include <gdk/gdk.h> + + +extern Atom _XA_XDE_REQUEST; +extern Atom _XA_XDE_ENTER; +extern Atom _XA_XDE_LEAVE; +extern Atom _XA_XDE_DATA_AVAILABLE; +extern Atom _XDE_FILETYPE; +extern Atom _XDE_URLTYPE; + + + +Bool +wXDEProcessClientMessage(XClientMessageEvent *event) +{ + Bool done = False; + + if (event->message_type==_XA_XDE_DATA_AVAILABLE) { + GdkEvent gdkev; + WScreen *scr = wScreenForWindow(event->window); + Atom tmpatom; + int datalenght; + long tmplong; + char * tmpstr, * runstr, * freestr, * tofreestr; + printf("x\n"); + gdkev.dropdataavailable.u.allflags = event->data.l[1]; + gdkev.dropdataavailable.timestamp = event->data.l[4]; + + if(gdkev.dropdataavailable.u.flags.isdrop){ + gdkev.dropdataavailable.type = GDK_DROP_DATA_AVAIL; + gdkev.dropdataavailable.requestor = event->data.l[0]; + XGetWindowProperty(dpy,gdkev.dropdataavailable.requestor, + event->data.l[2], + 0, LONG_MAX -1, + 0, XA_PRIMARY, &tmpatom, + &datalenght, + &gdkev.dropdataavailable.data_numbytes, + &tmplong, + &tmpstr); + datalenght=gdkev.dropdataavailable.data_numbytes-1; + tofreestr=tmpstr; + runstr=NULL; + for(;datalenght>0;datalenght-=(strlen(tmpstr)+1),tmpstr=&tmpstr[strlen(tmpstr)+1]){ + freestr=runstr;runstr=wstrappend(runstr,tmpstr);free(freestr); + freestr=runstr;runstr=wstrappend(runstr," ");free(freestr); + } + free(tofreestr); + scr->xdestring=runstr; + /* no need to redirect ? */ + wDockReceiveDNDDrop(scr,event); + free(runstr); + scr->xdestring=NULL; + } + done = True; + } else if (event->message_type==_XA_XDE_LEAVE) { + printf("leave\n"); + done = True; + } else if (event->message_type==_XA_XDE_ENTER) { + GdkEvent gdkev; + XEvent replyev; + + gdkev.dropenter.u.allflags=event->data.l[1]; + printf("from win %x\n",event->data.l[0]); + printf("to win %x\n",event->window); + printf("enter %x\n",event->data.l[1]); + printf("v %x ",event->data.l[2]); + printf("%x ",event->data.l[3]); + printf("%x\n",event->data.l[4]); + + if(event->data.l[2]==_XDE_FILETYPE || + event->data.l[3]==_XDE_FILETYPE || + event->data.l[4]==_XDE_FILETYPE || + event->data.l[2]==_XDE_URLTYPE || + event->data.l[3]==_XDE_URLTYPE || + event->data.l[4]==_XDE_URLTYPE) + if(gdkev.dropenter.u.flags.sendreply){ + /*reply*/ + replyev.xclient.type = ClientMessage; + replyev.xclient.window = event->data.l[0]; + replyev.xclient.format = 32; + replyev.xclient.message_type = _XA_XDE_REQUEST; + replyev.xclient.data.l[0] = event->window; + + gdkev.dragrequest.u.allflags = 0; + gdkev.dragrequest.u.flags.protocol_version = 0; + gdkev.dragrequest.u.flags.willaccept = 1; + gdkev.dragrequest.u.flags.delete_data = 0; + + replyev.xclient.data.l[1] = gdkev.dragrequest.u.allflags; + replyev.xclient.data.l[2] = replyev.xclient.data.l[3] = 0; + replyev.xclient.data.l[4] = event->data.l[2]; + XSendEvent(dpy, replyev.xclient.window, 0, NoEventMask, &replyev); + XSync(dpy, 0); + } + done = True; + } + + return done; +} + +#endif diff --git a/src/xde.h b/src/xde.h new file mode 100644 index 00000000..971895c6 --- /dev/null +++ b/src/xde.h @@ -0,0 +1,8 @@ + +#ifndef _XDE_H_ +#define _XDE_H_ + +Bool wXDEProcessClientMessage(XClientMessageEvent *event); + + +#endif diff --git a/test/Makefile.am b/test/Makefile.am index 5471e413..f57584f4 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -8,7 +8,7 @@ noinst_PROGRAMS = wtest wtest_SOURCES = wtest.c -wtest_LDADD = -L$(top_builddir)/wmlib -lWMaker @XLFLAGS@ @XLIBS@ +wtest_LDADD = $(top_builddir)/wmlib/libWMaker.a @XLFLAGS@ @XLIBS@ INCLUDES = -g -D_BSD_SOURCE @XCFLAGS@ -I$(top_srcdir)/wmlib diff --git a/test/Makefile.in b/test/Makefile.in index 043fad24..46615064 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -98,7 +101,7 @@ noinst_PROGRAMS = wtest wtest_SOURCES = wtest.c -wtest_LDADD = -L$(top_builddir)/wmlib -lWMaker @XLFLAGS@ @XLIBS@ +wtest_LDADD = $(top_builddir)/wmlib/libWMaker.a @XLFLAGS@ @XLIBS@ INCLUDES = -g -D_BSD_SOURCE @XCFLAGS@ -I$(top_srcdir)/wmlib mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -115,11 +118,12 @@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ wtest_OBJECTS = wtest.o -wtest_DEPENDENCIES = +wtest_DEPENDENCIES = $(top_builddir)/wmlib/libWMaker.a wtest_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in @@ -133,7 +137,7 @@ OBJECTS = $(wtest_OBJECTS) all: Makefile $(PROGRAMS) .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile @@ -170,6 +174,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + wtest: $(wtest_OBJECTS) $(wtest_DEPENDENCIES) @rm -f wtest $(LINK) $(wtest_LDFLAGS) $(wtest_OBJECTS) $(wtest_LDADD) $(LIBS) @@ -246,28 +269,32 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean: mostlyclean-noinstPROGRAMS mostlyclean-compile \ - mostlyclean-tags mostlyclean-generic + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic -clean: clean-noinstPROGRAMS clean-compile clean-tags clean-generic \ - mostlyclean +clean: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean -distclean: distclean-noinstPROGRAMS distclean-compile distclean-tags \ - distclean-generic clean +distclean: distclean-noinstPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-noinstPROGRAMS \ - maintainer-clean-compile maintainer-clean-tags \ - maintainer-clean-generic distclean + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." .PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile tags mostlyclean-tags distclean-tags \ -clean-tags maintainer-clean-tags distdir info dvi installcheck \ -install-exec install-data install uninstall all installdirs \ -mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean diff --git a/util/Makefile.am b/util/Makefile.am index b5caf052..ba09bf70 100644 --- a/util/Makefile.am +++ b/util/Makefile.am @@ -13,7 +13,7 @@ INCLUDES = @DFLAGS@ -I$(top_srcdir)/wrlib -I$(top_srcdir)/libPropList\ @XCFLAGS@ @GFXFLAGS@ # X_EXTRA_LIBS is for libproplist in systems that need -lsocket -liblist= -L$(top_builddir)/libPropList -lPropList @X_EXTRA_LIBS@ +liblist= $(top_builddir)/libPropList/libPropList.la @X_EXTRA_LIBS@ wdwrite_LDADD = $(liblist) @@ -30,8 +30,9 @@ seticons_LDADD= $(liblist) geticonset_LDADD= $(liblist) -wmsetbg_LDADD = -L$(top_builddir)/libPropList -lPropList \ - -L$(top_builddir)/wrlib -lwraster \ +wmsetbg_LDADD = $(top_builddir)/libPropList/libPropList.la \ + $(top_builddir)/wrlib/libwraster.la \ + $(top_builddir)/WINGs/libWINGs.a \ @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm getstyle_SOURCES = getstyle.c @@ -57,6 +58,7 @@ wmaker.inst: $(srcdir)/wmaker.inst.in ./Makefile sed -e "s:#pkgdatadir#:$(pkgdatadir):" \ -e "s/#version#/$(VERSION)/" \ -e "s:#bindir#:$(bindir):" \ + -e "s:#LITE#:@LITE@:" \ $(srcdir)/wmaker.inst.in >wmaker.inst chmod 755 wmaker.inst diff --git a/util/Makefile.in b/util/Makefile.in index 8bd15807..d24a477a 100644 --- a/util/Makefile.in +++ b/util/Makefile.in @@ -67,6 +67,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -102,7 +105,7 @@ INCLUDES = @DFLAGS@ -I$(top_srcdir)/wrlib -I$(top_srcdir)/libPropList\ @XCFLAGS@ @GFXFLAGS@ # X_EXTRA_LIBS is for libproplist in systems that need -lsocket -liblist= -L$(top_builddir)/libPropList -lPropList @X_EXTRA_LIBS@ +liblist= $(top_builddir)/libPropList/libPropList.la @X_EXTRA_LIBS@ wdwrite_LDADD = $(liblist) @@ -118,8 +121,9 @@ seticons_LDADD= $(liblist) geticonset_LDADD= $(liblist) -wmsetbg_LDADD = -L$(top_builddir)/libPropList -lPropList \ - -L$(top_builddir)/wrlib -lwraster \ +wmsetbg_LDADD = $(top_builddir)/libPropList/libPropList.la \ + $(top_builddir)/wrlib/libwraster.la \ + $(top_builddir)/WINGs/libWINGs.a \ @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm getstyle_SOURCES = getstyle.c @@ -159,28 +163,30 @@ wxpaste_OBJECTS = wxpaste.o wxpaste_DEPENDENCIES = wxpaste_LDFLAGS = wdwrite_OBJECTS = wdwrite.o -wdwrite_DEPENDENCIES = +wdwrite_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la wdwrite_LDFLAGS = getstyle_OBJECTS = getstyle.o -getstyle_DEPENDENCIES = +getstyle_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la getstyle_LDFLAGS = setstyle_OBJECTS = setstyle.o -setstyle_DEPENDENCIES = +setstyle_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la setstyle_LDFLAGS = seticons_OBJECTS = seticons.o -seticons_DEPENDENCIES = +seticons_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la seticons_LDFLAGS = geticonset_OBJECTS = geticonset.o -geticonset_DEPENDENCIES = +geticonset_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la geticonset_LDFLAGS = wmsetbg_OBJECTS = wmsetbg.o -wmsetbg_DEPENDENCIES = +wmsetbg_DEPENDENCIES = $(top_builddir)/libPropList/libPropList.la \ +$(top_builddir)/wrlib/libwraster.la $(top_builddir)/WINGs/libWINGs.a wmsetbg_LDFLAGS = SCRIPTS = $(bin_SCRIPTS) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = README Makefile.am Makefile.in @@ -194,7 +200,7 @@ OBJECTS = $(wxcopy_OBJECTS) $(wxpaste_OBJECTS) $(wdwrite_OBJECTS) $(getstyle_OBJ all: Makefile $(PROGRAMS) $(SCRIPTS) .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile @@ -217,8 +223,8 @@ install-binPROGRAMS: $(bin_PROGRAMS) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ - echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ - $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ else :; fi; \ done @@ -247,6 +253,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + wxcopy: $(wxcopy_OBJECTS) $(wxcopy_DEPENDENCIES) @rm -f wxcopy $(LINK) $(wxcopy_LDFLAGS) $(wxcopy_OBJECTS) $(wxcopy_LDADD) $(LIBS) @@ -371,30 +396,33 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \ - mostlyclean-tags mostlyclean-generic + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic -clean: clean-binPROGRAMS clean-compile clean-tags clean-generic \ - mostlyclean +clean: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean -distclean: distclean-binPROGRAMS distclean-compile distclean-tags \ - distclean-generic clean +distclean: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \ - maintainer-clean-tags maintainer-clean-generic \ - distclean + maintainer-clean-libtool maintainer-clean-tags \ + maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile uninstall-binSCRIPTS install-binSCRIPTS tags \ -mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ -distdir info dvi installcheck install-exec install-data install \ -uninstall all installdirs mostlyclean-generic distclean-generic \ -clean-generic maintainer-clean-generic clean mostlyclean distclean \ -maintainer-clean +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool uninstall-binSCRIPTS \ +install-binSCRIPTS tags mostlyclean-tags distclean-tags clean-tags \ +maintainer-clean-tags distdir info dvi installcheck install-exec \ +install-data install uninstall all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean wmaker.inst: $(srcdir)/wmaker.inst.in ./Makefile @@ -402,6 +430,7 @@ wmaker.inst: $(srcdir)/wmaker.inst.in ./Makefile sed -e "s:#pkgdatadir#:$(pkgdatadir):" \ -e "s/#version#/$(VERSION)/" \ -e "s:#bindir#:$(bindir):" \ + -e "s:#LITE#:@LITE@:" \ $(srcdir)/wmaker.inst.in >wmaker.inst chmod 755 wmaker.inst diff --git a/util/README b/util/README index 414ab27c..4f872a37 100644 --- a/util/README +++ b/util/README @@ -12,7 +12,8 @@ geticonset- outputs the current set of icon assignments. Good for making setstyle- load style settings from a style file and setup WindowMaker -getstyle - gets current style settings and save into a file +getstyle - gets current style settings and save into a file or create + a theme pack. seticons- merges icon definitions into WMWindowAttributes file diff --git a/util/getstyle.c b/util/getstyle.c index 53b2159d..bd7253dd 100644 --- a/util/getstyle.c +++ b/util/getstyle.c @@ -25,6 +25,14 @@ #include <stdio.h> #include <proplist.h> #include <string.h> +#include <unistd.h> +#include <string.h> +#include <pwd.h> +#include <limits.h> + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif #include "../src/wconfig.h" @@ -35,11 +43,9 @@ static char *options[] = { "MenuTitleFont", "MenuTextFont", "IconTitleFont", - "ClipTitleFont", "DisplayFont", "HighlightColor", "HighlightTextColor", - "ClipTitleColor", "CClipTitleColor", "FTitleColor", "PTitleColor", @@ -53,6 +59,8 @@ static char *options[] = { "MenuTitleBack", "MenuTextBack", "IconBack", + "IconTitleColor", + "IconTitleBack", NULL }; @@ -68,6 +76,10 @@ static char *theme_options[] = { char *ProgName; +char *PixmapPath = NULL; + +char *ThemePath = NULL; + void print_help() @@ -76,6 +88,7 @@ print_help() puts("options:"); puts(" -h print help"); puts(" -t get theme options too"); + puts(" -p produce a theme pack"); } @@ -111,12 +124,359 @@ defaultsPathForDomain(char *domain) } +BOOL +StringCompareHook(proplist_t pl1, proplist_t pl2) +{ + char *str1, *str2; + + str1 = PLGetString(pl1); + str2 = PLGetString(pl2); + + if (strcasecmp(str1, str2)==0) + return YES; + else + return NO; +} + + +void +abortar(char *reason) +{ + char buffer[4000]; + + printf("%s: %s\n", ProgName, reason); + + if (ThemePath) { + printf("Removing unfinished theme pack\n"); + sprintf(buffer, "/bin/rm -fr %s", ThemePath); + + if (system(buffer)!=0) { + printf("%s: could not execute command %s\n", ProgName, buffer); + } + } + exit(1); +} + + + + +char* +wgethomedir() +{ + char *home = getenv("HOME"); + struct passwd *user; + + if (home) + return home; + + user = getpwuid(getuid()); + if (!user) { + char buffer[80]; + + sprintf(buffer, "could not get password entry for UID %i", getuid()); + perror(buffer); + return "/"; + } + if (!user->pw_dir) { + return "/"; + } else { + return user->pw_dir; + } +} + + +void* +wmalloc(int size) +{ + void *tmp; + + tmp = malloc(size); + if (!tmp) { + abortar("out of memory"); + } + + return tmp; +} + + +char* +wstrdup(char *str) +{ + char *tmp; + + tmp = wmalloc(strlen(str)+1); + + strcpy(tmp, str); + + return tmp; +} + + +static char* +getuserhomedir(char *username) +{ + struct passwd *user; + + user = getpwnam(username); + if (!user) { + char buffer[100]; + + sprintf(buffer,"could not get password entry for user %s", username); + perror(buffer); + 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); + } else { + int j; + j = 0; + while (*path!=0 && *path!='/') { + buffer2[j++] = *path; + buffer2[j] = 0; + path++; + } + home = getuserhomedir(buffer2); + if (!home) + return NULL; + strcat(buffer, home); + } + } + + i = strlen(buffer); + + while (*path!=0) { + char *tmp; + + if (*path=='$') { + int j = 0; + path++; + /* expand $(HOME) or $HOME style environment variables */ + if (*path=='(') { + path++; + while (*path!=0 && *path!=')') { + buffer2[j++] = *(path++); + buffer2[j] = 0; + } + if (*path==')') + path++; + tmp = getenv(buffer2); + if (!tmp) { + buffer[i] = 0; + strcat(buffer, "$("); + strcat(buffer, buffer2); + strcat(buffer, ")"); + i += strlen(buffer2)+3; + } else { + strcat(buffer, tmp); + i += strlen(tmp); + } + } else { + while (*path!=0 && *path!='/') { + buffer2[j++] = *(path++); + buffer2[j] = 0; + } + tmp = getenv(buffer2); + if (!tmp) { + strcat(buffer, "$"); + strcat(buffer, buffer2); + i += strlen(buffer2)+1; + } else { + strcat(buffer, tmp); + i += strlen(tmp); + } + } + } else { + buffer[i++] = *path; + path++; + } + } + + return wstrdup(buffer); +} + + + +char* +wfindfileinarray(proplist_t paths, char *file) +{ + int i; + char *path; + int len, flen; + char *fullpath; + + if (!file) + return NULL; + + if (*file=='/' || *file=='~' || !paths || !PLIsArray(paths) + || PLGetNumberOfElements(paths)==0) { + if (access(file, R_OK)<0) { + fullpath = wexpandpath(file); + if (!fullpath) + return NULL; + + if (access(fullpath, R_OK)<0) { + free(fullpath); + return NULL; + } else { + return fullpath; + } + } else { + return wstrdup(file); + } + } + + flen = strlen(file); + for (i=0; i < PLGetNumberOfElements(paths); i++) { + proplist_t tmp; + char *dir; + + tmp = PLGetArrayElement(paths, i); + if (!PLIsString(tmp) || !(dir = PLGetString(tmp))) + continue; + + len = strlen(dir); + path = wmalloc(len+flen+2); + path = memcpy(path, dir, len); + path[len]=0; + strcat(path, "/"); + strcat(path, file); + /* expand tilde */ + fullpath = wexpandpath(path); + free(path); + if (fullpath) { + /* check if file is readable */ + if (access(fullpath, R_OK)==0) { + return fullpath; + } + free(fullpath); + } + } + return NULL; +} + + + + +void +copyFile(char *dir, char *file) +{ + char buffer[4000]; + + sprintf(buffer, "/bin/cp %s %s", file, dir); + if (system(buffer)!=0) { + printf("%s: could not copy file %s\n", ProgName, file); + } +} + + +void +findCopyFile(char *dir, char *file) +{ + char *fullPath; + + fullPath = wfindfileinarray(PixmapPath, file); + copyFile(dir, fullPath); + free(fullPath); +} + + +char* +makeThemePack(proplist_t style, char *themeName) +{ + proplist_t keys; + proplist_t key; + proplist_t value; + int i; + char *themeDir; + + themeDir = wmalloc(strlen(themeName)+50); + sprintf(themeDir, "%s.themed", themeName); + ThemePath = themeDir; + { + char *tmp; + + tmp = wmalloc(strlen(themeDir)+20); + sprintf(tmp, "/bin/mkdir %s", themeDir); + if (system(tmp)!=0) { + printf("%s: could not create directory %s\n", ProgName, themeDir); + exit(1); + } + free(tmp); + } + keys = PLGetAllDictionaryKeys(style); + + for (i = 0; i < PLGetNumberOfElements(keys); i++) { + key = PLGetArrayElement(keys, i); + + value = PLGetDictionaryEntry(style, key); + if (value && PLIsArray(value) && PLGetNumberOfElements(value) > 2) { + proplist_t type; + char *t; + + type = PLGetArrayElement(value, 0); + t = PLGetString(type); + if (t && (strcasecmp(t, "tpixmap")==0 + || strcasecmp(t, "spixmap")==0 + || strcasecmp(t, "cpixmap")==0 + || strcasecmp(t, "tdgradient")==0 + || strcasecmp(t, "tvgradient")==0 + || strcasecmp(t, "thgradient")==0)) { + proplist_t file; + char *p; + char *newPath; + + file = PLGetArrayElement(value, 1); + + p = strrchr(PLGetString(file), '/'); + if (p) { + copyFile(themeDir, PLGetString(file)); + + newPath = wstrdup(p+1); + PLRemoveArrayElement(value, 1); + PLInsertArrayElement(value, PLMakeString(newPath), 1); + free(newPath); + } else { + findCopyFile(themeDir, PLGetString(file)); + } + } + } + } + + return themeDir; +} + + int main(int argc, char **argv) { proplist_t prop, style, key, val; char *path; int i, theme_too=0; + int make_pack = 0; char *style_file = NULL; @@ -124,8 +484,11 @@ main(int argc, char **argv) if (argc>1) { for (i=1; i<argc; i++) { - if (strcmp(argv[i], "-t")==0) { - theme_too++;; + if (strcmp(argv[i], "-p")==0) { + make_pack = 1; + theme_too = 1; + } else if (strcmp(argv[i], "-t")==0) { + theme_too++; } else if (argv[i][0] != '-') { style_file = argv[i]; } else { @@ -134,6 +497,13 @@ main(int argc, char **argv) } } } + + if (make_pack && !style_file) { + printf("%s: you must supply a name for the theme pack\n", ProgName); + exit(1); + } + + PLSetStringCmpHook(StringCompareHook); path = defaultsPathForDomain("WindowMaker"); @@ -155,6 +525,9 @@ main(int argc, char **argv) PLInsertDictionaryEntry(style, key, val); } + val = PLGetDictionaryEntry(prop, PLMakeString("PixmapPath")); + PixmapPath = PLGetString(val); + if (theme_too) { for (i=0; theme_options[i]!=NULL; i++) { key = PLMakeString(theme_options[i]); @@ -162,15 +535,28 @@ main(int argc, char **argv) val = PLGetDictionaryEntry(prop, key); if (val) PLInsertDictionaryEntry(style, key, val); - } + } } - if (style_file) { - val = PLMakeString(style_file); - PLSetFilename(style, val); + if (make_pack) { + char *path; + char *themeDir; + + makeThemePack(style, style_file); + + path = wmalloc(strlen(ThemePath)+32); + strcpy(path, ThemePath); + strcat(path, "/style"); + PLSetFilename(style, PLMakeString(path)); PLSave(style, NO); } else { - puts(PLGetDescriptionIndent(style, 0)); + if (style_file) { + val = PLMakeString(style_file); + PLSetFilename(style, val); + PLSave(style, NO); + } else { + puts(PLGetDescriptionIndent(style, 0)); + } } exit(0); } diff --git a/util/setstyle.c b/util/setstyle.c index 09ed2d94..dab03b3e 100644 --- a/util/setstyle.c +++ b/util/setstyle.c @@ -24,12 +24,28 @@ #include <stdlib.h> #include <stdio.h> #include <proplist.h> +#include <sys/stat.h> +#include <unistd.h> #include <string.h> #include "../src/wconfig.h" + +char *FontOptions[] = { + "IconTitleFont", + "ClipTitleFont", + "DisplayFont", + "MenuTextFont", + "MenuTitleFont", + NULL +}; + + + char *ProgName; +int ignoreFonts = 0; + char* defaultsPathForDomain(char *domain) @@ -64,21 +80,196 @@ defaultsPathForDomain(char *domain) } +void +hackPaths(proplist_t style, char *prefix) +{ + proplist_t keys; + proplist_t key; + proplist_t value; + int i; + + + keys = PLGetAllDictionaryKeys(style); + + for (i = 0; i < PLGetNumberOfElements(keys); i++) { + key = PLGetArrayElement(keys, i); + + value = PLGetDictionaryEntry(style, key); + if (value && PLIsArray(value) && PLGetNumberOfElements(value) > 2) { + proplist_t type; + char *t; + + type = PLGetArrayElement(value, 0); + t = PLGetString(type); + if (t && (strcasecmp(t, "tpixmap")==0 + || strcasecmp(t, "spixmap")==0 + || strcasecmp(t, "cpixmap")==0 + || strcasecmp(t, "tvgradient")==0 + || strcasecmp(t, "thgradient")==0 + || strcasecmp(t, "tdgradient")==0)) { + proplist_t file; + char buffer[4018]; + + file = PLGetArrayElement(value, 1); + sprintf(buffer, "%s/%s", prefix, PLGetString(file)); + PLRemoveArrayElement(value, 1); + PLInsertArrayElement(value, PLMakeString(buffer), 1); + } + } + } + +} + + + +/* + * since some of the options introduce incompatibilities, we will need + * to do a kluge here or the themes ppl will get real annoying. + * So, treat for the absence of the following options: + * IconTitleColor + * IconTitleBack + */ +void +hackStyle(proplist_t style) +{ + proplist_t keys; + proplist_t tmp; + int i; + int foundIconTitle = 0; + + keys = PLGetAllDictionaryKeys(style); + + for (i = 0; i < PLGetNumberOfElements(keys); i++) { + char *str; + + tmp = PLGetArrayElement(keys, i); + str = PLGetString(tmp); + if (str) { + int j, found; + + for (j = 0, found = 0; FontOptions[j]!=NULL; j++) { + if (strcasecmp(str, FontOptions[j])==0) { + PLRemoveDictionaryEntry(style, tmp); + found = 1; + break; + } + } + if (found) + continue; + + if (strcasecmp(str, "IconTitleColor")==0 + || strcasecmp(str, "IconTitleBack")==0) { + foundIconTitle = 1; + } + } + } + + if (!foundIconTitle) { + /* set the default values */ + tmp = PLGetDictionaryEntry(style, PLMakeString("FTitleColor")); + if (tmp) { + PLInsertDictionaryEntry(style, PLMakeString("IconTitleColor"), + tmp); + } + + tmp = PLGetDictionaryEntry(style, PLMakeString("FTitleBack")); + if (tmp) { + proplist_t type; + proplist_t value; + char *str; + + type = PLGetArrayElement(tmp, 0); + if (!type) + return; + + value = NULL; + + str = PLGetString(type); + if (strcasecmp(str, "solid")==0) { + value = PLGetArrayElement(tmp, 1); + } else if (strcasecmp(str, "dgradient")==0 + || strcasecmp(str, "hgradient")==0 + || strcasecmp(str, "vgradient")==0) { + proplist_t c1, c2; + int r1, g1, b1, r2, g2, b2; + char buffer[32]; + + c1 = PLGetArrayElement(tmp, 1); + c2 = PLGetArrayElement(tmp, 2); + if (sscanf(PLGetString(c1), "#%2x%2x%2x", &r1, &g1, &b1)==3 + && sscanf(PLGetString(c2), "#%2x%2x%2x", &r2, &g2, &b2)==3) { + sprintf(buffer, "#%2x%2x%2x", (r1+r2)/2, (g1+g2)/2, + (b1+b2)/2); + value = PLMakeString(buffer); + } else { + value = c1; + } + } else if (strcasecmp(str, "mdgradient")==0 + || strcasecmp(str, "mhgradient")==0 + || strcasecmp(str, "mvgradient")==0) { + + value = PLGetArrayElement(tmp, 1); + + } else if (strcasecmp(str, "tpixmap")==0 + || strcasecmp(str, "cpixmap")==0 + || strcasecmp(str, "spixmap")==0) { + + value = PLGetArrayElement(tmp, 2); + } + + if (value) { + PLInsertDictionaryEntry(style, PLMakeString("IconTitleBack"), + value); + } + } + } +} + + +BOOL +StringCompareHook(proplist_t pl1, proplist_t pl2) +{ + char *str1, *str2; + + str1 = PLGetString(pl1); + str2 = PLGetString(pl2); + + if (strcasecmp(str1, str2)==0) + return YES; + else + return NO; +} + + + + int main(int argc, char **argv) { proplist_t prop, style; char *path; + struct stat statbuf; ProgName = argv[0]; - if (argc!=2) { - printf("Syntax:\n%s <style file>\n", argv[0]); + if (argc<2) { + printf("Syntax:\n%s [-nofonts] <style file>\n", argv[0]); exit(1); } + + if (argc == 3) { + if (strcmp(argv[1], "-nofonts")==0) { + ignoreFonts = 1; + } else { + printf("Syntax:\n%s <style file> [-nofonts]\n", argv[0]); + exit(1); + } + } + + PLSetStringCmpHook(StringCompareHook); path = defaultsPathForDomain("WindowMaker"); - + prop = PLGetProplistWithPath(path); if (!prop) { printf("%s:could not load WindowMaker configuration file \"%s\".\n", @@ -86,12 +277,61 @@ main(int argc, char **argv) exit(1); } - style = PLGetProplistWithPath(argv[1]); - if (!style) { - printf("%s:could not load style file \"%s\".\n", ProgName, argv[1]); + if (stat(argv[argc-1], &statbuf) < 0) { + perror(argv[argc-1]); exit(1); } + if (S_ISDIR(statbuf.st_mode)) { + char buffer[4018]; + char *prefix; + + if (*argv[argc-1] != '/') { + if (!getcwd(buffer, 4000)) { + printf("%s: complete path for %s is too long\n", ProgName, + argv[argc-1]); + exit(1); + } + if (strlen(buffer) + strlen(argv[argc-1]) > 4000) { + printf("%s: complete path for %s is too long\n", ProgName, + argv[argc-1]); + exit(1); + } + strcat(buffer, "/"); + } else { + buffer[0] = 0; + } + strcat(buffer, argv[argc-1]); + + prefix = malloc(strlen(buffer)+10); + if (!prefix) { + printf("%s: out of memory\n", ProgName); + exit(1); + } + strcpy(prefix, buffer); + + strcat(buffer, "/style"); + + style = PLGetProplistWithPath(buffer); + if (!style) { + printf("%s:could not load style file \"%s\".\n", ProgName, + buffer); + exit(1); + } + + hackPaths(style, prefix); + free(prefix); + } else { + style = PLGetProplistWithPath(argv[argc-1]); + if (!style) { + printf("%s:could not load style file \"%s\".\n", ProgName, + argv[argc-1]); + exit(1); + } + } + + hackStyle(style); + PLMergeDictionaries(prop, style); PLSave(prop, YES); diff --git a/util/wmaker.inst.in b/util/wmaker.inst.in index b802955d..d4cedf43 100644 --- a/util/wmaker.inst.in +++ b/util/wmaker.inst.in @@ -145,19 +145,16 @@ fi if [ ! -d "$GSDIR/Library/WindowMaker/Styles" ]; then echo "Creating style library $GSDIR/Library/WindowMaker/Styles" make_dir $GSDIR/Library/WindowMaker/Styles -else - echo "Styles directory already exists. Skipping..." fi if [ ! -d "$GSDIR/Library/WindowMaker/Themes" ]; then echo "Creating theme library $GSDIR/Library/WindowMaker/Themes" make_dir $GSDIR/Library/WindowMaker/Themes -else - echo "Themes directory already exists. Skipping..." fi + if [ ! -d "$GSDIR/Library/WindowMaker/Backgrounds" ]; then echo "Creating bg image library $GSDIR/Library/WindowMaker/Backgrounds" make_dir $GSDIR/Library/WindowMaker/Backgrounds @@ -198,9 +195,7 @@ else fi -echo "Copying default menu configuration files..." -FILES=`(cd $GLOBALDIR;ls -1 menu* plmenu wmmacros)` -all="" +if test -z #LITE# ; then for i in $FILES; do if [ -f "$GSDIR/Library/WindowMaker/$i" ]; then echo "The file \"$i\" already exists in $GSDIR/Library/WindowMaker" @@ -218,7 +213,7 @@ for i in $FILES; do copy $GLOBALDIR/$i $GSDIR/Library/WindowMaker/$i fi done - +fi cp $GLOBALDIR/README $GSDIR/Library/WindowMaker cp -i $GLOBALDIR/autostart.sh $GSDIR/Library/WindowMaker/autostart @@ -234,14 +229,22 @@ show_end_message() { echo echo "Installation Finished" echo -echo "There are menus in 2 different file formats. The plain text format and" -echo "the property list format. The plain text format is more flexible, but" -echo "the menu in the property list format can be edited graphically. The" -echo "menu that will be used by default is the plain text. Read" -echo "$GSDIR/Library/WindowMaker/README for information on how to change it." - +if test -z #LITE# ; then + echo "There are menus in 2 different file formats. The plain text format and" + echo "the property list format. The plain text format is more flexible, but" + echo "the menu in the property list format can be edited graphically. The" + echo "menu that will be used by default is the plain text. Read" + echo "$GSDIR/Library/WindowMaker/README for information on how to change it." +else + echo "Your copy of Window Maker is configured especially for KDE." + echo "Window Maker application menus are not available." +fi } +if test -z `grep wmaker ~/.xinitrc`; then + show_end_message + exit 0 +fi trap "show_end_message;exit" 2 diff --git a/util/wmsetbg.c b/util/wmsetbg.c dissimilarity index 80% index 1504d5f2..4c1f00c8 100644 --- a/util/wmsetbg.c +++ b/util/wmsetbg.c @@ -1,509 +1,1163 @@ -/* wmsetbg.c- sets root window background image - * - * WindowMaker window manager - * - * Copyright (c) 1998 Dan Pascu - * Copyright (c) 1998 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 - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/Xatom.h> -#include <string.h> -#include <wraster.h> -#include <pwd.h> -#include <sys/types.h> - -#include "../src/wconfig.h" - -#include <proplist.h> - - -#ifdef DEBUG -#include <sys/time.h> -#include <time.h> -#endif - -#define WTP_TILE 1 -#define WTP_SCALE 2 -#define WTP_CENTER 3 - -char *ProgName; - -#define fuckin_crap - -#ifdef fuckin_crap -/* Alfredo please take a look at this function. I don't like the way - * it sends the XKillClient. Should it interfere this way with the rest? - * This was added by the patch to allow the transparent background for Eterm. - * Also for this purpose Eterm have a program named Esetroot. - * People wanting that feature can use that instead of wmsetbg. Why do we - * need to patch wmsetbg to do this? - * In case you want to keep it, please also check the way it does - * the PropModeAppend. -Dan */ -static void -setPixmapProperty(Pixmap pixmap, Display *dpy, Window root) -{ - Atom prop, type; - int format; - unsigned long length, after; - unsigned char *data; - - /* This will locate the property, creating it if it doesn't exist */ - prop = XInternAtom(dpy, "_XROOTPMAP_ID", False); - - if (prop == None) - return; - - /* Clear out the old pixmap */ - XGetWindowProperty(dpy, root, prop, 0L, 1L, True, AnyPropertyType, - &type, &format, &length, &after, &data); - - /* I think this is OK -Alfredo */ - if ((type == XA_PIXMAP) && (format == 32) && (length == 1)) { - XKillClient(dpy, *((Pixmap *)data)); - } - XDeleteProperty(dpy, root, prop); - - /* I don't understand this one. The atom is *always* created in - the previous XInternAtom() -Alfredo */ - prop = XInternAtom(dpy, "_XROOTPMAP_ID", True); - if (prop == None) - return; - - /* Now add the new one. We use PropModeAppend because PropModeReplace - doesn't seem to work if there isn't already a property there. */ - /* Must be something wrong with this code. - * Anyways, better do a XGrabServer() between the XDeleteProperty() and - * this XChangeProperty() if things will be this way. -Alfredo */ - XChangeProperty(dpy, root, prop, XA_PIXMAP, 32, PropModeAppend, - (unsigned char *) &pixmap, 1); - - XFlush(dpy); - /* Potential resource leak. Must check the rest of the - * program for other resources that rely on XCloseDisplay() to - * free them. -Alfredo */ - XSetCloseDownMode(dpy, RetainPermanent); - XFlush(dpy); -} -#endif - -void* -wmalloc(size_t size) -{ - void *ptr; - ptr = malloc(size); - if (!ptr) { - perror(ProgName); - exit(1); - } - return ptr; -} - -char* -gethomedir() -{ - char *home = getenv("HOME"); - struct passwd *user; - - if (home) - return home; - - user = getpwuid(getuid()); - if (!user) { - perror(ProgName); - return "/"; - } - if (!user->pw_dir) { - return "/"; - } else { - return user->pw_dir; - } -} - - - -void wAbort() -{ - exit(1); -} - - -void -print_help() -{ - printf("usage: %s [-options] image\n", ProgName); - puts("options:"); - puts(" -d dither image"); - puts(" -m match colors"); - puts(" -b <color> background color"); - puts(" -t tile image"); - puts(" -e center image"); - puts(" -s scale image (default)"); - puts(" -u update WindowMaker domain database"); - puts(" -D <domain> update <domain> database"); - puts(" -c <cpc> colors per channel to use"); -} - - -char* -defaultsPathForDomain(char *domain) -{ - char path[1024]; - char *gspath, *tmp; - - gspath = getenv("GNUSTEP_USER_ROOT"); - if (gspath) { - strcpy(path, gspath); - strcat(path, "/"); - } else { - strcpy(path, gethomedir()); - strcat(path, "/GNUstep/"); - } - strcat(path, DEFAULTS_DIR); - strcat(path, "/"); - strcat(path, domain); - - tmp = wmalloc(strlen(path)+2); - strcpy(tmp, path); - - return tmp; -} - - -char *wstrdup(char *str) -{ - return strcpy(wmalloc(strlen(str)+1), str); -} - - -/* Returns an array of pointers to the pixmap paths, doing ~ expansion */ -static char** -getPixmapPath(char *domain) -{ - char **ret; - char *path; - proplist_t prop, pixmap_path, key, value; - int count, i; - - path = defaultsPathForDomain(domain); - if (!path) - return NULL; - - prop = PLGetProplistWithPath(path); - if (!prop || !PLIsDictionary(prop)) - return NULL; - - key = PLMakeString("PixmapPath"); - pixmap_path = PLGetDictionaryEntry(prop, key); - PLRelease(key); - if (!pixmap_path || !PLIsArray(pixmap_path)) - return NULL; - - count = PLGetNumberOfElements(pixmap_path); - if (count < 1) - return NULL; - - ret = wmalloc(sizeof(char*)*(count+1)); - - for (i=0; i<count; i++) { - value = PLGetArrayElement(pixmap_path, i); - if (!value || !PLIsString(value)) - break; - ret[i] = wstrdup(PLGetString(value)); - if (ret[i][0]=='~' && ret[i][1]=='/') { - /* home is statically allocated. Don't free it */ - char *fullpath, *home=gethomedir(); - - fullpath = wmalloc(strlen(home)+strlen(ret[i])); - strcpy(fullpath, home); - strcat(fullpath, &ret[i][1]); - free(ret[i]); - ret[i] = fullpath; - } - } - ret[i] = NULL; - return ret; -} - - - - - - - -int -main(int argc, char **argv) -{ - Display *dpy; - Window root_win; - RContextAttributes rattr; - int screen_number, default_depth, i, style = WTP_SCALE; - int scr_width, scr_height; - RContext *rcontext; - RImage *image, *tmp; - Pixmap secretBuffer = None; - Pixmap pixmap; - XColor xcolor; - char *back_color = "black"; - char *image_name = NULL; - char *domain = "WindowMaker"; - char *program = "wdwrite"; - int update=0, cpc=4, render_mode=RM_MATCH, obey_user=0; -#ifdef DEBUG - double t1, t2, total, t; - struct timeval timev; -#endif - - - ProgName = strrchr(argv[0],'/'); - if (!ProgName) - ProgName = argv[0]; - else - ProgName++; - - if (argc>1) { - for (i=1; i<argc; i++) { - if (strcmp(argv[i], "-s")==0) { - style = WTP_SCALE; - } else if (strcmp(argv[i], "-t")==0) { - style = WTP_TILE; - } else if (strcmp(argv[i], "-e")==0) { - style = WTP_CENTER; - } else if (strcmp(argv[i], "-d")==0) { - render_mode = RM_DITHER; - obey_user++; - } else if (strcmp(argv[i], "-m")==0) { - render_mode = RM_MATCH; - obey_user++; - } else if (strcmp(argv[i], "-u")==0) { - update++; - } else if (strcmp(argv[i], "-D")==0) { - update++; - i++; - if (i>=argc) { - fprintf(stderr, "too few arguments for %s\n", argv[i-1]); - exit(0); - } - domain = wstrdup(argv[i]); - } else if (strcmp(argv[i], "-c")==0) { - i++; - if (i>=argc) { - fprintf(stderr, "too few arguments for %s\n", argv[i-1]); - exit(0); - } - if (sscanf(argv[i], "%i", &cpc)!=1) { - fprintf(stderr, "bad value for colors per channel: \"%s\"\n", argv[i]); - exit(0); - } - } else if (strcmp(argv[i], "-b")==0) { - i++; - if (i>=argc) { - fprintf(stderr, "too few arguments for %s\n", argv[i-1]); - exit(0); - } - back_color = argv[i]; - } else if (strcmp(argv[i], "-x")==0) { - /* secret option:renders the pixmap in the supplied drawable */ - i++; - if (i>=argc || - sscanf(argv[i], "%x", (unsigned*)&secretBuffer)!=1) { - print_help(); - exit(1); - } - } else if (argv[i][0] != '-') { - image_name = argv[i]; - } else { - print_help(); - exit(1); - } - } - } - - if (image_name == NULL) { - print_help(); - exit(1); - } - if (update) { - char *value = wmalloc(sizeof(image_name) + 30); - char *tmp=image_name, **paths; - int i; - - /* should we read PixmapPath from the same file as we write into ? */ - paths = getPixmapPath("WindowMaker"); - if (paths) { - for(i=0; paths[i]!=NULL; i++) { - if ((tmp = strstr(image_name, paths[i])) != NULL && - tmp == image_name) { - tmp += strlen(paths[i]); - while(*tmp=='/') tmp++; - break; - } - } - } - - if (!tmp) - tmp = image_name; - - if (style == WTP_TILE) - strcpy(value, "(tpixmap, \""); - else if (style == WTP_SCALE) - strcpy(value, "(spixmap, \""); - else - strcpy(value, "(cpixmap, \""); - strcat(value, tmp); - strcat(value, "\", \""); - strcat(value, back_color); - strcat(value, "\")"); - execlp(program, program, domain, "WorkspaceBack", value, NULL); - printf("%s: warning could not run \"%s\"\n", ProgName, program); - /* Do not exit. At least try to put the image in the background */ - /* Won't this waste CPU for nothing? We're going to be called again, - * anyways. -Alfredo */ - /* If it fails to update the WindowMaker domain with "wdwrite" we - * won't be called again, because Window Maker will not notice any - * change. If it reaches this point, this means it failed. - * On success it will never get here. -Dan */ - /*exit(0);*/ - } - - dpy = XOpenDisplay(""); - if (!dpy) { - puts("Could not open display!"); - exit(1); - } -#ifdef DEBUG - XSynchronize(dpy, True); -#endif - screen_number = DefaultScreen(dpy); - root_win = RootWindow(dpy, screen_number); - default_depth = DefaultDepth(dpy, screen_number); - scr_width = WidthOfScreen(ScreenOfDisplay(dpy, screen_number)); - scr_height = HeightOfScreen(ScreenOfDisplay(dpy, screen_number)); - - if (!XParseColor(dpy, DefaultColormap(dpy, screen_number), back_color, - &xcolor)) { - printf("invalid color %s\n", back_color); - exit(1); - } - - if (!obey_user && default_depth <= 8) - render_mode = RM_DITHER; - - rattr.flags = RC_RenderMode | RC_ColorsPerChannel | RC_DefaultVisual; - rattr.render_mode = render_mode; - rattr.colors_per_channel = cpc; - - rcontext = RCreateContext(dpy, screen_number, &rattr); - if (!rcontext) { - printf("could not initialize graphics library context: %s\n", - RMessageForError(RErrorCode)); - exit(1); - } - -#ifdef DEBUG - gettimeofday(&timev, NULL); - t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); - t = t1; -#endif - image = RLoadImage(rcontext, image_name, 0); -#ifdef DEBUG - gettimeofday(&timev, NULL); - t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); - total = t2 - t1; - printf("load image in %f sec\n", total); -#endif - - if (!image) { - printf("could not load image %s:%s\n", image_name, RMessageForError(RErrorCode)); - exit(1); - } - -#ifdef DEBUG - gettimeofday(&timev, NULL); - t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); -#endif - if (style == WTP_SCALE) { - tmp = RScaleImage(image, scr_width, scr_height); - if (!tmp) { - printf("could not scale image: %s\n", image_name); - exit(1); - } - RDestroyImage(image); - image = tmp; - } else if (style==WTP_CENTER && (image->width!=scr_width - || image->height!=scr_height)) { - RColor color; - - color.red = xcolor.red>>8; - color.green = xcolor.green>>8; - color.blue = xcolor.blue>>8; - color.alpha = 255; - tmp = RMakeCenteredImage(image, scr_width, scr_height, &color); - if (!tmp) { - printf("could not create centered image: %s\n", image_name); - exit(1); - } - RDestroyImage(image); - image = tmp; - } -#ifdef DEBUG - gettimeofday(&timev, NULL); - t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); - total = t2 - t1; - printf("scale image in %f sec\n", total); - - gettimeofday(&timev, NULL); - t1 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); -#endif - RConvertImage(rcontext, image, &pixmap); -#ifdef DEBUG - gettimeofday(&timev, NULL); - t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); - total = t2 - t1; - printf("convert image to pixmap in %f sec\n", total); - total = t2 - t; - printf("total image proccessing in %f sec\n", total); -#endif - RDestroyImage(image); - if (secretBuffer==None) { -#ifdef fuckin_crap - setPixmapProperty(pixmap, dpy, root_win); -#endif - XSetWindowBackgroundPixmap(dpy, root_win, pixmap); - XClearWindow(dpy, root_win); - } else { - XCopyArea(dpy, pixmap, secretBuffer, DefaultGC(dpy, screen_number), - 0, 0, scr_width, scr_height, 0, 0); - } - XSync(dpy, False); - XCloseDisplay(dpy); -#ifdef DEBUG - gettimeofday(&timev, NULL); - t2 = (double)timev.tv_sec + (((double)timev.tv_usec)/1000000); - total = t2 - t; - printf("total proccessing time: %f sec\n", total); -#endif - if (secretBuffer) - exit(123); - else - exit(0); -} +/* wmsetbg.c- sets root window background image and also works as + * workspace background setting helper for wmaker + * + * WindowMaker window manager + * + * Copyright (c) 1998, 1999 Alfredo K. Kojima + * Copyright (c) 1998 Dan Pascu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> +#include <string.h> +#include <wraster.h> +#include <pwd.h> +#include <signal.h> +#include <sys/types.h> + +#include "../src/wconfig.h" + +#include "WINGs.h" +#include "WUtil.h" +#include "wraster.h" + +#include <proplist.h> + + +#define WORKSPACE_COUNT (MAX_WORKSPACES+1) + + + +Display *dpy; +Window root; +int scr; +int scrWidth; +int scrHeight; + +Pixmap CurrentPixmap = None; +char *PixmapPath = NULL; + + + +typedef struct BackgroundTexture { + int refcount; + + int solid; + + char *spec; + + XColor color; + Pixmap pixmap; /* for all textures, including solid */ + int width; /* size of the pixmap */ + int height; +} BackgroundTexture; + + + + +RImage* +loadImage(RContext *rc, char *file) +{ + char *path; + RImage *image; + + path = wfindfile(PixmapPath, file); + if (!path) { + wwarning("%s:could not find image file used in texture", file); + return NULL; + } + + image = RLoadImage(rc, path, 0); + if (!image) { + wwarning("%s:could not load image file used in texture:%s", path, + RMessageForError(RErrorCode)); + } + free(path); + + return image; +} + + + +BackgroundTexture* +parseTexture(RContext *rc, char *text) +{ + BackgroundTexture *texture = NULL; + proplist_t texarray; + proplist_t val; + int count; + char *tmp; + char *type; + +#define GETSTR(val, str, i) \ + val = PLGetArrayElement(texarray, i);\ + if (!PLIsString(val)) {\ + wwarning("could not parse texture %s", text);\ + goto error;\ + }\ + str = PLGetString(val) + + + texarray = PLGetProplistWithDescription(text); + if (!texarray || !PLIsArray(texarray) + || (count = PLGetNumberOfElements(texarray)) < 2) { + + wwarning("could not parse texture %s", text); + if (texarray) + PLRelease(texarray); + return NULL; + } + + texture = wmalloc(sizeof(BackgroundTexture)); + memset(texture, 0, sizeof(BackgroundTexture)); + + GETSTR(val, type, 0); + + if (strcasecmp(type, "solid")==0) { + XColor color; + Pixmap pixmap; + + texture->solid = 1; + + GETSTR(val, tmp, 1); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", tmp, text); + goto error; + } + XAllocColor(dpy, DefaultColormap(dpy, scr), &color); + + pixmap = XCreatePixmap(dpy, root, 32, 32, DefaultDepth(dpy, scr)); + XSetForeground(dpy, DefaultGC(dpy, scr), color.pixel); + XFillRectangle(dpy, pixmap, DefaultGC(dpy, scr), 0, 0, 32, 32); + + texture->pixmap = pixmap; + texture->color = color; + texture->width = 32; + texture->height = 32; + } else if (strcasecmp(type, "vgradient")==0 + || strcasecmp(type, "dgradient")==0 + || strcasecmp(type, "hgradient")==0) { + XColor color; + RColor color1, color2; + RImage *image; + Pixmap pixmap; + int gtype; + + GETSTR(val, tmp, 1); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", tmp, text); + goto error; + } + + color1.red = color.red >> 8; + color1.green = color.green >> 8; + color1.blue = color.blue >> 8; + + GETSTR(val, tmp, 2); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", tmp, text); + goto error; + } + + color2.red = color.red >> 8; + color2.green = color.green >> 8; + color2.blue = color.blue >> 8; + + switch (type[0]) { + case 'h': + case 'H': + gtype = RHorizontalGradient; + break; + case 'V': + case 'v': + gtype = RVerticalGradient; + break; + default: + gtype = RDiagonalGradient; + break; + } + + image = RRenderGradient(scrWidth, scrHeight, &color1, &color2, gtype); + + if (!image) { + wwarning("could not render gradient texture:%s", + RMessageForError(RErrorCode)); + goto error; + } + + if (!RConvertImage(rc, image, &pixmap)) { + wwarning("could not convert texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + + texture->width = image->width; + texture->height = image->height; + RDestroyImage(image); + + texture->pixmap = pixmap; + } else if (strcasecmp(type, "mvgradient")==0 + || strcasecmp(type, "mdgradient")==0 + || strcasecmp(type, "mhgradient")==0) { + XColor color; + RColor **colors; + RImage *image; + Pixmap pixmap; + int i; + int j; + int gtype; + + colors = malloc(sizeof(RColor*)*(count-1)); + if (!colors) { + wwarning("out of memory while parsing texture"); + goto error; + } + memset(colors, 0, sizeof(RColor*)*(count-1)); + + for (i = 2; i < count; i++) { + val = PLGetArrayElement(texarray, i); + if (!PLIsString(val)) { + wwarning("could not parse texture %s", text); + + for (j = 0; colors[j]!=NULL; j++) + free(colors[j]); + free(colors); + goto error; + } + tmp = PLGetString(val); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", + tmp, text); + + for (j = 0; colors[j]!=NULL; j++) + free(colors[j]); + free(colors); + goto error; + } + if (!(colors[i-2] = malloc(sizeof(RColor)))) { + wwarning("out of memory while parsing texture"); + + for (j = 0; colors[j]!=NULL; j++) + free(colors[j]); + free(colors); + goto error; + } + + colors[i-2]->red = color.red >> 8; + colors[i-2]->green = color.green >> 8; + colors[i-2]->blue = color.blue >> 8; + } + + switch (type[1]) { + case 'h': + case 'H': + gtype = RHorizontalGradient; + break; + case 'V': + case 'v': + gtype = RVerticalGradient; + break; + default: + gtype = RDiagonalGradient; + break; + } + + image = RRenderMultiGradient(scrWidth, scrHeight, colors, gtype); + + for (j = 0; colors[j]!=NULL; j++) + free(colors[j]); + free(colors); + + if (!image) { + wwarning("could not render gradient texture:%s", + RMessageForError(RErrorCode)); + goto error; + } + + if (!RConvertImage(rc, image, &pixmap)) { + wwarning("could not convert texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + + texture->width = image->width; + texture->height = image->height; + RDestroyImage(image); + + texture->pixmap = pixmap; + } else if (strcasecmp(type, "cpixmap")==0 + || strcasecmp(type, "spixmap")==0 + || strcasecmp(type, "tpixmap")==0) { + XColor color; + Pixmap pixmap; + RImage *image; + + GETSTR(val, tmp, 1); + + image = loadImage(rc, tmp); + if (!image) { + goto error; + } + + GETSTR(val, tmp, 2); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s\n", tmp, text); + RDestroyImage(image); + goto error; + } + { + RColor rcolor; + + rcolor.red = color.red >> 8; + rcolor.green = color.green >> 8; + rcolor.blue = color.blue >> 8; + RGetClosestXColor(rc, &rcolor, &color); + } + switch (type[0]) { + case 't': + case 'T': + texture->width = image->width; + texture->height = image->height; + if (!RConvertImage(rc, image, &pixmap)) { + wwarning("could not convert texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + break; + case 's': + case 'S': + { + RImage *simage; + int w, h; + + if (image->width*scrHeight > image->height*scrWidth) { + w = scrWidth; + h = (scrWidth*image->height)/image->width; + } else { + h = scrHeight; + w = (scrHeight*image->width)/image->height; + } + + simage = RScaleImage(image, w, h); + if (!simage) { + wwarning("could not scale image:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + RDestroyImage(image); + image = simage; + } + /* fall through */ + case 'c': + case 'C': + { + Pixmap cpixmap; + + if (!RConvertImage(rc, image, &pixmap)) { + wwarning("could not convert texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + + if (image->width != scrWidth || image->height != scrHeight) { + int x, y, sx, sy, w, h; + + cpixmap = XCreatePixmap(dpy, root, scrWidth, scrHeight, + DefaultDepth(dpy, scr)); + + XSetForeground(dpy, DefaultGC(dpy, scr), color.pixel); + XFillRectangle(dpy, cpixmap, DefaultGC(dpy, scr), + 0, 0, scrWidth, scrHeight); + + if (image->height < scrHeight) { + h = image->height; + y = (scrHeight - h)/2; + sy = 0; + } else { + sy = (image->height - scrHeight)/2; + y = 0; + h = scrHeight; + } + if (image->width < scrWidth) { + w = image->width; + x = (scrWidth - w)/2; + sx = 0; + } else { + sx = (image->width - scrWidth)/2; + x = 0; + w = scrWidth; + } + + XCopyArea(dpy, pixmap, cpixmap, DefaultGC(dpy, scr), + sx, sy, w, h, x, y); + XFreePixmap(dpy, pixmap); + pixmap = cpixmap; + } + RDestroyImage(image); + + texture->width = scrWidth; + texture->height = scrHeight; + } + break; + } + + texture->pixmap = pixmap; + texture->color = color; + } else if (strcasecmp(type, "thgradient")==0 + || strcasecmp(type, "tvgradient")==0 + || strcasecmp(type, "tdgradient")==0) { + XColor color; + RColor color1, color2; + RImage *image; + RImage *gradient; + RImage *tiled; + Pixmap pixmap; + int opaq; + char *file; + int gtype; + int twidth, theight; + + GETSTR(val, file, 1); + + GETSTR(val, tmp, 2); + + opaq = atoi(tmp); + + GETSTR(val, tmp, 3); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", tmp, text); + goto error; + } + + color1.red = color.red >> 8; + color1.green = color.green >> 8; + color1.blue = color.blue >> 8; + + GETSTR(val, tmp, 4); + + if (!XParseColor(dpy, DefaultColormap(dpy, scr), tmp, &color)) { + wwarning("could not parse color %s in texture %s", tmp, text); + goto error; + } + + color2.red = color.red >> 8; + color2.green = color.green >> 8; + color2.blue = color.blue >> 8; + + image = loadImage(rc, file); + if (!image) { + RDestroyImage(gradient); + goto error; + } + + switch (type[1]) { + case 'h': + case 'H': + gtype = RHorizontalGradient; + twidth = scrWidth; + theight = image->height > scrHeight ? scrHeight : image->height; + break; + case 'V': + case 'v': + gtype = RVerticalGradient; + twidth = image->width > scrWidth ? scrWidth : image->width; + theight = scrHeight; + break; + default: + gtype = RDiagonalGradient; + twidth = scrWidth; + theight = scrHeight; + break; + } + gradient = RRenderGradient(twidth, theight, &color1, &color2, gtype); + + if (!gradient) { + wwarning("could not render texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(gradient); + goto error; + } + + tiled = RMakeTiledImage(image, twidth, theight); + if (!tiled) { + wwarning("could not render texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(gradient); + RDestroyImage(image); + goto error; + } + RDestroyImage(image); + + RCombineImagesWithOpaqueness(tiled, gradient, opaq); + RDestroyImage(gradient); + + if (!RConvertImage(rc, tiled, &pixmap)) { + wwarning("could not convert texture:%s", + RMessageForError(RErrorCode)); + RDestroyImage(image); + goto error; + } + texture->width = tiled->width; + texture->height = tiled->height; + + RDestroyImage(tiled); + + texture->pixmap = pixmap; + } else { + wwarning("invalid texture type %s", text); + goto error; + } + + texture->spec = wstrdup(text); + + return texture; + +error: + if (texture) + free(texture); + if (texarray) + PLRelease(texarray); + + return NULL; +} + + +void +freeTexture(BackgroundTexture *texture) +{ + if (texture->solid) { + long pixel[1]; + + pixel[0] = texture->color.pixel; + /* dont free black/white pixels */ + if (pixel[0]!=BlackPixelOfScreen(DefaultScreenOfDisplay(dpy)) + && pixel[0]!=WhitePixelOfScreen(DefaultScreenOfDisplay(dpy))) + XFreeColors(dpy, DefaultColormap(dpy, scr), pixel, 1, 0); + } + free(texture->spec); + free(texture); +} + + +void +setupTexture(RContext *rc, BackgroundTexture **textures, int *maxTextures, + int workspace, char *texture) +{ + BackgroundTexture *newTexture = NULL; + int i; + + /* unset the texture */ + if (!texture) { + if (textures[workspace]!=NULL) { + textures[workspace]->refcount--; + + if (textures[workspace]->refcount == 0) + freeTexture(textures[workspace]); + } + textures[workspace] = NULL; + return; + } + + if (textures[workspace] + && strcasecmp(textures[workspace]->spec, texture)==0) { + /* texture did not change */ + return; + } + + /* check if the same texture is already created */ + for (i = 0; i < *maxTextures; i++) { + if (textures[i] && strcasecmp(textures[i]->spec, texture)==0) { + newTexture = textures[i]; + break; + } + } + + if (!newTexture) { + /* create the texture */ + newTexture = parseTexture(rc, texture); + } + if (!newTexture) + return; + + if (textures[workspace]!=NULL) { + + textures[workspace]->refcount--; + + if (textures[workspace]->refcount == 0) + freeTexture(textures[workspace]); + } + + newTexture->refcount++; + textures[workspace] = newTexture; + + if (*maxTextures < workspace) + *maxTextures = workspace; +} + + + +Pixmap +duplicatePixmap(Pixmap pixmap, int width, int height) +{ + Display *tmpDpy; + Pixmap copyP; + + /* must open a new display or the RetainPermanent will + * leave stuff allocated in RContext unallocated after exit */ + tmpDpy = XOpenDisplay(""); + if (!tmpDpy) { + wwarning("could not open display to update background image information"); + + return None; + } else { + XSync(dpy, False); + + copyP = XCreatePixmap(tmpDpy, root, width, height, + DefaultDepth(tmpDpy, scr)); + XCopyArea(tmpDpy, pixmap, copyP, DefaultGC(tmpDpy, scr), + 0, 0, width, height, 0, 0); + XSync(tmpDpy, False); + + XSetCloseDownMode(tmpDpy, RetainPermanent); + XCloseDisplay(tmpDpy); + } + + return copyP; +} + + +void +setPixmapProperty(Pixmap pixmap) +{ + static Atom prop = 0; + Atom type; + int format; + unsigned long length, after; + unsigned char *data; + int mode; + + if (!prop) { + prop = XInternAtom(dpy, "_XROOTPMAP_ID", False); + } + + XGrabServer(dpy); + + /* Clear out the old pixmap */ + XGetWindowProperty(dpy, root, prop, 0L, 1L, False, AnyPropertyType, + &type, &format, &length, &after, &data); + + if ((type == XA_PIXMAP) && (format == 32) && (length == 1)) { + XKillClient(dpy, *((Pixmap *)data)); + mode = PropModeReplace; + } else { + mode = PropModeAppend; + } + if (pixmap) + XChangeProperty(dpy, root, prop, XA_PIXMAP, 32, mode, + (unsigned char *) &pixmap, 1); + else + XDeleteProperty(dpy, root, prop); + + + XUngrabServer(dpy); + XFlush(dpy); +} + + + +void +changeTexture(BackgroundTexture *texture) +{ + if (!texture) + return; + + if (texture->solid) { + XSetWindowBackground(dpy, root, texture->color.pixel); + } else { + XSetWindowBackgroundPixmap(dpy, root, texture->pixmap); + } + XClearWindow(dpy, root); + + XSync(dpy, False); + + { + Pixmap pixmap; + + pixmap = duplicatePixmap(texture->pixmap, texture->width, + texture->height); + + setPixmapProperty(pixmap); + } +} + + +int +readmsg(int fd, unsigned char *buffer, int size) +{ + int count; + + count = 0; + while (size>0) { + count = read(fd, buffer, size); + if (count < 0) + return -1; + size -= count; + buffer += count; + *buffer = 0; + } + + return size; +} + + +/* + * Message Format: + * sizeSntexture_spec - sets the texture for workspace n + * sizeCn - change background texture to the one for workspace n + * sizePpath - set the pixmap search path + * + * n is 4 bytes + * size = 4 bytes for length of the message data + */ +void +helperLoop(RContext *rc) +{ + BackgroundTexture *textures[WORKSPACE_COUNT]; + int maxTextures = 0; + unsigned char buffer[2048], buf[8]; + int size; + int errcount = 4; + + memset(textures, 0, WORKSPACE_COUNT*sizeof(BackgroundTexture*)); + + + while (1) { + int workspace; + + /* get length of message */ + if (readmsg(0, buffer, 4) < 0) { + wsyserror("error reading message from Window Maker"); + errcount--; + if (errcount == 0) { + wfatal("quitting"); + exit(1); + } + continue; + } + memcpy(buf, buffer, 4); + buf[4] = 0; + size = atoi(buf); + + /* get message */ + if (readmsg(0, buffer, size) < 0) { + wsyserror("error reading message from Window Maker"); + errcount--; + if (errcount == 0) { + wfatal("quitting"); + exit(1); + } + continue; + } +#ifdef DEBUG + printf("RECEIVED %s\n",buffer); +#endif + if (buffer[0]!='P') { + memcpy(buf, &buffer[1], 4); + buf[4] = 0; + workspace = atoi(buf); + if (workspace < 0 || workspace >= WORKSPACE_COUNT) { + wwarning("received message with invalid workspace number %i\n", + workspace); + continue; + } + } + + switch (buffer[0]) { + case 'S': +#ifdef DEBUG + printf("set texture %s\n", &buffer[5]); +#endif + setupTexture(rc, textures, &maxTextures, workspace, &buffer[5]); + break; + + case 'C': +#ifdef DEBUG + printf("change texture %i\n", workspace); +#endif + if (!textures[workspace]) + changeTexture(textures[0]); + else + changeTexture(textures[workspace]); + break; + + case 'P': +#ifdef DEBUG + printf("change pixmappath %s\n", &buffer[1]); +#endif + if (PixmapPath) + free(PixmapPath); + PixmapPath = wstrdup(&buffer[1]); + break; + + case 'U': +#ifdef DEBUG + printf("unset workspace %i\n", workspace); +#endif + setupTexture(rc, textures, &maxTextures, workspace, NULL); + break; + + default: + wwarning("unknown message received"); + break; + } + } +} + + +void +updateDomain(char *domain, int workspace, char *texture) +{ + char *program = "wdwrite"; + + execlp(program, program, domain, "WorkspaceBack", texture, NULL); + wwarning("warning could not run \"%s\"", program); +} + + + +proplist_t +getDomain(char *domain) +{ + char *path; + proplist_t prop; + + + path = wdefaultspathfordomain(domain); + if (!path) { + wwarning("could not locate file for domain %s", domain); + return NULL; + } + + prop = PLGetProplistWithPath(path); + + if (!prop || !PLIsDictionary(prop)) { + wwarning("invalid domain file %s", path); + free(path); + if (prop) + PLRelease(prop); + return NULL; + } + free(path); + + return prop; +} + + +char* +getPixmapPath(proplist_t prop) +{ + proplist_t key, val; + proplist_t d; + char *ptr, *data; + int len, i, count; + + key = PLMakeString("PixmapPath"); + val = PLGetDictionaryEntry(prop, key); + PLRelease(key); + if (!val || !PLIsArray(val)) { + PLRelease(prop); + return wstrdup(""); + } + + count = PLGetNumberOfElements(val); + len = 0; + for (i=0; i<count; i++) { + d = PLGetArrayElement(val, i); + if (!d || !PLIsString(d)) { + continue; + } + len += strlen(PLGetString(d))+1; + } + + ptr = data = wmalloc(len+1); + *ptr = 0; + + for (i=0; i<count; i++) { + d = PLGetArrayElement(val, i); + if (!d || !PLIsString(d)) { + continue; + } + strcpy(ptr, PLGetString(d)); + + ptr += strlen(PLGetString(d)); + *ptr = ':'; + ptr++; + } + if (i>0) + ptr--; *(ptr--) = 0; + + return data; +} + + +void +wAbort() +{ + wfatal("aborting"); + exit(1); +} + + + +void +print_help(char *ProgName) +{ + printf("usage: %s [-options] image\n", ProgName); + puts("options:"); + puts(" -d dither image"); + puts(" -m match colors"); + puts(" -b <color> background color"); + puts(" -t tile image"); + puts(" -e center image"); + puts(" -s scale image (default)"); + puts(" -u update WindowMaker domain database"); + puts(" -D <domain> update <domain> database"); + puts(" -c <cpc> colors per channel to use"); + puts(" -p <texture> proplist style texture specification"); +/* puts(" -w <workspace> update the background for the specified workspace"); + */ +} + + + +void +changeTextureForWorkspace(proplist_t dict, char *texture, int workspace) +{ + proplist_t key; + proplist_t array; + proplist_t val; + int j; + + workspace++; + + val = PLGetProplistWithDescription(texture); + if (!val) { + wwarning("could not parse texture %s", texture); + return; + } + + key = PLMakeString("WorkspaceSpecificBack"); + array = PLGetDictionaryEntry(dict, key); + if (!array) { + array = PLMakeArrayFromElements(NULL, NULL); + PLInsertDictionaryEntry(dict, key, array); + } + + j = PLGetNumberOfElements(array); + if (workspace >= j) { + proplist_t empty; + + empty = PLMakeArrayFromElements(NULL, NULL); + + while (j++ < workspace) { + PLAppendArrayElement(array, empty); + } + PLAppendArrayElement(array, val); + } else { + PLRemoveArrayElement(array, workspace); + PLInsertArrayElement(array, val, workspace); + } + + PLSave(dict, YES); +} + + +int +main(int argc, char **argv) +{ + int i; + int helperMode = 0; + RContext *rc; + RContextAttributes rattr; + char *style = "spixmap"; + char *back_color = "gray20"; + char *image_name = NULL; + char *domain = "WindowMaker"; + int update=0, cpc=4, render_mode=RM_DITHER, obey_user=0; + char *texture = NULL; + int workspace = -1; + proplist_t domain_prop; + + + + signal(SIGINT, SIG_DFL); + signal(SIGTERM, SIG_DFL); + signal(SIGQUIT, SIG_DFL); + signal(SIGSEGV, SIG_DFL); + signal(SIGBUS, SIG_DFL); + signal(SIGFPE, SIG_DFL); + signal(SIGABRT, SIG_DFL); + signal(SIGHUP, SIG_DFL); + signal(SIGPIPE, SIG_DFL); + signal(SIGCHLD, SIG_DFL); + + WMInitializeApplication("wmsetbg", &argc, argv); + + for (i=0; i<argc; i++) { + if (strcmp(argv[i], "-helper")==0) { + helperMode = 1; + } else if (strcmp(argv[i], "-s")==0) { + style = "spixmap"; + } else if (strcmp(argv[i], "-t")==0) { + style = "tpixmap"; + } else if (strcmp(argv[i], "-e")==0) { + style = "cpixmap"; + } else if (strcmp(argv[i], "-d")==0) { + render_mode = RM_DITHER; + obey_user++; + } else if (strcmp(argv[i], "-m")==0) { + render_mode = RM_MATCH; + obey_user++; + } else if (strcmp(argv[i], "-u")==0) { + update++; + } else if (strcmp(argv[i], "-D")==0) { + update++; + i++; + if (i>=argc) { + wfatal("too few arguments for %s\n", argv[i-1]); + exit(1); + } + domain = wstrdup(argv[i]); + } else if (strcmp(argv[i], "-c")==0) { + i++; + if (i>=argc) { + wfatal("too few arguments for %s\n", argv[i-1]); + exit(1); + } + if (sscanf(argv[i], "%i", &cpc)!=1) { + wfatal("bad value for colors per channel: \"%s\"\n", argv[i]); + exit(1); + } + } else if (strcmp(argv[i], "-b")==0) { + i++; + if (i>=argc) { + wfatal("too few arguments for %s\n", argv[i-1]); + exit(1); + } + back_color = argv[i]; + } else if (strcmp(argv[i], "-p")==0) { + i++; + if (i>=argc) { + wfatal("too few arguments for %s\n", argv[i-1]); + exit(1); + } + texture = argv[i]; + } else if (strcmp(argv[i], "-w")==0) { + i++; + if (i>=argc) { + wfatal("too few arguments for %s\n", argv[i-1]); + exit(1); + } + if (sscanf(argv[i], "%i", &workspace)!=1) { + wfatal("bad value for workspace number: \"%s\"", + argv[i]); + exit(1); + } + } else if (argv[i][0] != '-') { + image_name = argv[i]; + } else { + print_help(argv[0]); + exit(1); + } + } + + domain_prop = getDomain(domain); + + PixmapPath = getPixmapPath(domain_prop); + + dpy = XOpenDisplay(""); + if (!dpy) { + wfatal("could not open display"); + exit(1); + } + XSynchronize(dpy, 1); + + root = DefaultRootWindow(dpy); + + scr = DefaultScreen(dpy); + + scrWidth = WidthOfScreen(DefaultScreenOfDisplay(dpy)); + scrHeight = HeightOfScreen(DefaultScreenOfDisplay(dpy)); + + if (!obey_user && DefaultDepth(dpy, scr) <= 8) + render_mode = RM_DITHER; + + rattr.flags = RC_RenderMode | RC_ColorsPerChannel | RC_DefaultVisual; + rattr.render_mode = render_mode; + rattr.colors_per_channel = cpc; + + rc = RCreateContext(dpy, scr, &rattr); + + if (helperMode) { + /* lower priority, so that it wont use all the CPU */ + nice(1000); + + PLRelease(domain_prop); + + helperLoop(rc); + } else { + BackgroundTexture *tex; + char buffer[4098]; + + if (!texture) { + sprintf(buffer, "(%s, %s, %s)", style, image_name, back_color); + texture = (char*)buffer; + } + + if (update && workspace < 0) { + updateDomain(domain, workspace, texture); + } + + tex = parseTexture(rc, texture); + if (!tex) + exit(1); + + if (workspace<0) + changeTexture(tex); + else + changeTextureForWorkspace(domain_prop, texture, workspace); + } + + return -1; +} + diff --git a/util/wsetfont b/util/wsetfont index c089b4bb..9095776c 100755 --- a/util/wsetfont +++ b/util/wsetfont @@ -15,18 +15,20 @@ # Nikolaos Papagrigoriou <papanikos@usa.net> # Quote bug fix info from: # Luke Kendall <luke@research.canon.com.au> +# Bug fix info for Korean font section from: +# CHOI Junho <junker@jazz.snu.ac.kr> -VERSION="Version 0.4 1998/11/10" +VERSION="Version 0.5 1998/12/07" WDWRITE="wdwrite" - +PROGRAM=`basename $0` if test $# != 1; then echo - echo "$0 - font/language setting utility for Window Maker" + echo "$PROGRAM - font/language setting utility for Window Maker" echo echo "Usage: $VERSION" - echo " $0 <option> " + echo " $PROGRAM <option> " cat <<EOF ----------------------------------------------------------------------- [Option] [Fontset] [Font Information] @@ -34,11 +36,11 @@ if test $# != 1; then latin1 helvetica(iso8859-1) latin2 helvetica(iso8859-2) See *Note1. greek helvetica(iso8859-7) See *Note1. - japanese helvetica/-*-fixed(jisx02XX) Included in X11R6/XFree("fnon" pkg) + japanese helvetica/-*-fixed(jisx02XX) Included in X11R6/XFree86("fnon" pkg) korean helvetica/-*-kodig(ksc5601) See *Note1. - korean2 helvetica/daewoo(ksc5601) Included in X11R6/XFree("fnon" pkg) - russian helvetica(koi8-r) Included in X11R6/XFree("fcyr" pkg) - turkish unknown See *Note2 + korean2 helvetica/daewoo(ksc5601) Included in X11R6/XFree86("fnon" pkg) + russian helvetica(koi8-r) Included in X11R6/XFree86("fcyr" pkg) + turkish unknown See *Note2. ----------------------------------------------------------------------- Latin1 Languages: Danish/Dutch/English/Finnish/French/Galician/German/ Italian/Norwegian/Portuguese/Spanish/Swedish/... @@ -118,14 +120,14 @@ case $1 in DisplayFont=\"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*,-*-*-medium-r-normal-*-14-*,-*-*-medium-r-normal-*-*-*\" ;; korean) - SystemFont=\"-*-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,*-kodig-medium-r-normal--*-%d-*-*-*-*-*-*,*-*-medium-r-normal--*-%d-*-*-*-*-*-*,*-*-*-*-*--%d-*-*-*-*-*-*-*,*\" - BoldSystemFont=\"-*-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-kodig-bold-r-normal--*-%d-*-*-*-*-*-*,*-*-bold-r-normal--*-%d-*-*-*-*-*-*,*-*-*-*-*--%d-*-*-*-*-*-*-*,*\" - WindowTitleFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,-*-*-medium-r-normal--14-*-*-*-*-*-*-*,-*-*-medium-r-normal--*-*-*-*-*-*-*-*,-*-*-*-r-normal--*-*-*-*-*-*-*-*,-*-*-*-*-*--*-*-*-*-*-*-*-*,*\" - MenuTitleFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,-*-*-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" - MenuTextFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" - IconTitleFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" - ClipTitleFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" - DisplayFont=\"7x14,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" + SystemFont=\"-*-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--%d-*-*-*-*-*-*-*,*-*-medium-r-normal-*-%d-*-*-*-*-*-*-*,*-*-*-*-*--%d-*-*-*-*-*-*-*,*\" + BoldSystemFont=\"-*-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-kodig-bold-r-normal--%d-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--%d-*-*-*-*-*-*-*,*-*-bold-r-normal-*-%d-*-*-*-*-*-*-*,*-*-*-*-*--%d-*-*-*-*-*-*-*,*\" + WindowTitleFont=\"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-normal--*-*-*-*-*-*-*-*,-*-*-*-r-normal--*-*-*-*-*-*-*-*,-*-*-*-*-*--*-*-*-*-*-*-*-*,*\" + MenuTitleFont=\"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,-*-*-medium-r-normal--12-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" + MenuTextFont=\"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--14-*-*-*-*-*-*-*,*-*-medium-r-normal--12-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" + IconTitleFont=\"-*-helvetica-medium-r-normal-*-8-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--10-*-*-*-*-*-*-*,*-*-medium-r-normal--10-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" + ClipTitleFont=\"-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--10-*-*-*-*-*-*-*,*-*-medium-r-normal--10-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" + DisplayFont=\"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*,-*-kodig-medium-r-normal--12-*-*-*-*-*-*-*,*-*-medium-r-normal--12-*-*-*-*-*-*-*,*-*-medium-r-normal--*-*-*-*-*-*-*-*,*-*-*-r-normal--*-*-*-*-*-*-*-*,*\" ;; korean2) SystemFont=\"-*-helvetica-medium-r-normal-*-%d-*-*-*-*-*-*-*,-*-medium-r-normal-*-%d-*,-*-medium-r-normal-*\" diff --git a/wmlib/Makefile.in b/wmlib/Makefile.in index a4ef16ae..67d03234 100644 --- a/wmlib/Makefile.in +++ b/wmlib/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -123,7 +126,8 @@ libWMaker_a_OBJECTS = menu.o app.o event.o command.o AR = ar CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(include_HEADERS) DIST_COMMON = COPYING.LIB Makefile.am Makefile.in @@ -139,7 +143,7 @@ OBJECTS = $(libWMaker_a_OBJECTS) all: Makefile $(LIBRARIES) $(HEADERS) .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu wmlib/Makefile @@ -199,6 +203,25 @@ distclean-compile: maintainer-clean-compile: +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + libWMaker.a: $(libWMaker_a_OBJECTS) $(libWMaker_a_DEPENDENCIES) -rm -f libWMaker.a $(AR) cru libWMaker.a $(libWMaker_a_OBJECTS) $(libWMaker_a_LIBADD) @@ -292,30 +315,34 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) mostlyclean: mostlyclean-libLIBRARIES mostlyclean-compile \ - mostlyclean-tags mostlyclean-generic + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic -clean: clean-libLIBRARIES clean-compile clean-tags clean-generic \ - mostlyclean +clean: clean-libLIBRARIES clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean -distclean: distclean-libLIBRARIES distclean-compile distclean-tags \ - distclean-generic clean +distclean: distclean-libLIBRARIES distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean -rm -f config.status + -rm -f libtool maintainer-clean: maintainer-clean-libLIBRARIES \ - maintainer-clean-compile maintainer-clean-tags \ - maintainer-clean-generic distclean + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." .PHONY: mostlyclean-libLIBRARIES distclean-libLIBRARIES \ clean-libLIBRARIES maintainer-clean-libLIBRARIES uninstall-libLIBRARIES \ install-libLIBRARIES mostlyclean-compile distclean-compile \ -clean-compile maintainer-clean-compile uninstall-includeHEADERS \ -install-includeHEADERS tags mostlyclean-tags distclean-tags clean-tags \ -maintainer-clean-tags distdir info dvi installcheck install-exec \ -install-data install uninstall all installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool \ +uninstall-includeHEADERS install-includeHEADERS tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/wrlib/Makefile.am b/wrlib/Makefile.am index 1c57cbc5..926a328c 100644 --- a/wrlib/Makefile.am +++ b/wrlib/Makefile.am @@ -2,7 +2,9 @@ AUTOMAKE_OPTIONS = no-dependencies -lib_LIBRARIES = libwraster.a +lib_LTLIBRARIES = libwraster.la + +libwraster_la_LDFLAGS = -version-info 1:1:0 noinst_PROGRAMS = test testgrad testdraw view @@ -10,7 +12,7 @@ EXTRA_DIST = test.png tile.xpm ballot_box.xpm ballot_box.tiff include_HEADERS = wraster.h -libwraster_a_SOURCES = \ +libwraster_la_SOURCES = \ raster.c \ draw.c \ color.c \ @@ -35,7 +37,7 @@ libwraster_a_SOURCES = \ INCLUDES = @DFLAGS@ @XCFLAGS@ @GFXFLAGS@ @XSHM@ -LIBLIST = -L. -lwraster @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm +LIBLIST = libwraster.la @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm view_SOURCES= view.c @@ -54,6 +56,6 @@ testdraw_SOURCES = testdraw.c testdraw_LDADD = $(LIBLIST) -libwraster_a_LIBADD = @ALLOCA@ +libwraster_la_LIBADD = @ALLOCA@ diff --git a/wrlib/Makefile.in b/wrlib/Makefile.in index 62789c23..3f4db89c 100644 --- a/wrlib/Makefile.in +++ b/wrlib/Makefile.in @@ -69,6 +69,9 @@ I18N = @I18N@ I18N_MB = @I18N_MB@ ICONEXT = @ICONEXT@ INTLIBS = @INTLIBS@ +LD = @LD@ +LIBTOOL = @LIBTOOL@ +LITE = @LITE@ LN_S = @LN_S@ MAKEINFO = @MAKEINFO@ MOFILES = @MOFILES@ @@ -92,7 +95,9 @@ wprefsdir = @wprefsdir@ AUTOMAKE_OPTIONS = no-dependencies -lib_LIBRARIES = libwraster.a +lib_LTLIBRARIES = libwraster.la + +libwraster_la_LDFLAGS = -version-info 1:1:0 noinst_PROGRAMS = test testgrad testdraw view @@ -100,7 +105,7 @@ EXTRA_DIST = test.png tile.xpm ballot_box.xpm ballot_box.tiff include_HEADERS = wraster.h -libwraster_a_SOURCES = \ +libwraster_la_SOURCES = \ raster.c \ draw.c \ color.c \ @@ -124,7 +129,7 @@ libwraster_a_SOURCES = \ INCLUDES = @DFLAGS@ @XCFLAGS@ @GFXFLAGS@ @XSHM@ -LIBLIST = -L. -lwraster @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm +LIBLIST = libwraster.la @GFXLFLAGS@ @XLFLAGS@ @GFXLIBS@ @XLIBS@ -lm view_SOURCES= view.c @@ -142,11 +147,11 @@ testdraw_SOURCES = testdraw.c testdraw_LDADD = $(LIBLIST) -libwraster_a_LIBADD = @ALLOCA@ +libwraster_la_LIBADD = @ALLOCA@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../src/config.h CONFIG_CLEAN_FILES = -LIBRARIES = $(lib_LIBRARIES) +LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../src @@ -156,28 +161,29 @@ LIBS = @LIBS@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ -libwraster_a_DEPENDENCIES = @ALLOCA@ -libwraster_a_OBJECTS = raster.o draw.o color.o load.o save.o gradient.o \ -xpixmap.o convert.o context.o misc.o scale.o convolve.o nxpm.o xpm.o \ -xutil.o ppm.o png.o jpeg.o tiff.o gif.o -AR = ar +libwraster_la_DEPENDENCIES = @ALLOCA@ +libwraster_la_OBJECTS = raster.lo draw.lo color.lo load.lo save.lo \ +gradient.lo xpixmap.lo convert.lo context.lo misc.lo scale.lo \ +convolve.lo nxpm.lo xpm.lo xutil.lo ppm.lo png.lo jpeg.lo tiff.lo \ +gif.lo PROGRAMS = $(noinst_PROGRAMS) test_OBJECTS = test.o -test_DEPENDENCIES = +test_DEPENDENCIES = libwraster.la test_LDFLAGS = testgrad_OBJECTS = testgrad.o -testgrad_DEPENDENCIES = +testgrad_DEPENDENCIES = libwraster.la testgrad_LDFLAGS = testdraw_OBJECTS = testdraw.o -testdraw_DEPENDENCIES = +testdraw_DEPENDENCIES = libwraster.la testdraw_LDFLAGS = view_OBJECTS = view.o -view_DEPENDENCIES = +view_DEPENDENCIES = libwraster.la view_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(include_HEADERS) DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ @@ -188,13 +194,13 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP = --best -SOURCES = $(libwraster_a_SOURCES) $(test_SOURCES) $(testgrad_SOURCES) $(testdraw_SOURCES) $(view_SOURCES) -OBJECTS = $(libwraster_a_OBJECTS) $(test_OBJECTS) $(testgrad_OBJECTS) $(testdraw_OBJECTS) $(view_OBJECTS) +SOURCES = $(libwraster_la_SOURCES) $(test_SOURCES) $(testgrad_SOURCES) $(testdraw_SOURCES) $(view_SOURCES) +OBJECTS = $(libwraster_la_OBJECTS) $(test_OBJECTS) $(testgrad_OBJECTS) $(testdraw_OBJECTS) $(view_OBJECTS) -all: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) +all: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) .SUFFIXES: -.SUFFIXES: .S .c .o .s +.SUFFIXES: .S .c .lo .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu wrlib/Makefile @@ -203,36 +209,29 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -mostlyclean-libLIBRARIES: +mostlyclean-libLTLIBRARIES: -clean-libLIBRARIES: - -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) -distclean-libLIBRARIES: +distclean-libLTLIBRARIES: -maintainer-clean-libLIBRARIES: +maintainer-clean-libLTLIBRARIES: -install-libLIBRARIES: $(lib_LIBRARIES) +install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) - list='$(lib_LIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - echo " $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p"; \ - $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p; \ - else :; fi; \ - done - @$(POST_INSTALL) - @list='$(lib_LIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ - echo " $(RANLIB) $(DESTDIR)$(libdir)/$$p"; \ - $(RANLIB) $(DESTDIR)$(libdir)/$$p; \ + echo "$(LIBTOOL) --mode=install $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=install $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done -uninstall-libLIBRARIES: +uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - list='$(lib_LIBRARIES)'; for p in $$list; do \ - rm -f $(DESTDIR)$(libdir)/$$p; \ + list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done .c.o: @@ -254,10 +253,27 @@ distclean-compile: maintainer-clean-compile: -libwraster.a: $(libwraster_a_OBJECTS) $(libwraster_a_DEPENDENCIES) - -rm -f libwraster.a - $(AR) cru libwraster.a $(libwraster_a_OBJECTS) $(libwraster_a_LIBADD) - $(RANLIB) libwraster.a +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libwraster.la: $(libwraster_la_OBJECTS) $(libwraster_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libwraster_la_LDFLAGS) $(libwraster_la_OBJECTS) $(libwraster_la_LIBADD) $(LIBS) mostlyclean-noinstPROGRAMS: @@ -340,7 +356,7 @@ dvi: check: all $(MAKE) installcheck: -install-exec: install-libLIBRARIES +install-exec: install-libLTLIBRARIES @$(NORMAL_INSTALL) install-data: install-includeHEADERS @@ -349,7 +365,7 @@ install-data: install-includeHEADERS install: install-exec install-data all @: -uninstall: uninstall-libLIBRARIES uninstall-includeHEADERS +uninstall: uninstall-libLTLIBRARIES uninstall-includeHEADERS install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install @@ -371,29 +387,33 @@ distclean-generic: maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -mostlyclean: mostlyclean-libLIBRARIES mostlyclean-compile \ - mostlyclean-noinstPROGRAMS mostlyclean-tags \ - mostlyclean-generic +mostlyclean: mostlyclean-libLTLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-noinstPROGRAMS \ + mostlyclean-tags mostlyclean-generic -clean: clean-libLIBRARIES clean-compile clean-noinstPROGRAMS clean-tags \ - clean-generic mostlyclean +clean: clean-libLTLIBRARIES clean-compile clean-libtool \ + clean-noinstPROGRAMS clean-tags clean-generic \ + mostlyclean -distclean: distclean-libLIBRARIES distclean-compile \ +distclean: distclean-libLTLIBRARIES distclean-compile distclean-libtool \ distclean-noinstPROGRAMS distclean-tags \ distclean-generic clean -rm -f config.status + -rm -f libtool -maintainer-clean: maintainer-clean-libLIBRARIES \ - maintainer-clean-compile \ +maintainer-clean: maintainer-clean-libLTLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-noinstPROGRAMS maintainer-clean-tags \ maintainer-clean-generic distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -.PHONY: mostlyclean-libLIBRARIES distclean-libLIBRARIES \ -clean-libLIBRARIES maintainer-clean-libLIBRARIES uninstall-libLIBRARIES \ -install-libLIBRARIES mostlyclean-compile distclean-compile \ -clean-compile maintainer-clean-compile mostlyclean-noinstPROGRAMS \ +.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ +clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ +uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ +distclean-compile clean-compile maintainer-clean-compile \ +mostlyclean-libtool distclean-libtool clean-libtool \ +maintainer-clean-libtool mostlyclean-noinstPROGRAMS \ distclean-noinstPROGRAMS clean-noinstPROGRAMS \ maintainer-clean-noinstPROGRAMS uninstall-includeHEADERS \ install-includeHEADERS tags mostlyclean-tags distclean-tags clean-tags \ diff --git a/wrlib/context.c b/wrlib/context.c index a0fa3bb8..05d7770f 100644 --- a/wrlib/context.c +++ b/wrlib/context.c @@ -57,7 +57,7 @@ allocatePseudoColor(RContext *ctx) int i, ncolors, r, g, b; int retries; int cpc = ctx->attribs->colors_per_channel; - + ncolors = cpc * cpc * cpc; if ( ncolors > (1<<ctx->depth) ) { @@ -337,6 +337,7 @@ getColormap(RContext *context, int screen_number) &cmaps, &ncmaps, XA_RGB_DEFAULT_MAP)) { for (i=0; i<ncmaps; ++i) { if (cmaps[i].visualid == context->visual->visualid) { + puts("ACHOU"); cmap = cmaps[i].colormap; break; } @@ -531,7 +532,8 @@ bestContext(Display *dpy, int screen_number, RContext *context) else if (vinfo[i].depth>24 && best<0) best = i; } } - + +#if 0 if (best == -1) { /* look for a DirectColor, 24-bit or more (pref 24) */ rvinfo.class = DirectColor; if (vinfo) XFree((char *) vinfo); @@ -543,6 +545,7 @@ bestContext(Display *dpy, int screen_number, RContext *context) } } } +#endif if (best > -1) { context->visual = vinfo[best].visual; context->depth = vinfo[best].depth; diff --git a/wrlib/convolve.c b/wrlib/convolve.c index 901a9aee..fb2b45d6 100644 --- a/wrlib/convolve.c +++ b/wrlib/convolve.c @@ -49,8 +49,8 @@ char *alloca (); *---------------------------------------------------------------------- * RBlurImage-- * Apply 3x3 1 1 1 low pass, convolution mask to image. - * 1 1 1 - * 1 1 1 /9 + * 1 2 1 + * 1 1 1 /10 *---------------------------------------------------------------------- */ int @@ -61,8 +61,8 @@ RBlurImage(RImage *image) unsigned char *r, *g, *b, *a; unsigned char *pr=NULL, *pg=NULL, *pb=NULL, *pa=NULL; -#define MASK(c,pc,p) ((*c + *(c-1) + *(c+1) + pc[p] + pc[p-1] + pc[p+1] \ - + *(c+w) + *(c+w-1) + *(c+w+1))/9) +#define MASK(c,pc,p) ((*c+ *c + *(c-1) + *(c+1) + pc[p] + pc[p-1] + pc[p+1] \ + + *(c+w) + *(c+w-1) + *(c+w+1))/10) pr = (unsigned char*)alloca(image->width*sizeof(char)); if (!pr) @@ -138,10 +138,6 @@ RBlurImage(RImage *image) } - - - - #if 0 int REdgeDetectImage(RImage *image) diff --git a/wrlib/jpeg.c b/wrlib/jpeg.c index 77119340..fd19f4f6 100644 --- a/wrlib/jpeg.c +++ b/wrlib/jpeg.c @@ -137,13 +137,6 @@ RLoadJPEG(RContext *context, char *file_name, int index) goto bye; } - image = RCreateImage(cinfo.image_width, cinfo.image_height, False); - if (!image) { - RErrorCode = RERR_NOMEMORY; - goto bye; - } - - if(cinfo.jpeg_color_space==JCS_GRAYSCALE) { cinfo.out_color_space=JCS_GRAYSCALE; } else @@ -175,9 +168,9 @@ RLoadJPEG(RContext *context, char *file_name, int index) } } } - /* + jpeg_finish_decompress(&cinfo); -*/ + bye: jpeg_destroy_decompress(&cinfo); diff --git a/wrlib/nxpm.c b/wrlib/nxpm.c index 33796456..b2f6ed67 100644 --- a/wrlib/nxpm.c +++ b/wrlib/nxpm.c @@ -415,7 +415,7 @@ typedef struct XPMColor { unsigned char red; unsigned char green; unsigned char blue; - char text[12]; + int index; struct XPMColor *next; } XPMColor; @@ -482,23 +482,35 @@ addcolor(XPMColor **list, unsigned r, unsigned g, unsigned b, int *colors) } +static char* +index2str(char *buffer, int index, int colorCount) +{ + int i; + + for (i=0; i<colorCount/64+1; i++) { + buffer[i] = I2CHAR(index&63); + index >>= 5; + } + buffer[i] = 0; + + return buffer; +} + + static void outputcolormap(FILE *file, XPMColor *colormap, int colorCount) { int j; int i,index; + char buf[128]; if (!colormap) return; for (index=0; colormap!=NULL; colormap=colormap->next,index++) { - j = index; - for (i=0; i<colorCount/64+1; i++) { - colormap->text[i] = I2CHAR(j&63); - j >>= 5; - } - colormap->text[i] = 0; - fprintf(file, "\"%s c #%02x%02x%02x\",\n", colormap->text, colormap->red, + colormap->index = index; + fprintf(file, "\"%s c #%02x%02x%02x\",\n", + index2str(buf, index, colorCount), colormap->red, colormap->green, colormap->blue); } } @@ -531,6 +543,7 @@ RSaveXPM(RImage *image, char *filename) int ok = 0; unsigned char *r, *g, *b, *a; char transp[16]; + char buf[128]; file = fopen(filename, "w+"); if (!file) { @@ -564,7 +577,6 @@ RSaveXPM(RImage *image, char *filename) fprintf(file, "\"%i %i %i %i\",\n", image->width, image->height, colorCount, colorCount/64+1); - /* write colormap data */ if (image->data[3]) { for (i=0; i<colorCount/64+1; i++) @@ -582,6 +594,7 @@ RSaveXPM(RImage *image, char *filename) b = image->data[2]; a = image->data[3]; + /* write data */ for (y = 0; y < image->height; y++) { @@ -592,7 +605,7 @@ RSaveXPM(RImage *image, char *filename) if (!a || *a++>127) { tmpc = lookfor(colormap, (unsigned)*r<<16|(unsigned)*g<<8|(unsigned)*b); - fprintf(file, tmpc->text); + fprintf(file, index2str(buf, tmpc->index, colorCount)); } else { fprintf(file, transp); } diff --git a/wrlib/png.c b/wrlib/png.c index fa214422..dc0a2f1f 100644 --- a/wrlib/png.c +++ b/wrlib/png.c @@ -47,10 +47,6 @@ char *alloca (); #include <png.h> -#if PNG_LIBPNG_VER < 96 -#error libpng_must_be_more_at_least_0_96 -#endif - #include "wraster.h" @@ -158,7 +154,10 @@ RLoadPNG(RContext *context, char *file, int index) if (sgamma==0) sgamma = 1; } else { + /* sgamma = 2.0; + */ + sgamma = 1.0; } if (png_get_gAMA(png, pinfo, &gamma)) diff --git a/wrlib/raster.c b/wrlib/raster.c index fe94d426..70879714 100644 --- a/wrlib/raster.c +++ b/wrlib/raster.c @@ -41,7 +41,7 @@ RCreateImage(unsigned width, unsigned height, int alpha) { RImage *image=NULL; int i; - + assert(width>0 && height>0); image = malloc(sizeof(RImage)); diff --git a/wrlib/view.c b/wrlib/view.c index ae69a7df..6cf18171 100644 --- a/wrlib/view.c +++ b/wrlib/view.c @@ -19,7 +19,6 @@ void main(int argc, char **argv) puts("cant open display"); exit(1); } - attr.flags = RC_RenderMode | RC_ColorsPerChannel; attr.render_mode = RM_DITHER; attr.colors_per_channel = 4; diff --git a/wrlib/wraster.h b/wrlib/wraster.h index 9ed3a461..eefeb22b 100644 --- a/wrlib/wraster.h +++ b/wrlib/wraster.h @@ -39,8 +39,8 @@ #define RLRASTER_H_ -/* version of the header for the library: 0.10 */ -#define WRASTER_HEADER_VERSION 10 +/* version of the header for the library: 0.11 */ +#define WRASTER_HEADER_VERSION 11 #ifdef HAVE_ALLOCA_H #include <alloca.h> @@ -110,8 +110,12 @@ typedef struct RContext { int red_offset; /* only used in 24bpp */ int green_offset; int blue_offset; - + /* only used for pseudocolor and grayscale */ + + XStandardColormap *std_rgb_map; /* standard RGB colormap */ + XStandardColormap *std_gray_map; /* standard grayscale colormap */ + int ncolors; /* total number of colors we can use */ XColor *colors; /* internal colormap */ @@ -358,6 +362,8 @@ RImage *RRenderGradient(unsigned width, unsigned height, RColor *from, RImage *RRenderMultiGradient(unsigned width, unsigned height, RColor **colors, int style); + + /* * Convertion into X Pixmaps */ @@ -382,6 +388,7 @@ void RPutXImage(RContext *context, Drawable d, GC gc, RXImage *ximage, /* do not free the returned string! */ const char *RMessageForError(int errorCode); +int RBlurImage(RImage *image); /****** Global Variables *******/ -- 2.11.4.GIT