commit 17a465baa114bb4442c463a68c9fc0e987658f8e Author: Deployment Bot (from Travis CI) Date: Mon Apr 6 17:04:05 2020 +0000 Deploy gryf/window-maker.github.io to github.com/gryf/window-maker.github.io.git:gh-pages diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..44fab14 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.windowmaker.org \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9a9e96c --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +Window Maker webpage source +=========================== + +This is a web page source files. All of the files should be proper markdown +files accepted by [Jekyll](https://jekyllrb.com) static site generator. + +Build/serve +----------- + +In order to build the site, you'll need Jekyll framework installed and +[jekyll-rst](https://github.com/gryf/jekyll-rst) plugin. Easiest way +to achieve it, is to install it from system repositories. + +If your distribution doesn't contain it (even in external ones, like PPA for +Ubuntu, AUR for Arch or some portage overlay from Gentoo), that it might be +installed locally using [Bundler](https://github.com/bundler/bundler), which +typical usage would be as follows: + +``` +$ cd window-maker.github.io && bundler init +$ bundler add jekyll +$ mkdir _plugins +$ git clone https://github.com/gryf/jekyll-rst _plugins/jekyll-rst +$ pip install docutils pygments +$ gem install RbST nokogiri +$ bundler exec jekyll serve +``` + +Consult [jekyll-rst](https://github.com/gryf/jekyll-rst) plugin documentation +for requirements. Other options for installing dependencies are also possible - +they might be installed from distribution repositories. + +Last line will initialize gemfile, add jekyll to it, and then perform `jekyll +serve` which underneath will build the site and than run simple http server on +`http://localhost:4000` in development mode. More about jekyll you can find [on +it's page](https://jekyllrb.com/docs) diff --git a/WINGs_tutorial/3 Steps to Make a WINGs User Interface.html b/WINGs_tutorial/3 Steps to Make a WINGs User Interface.html new file mode 100644 index 0000000..e36cd3f --- /dev/null +++ b/WINGs_tutorial/3 Steps to Make a WINGs User Interface.html @@ -0,0 +1,42 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + +
LAST: ContentsNEXT: Step 1 Drawing a Window
+ +

Make a WINGs based Graphical User Interface in 3 Steps

+ +The WINGs library is the library with routines for a graphical user interface which comes with the Window Maker window manager. In 2010 the library's web page is here on the windowmaker.org website. You can download windowmaker with the WINGs libraries here. The library provides widgets which you can use to make a graphical user interface. A widget is a software module which is used to interact with the user. Buttons and menus are widgets. The WINGs library offers the possibility to programme these widgets in a few lines of C code, so that you can dedicate the rest of your time to the functionality in your application. + +

This tutorial shows in three simple steps how to write a graphical user interface with WINGs. Those three steps will cover all that is needed to write the major dialogs and widgets needed for communication between application and user. It assumes that you know how to programme in C, but you do not need to know anything about GUI-programming. + +

Step 1 in this tutorial will show the framework for an application which uses a WINGS graphical user interface. It shows how you have the WINGs library create a widget for you, and how you set its properties. Step 2 briefly explains what events are, and how you make your application react to incoming events. This is what makes your interface work. Step 3 shows how to insert two buttons and a text area into the application's window, and how to implement the handling of events for them. Along the explanations in the main text, there are a few examples of source code. Most WINGs function names speak for themselves, and therefore, not everything in the source code is repeated in the text. You can just read the code. The example developed in the three steps is a sufficient blueprint to allow you to use the other widgets in the WINGs library. To do that, just look up the functions in the relevant section in the library description section. + +

There are three programming detail sections after the three tutorial sections. They explain how to use Xlib code along with the WINGs code, how to set up a widget in which you can draw OpenGL images, and how to change part of the WINGs library source for your own needs, among other things. + +

To compile WINGs widgets, you need a C-compiler, the WINGs library, and an X-server on your computer. The first few libraries which you need will be libWINGs and libwraster, and the X11 library libXft. If the WINGs library directory is in the /usr/lib path, and your X11 libraries in /usr/X11/lib, you can compile the code with gcc as follows +

gcc -x c FileName -lXft -L/usr/X11/lib -L/usr/lib -lwraster -lWINGs -o FileName +

This will get you a binary called FileName which you can run, either by double clicking, or by running the ./FileName command in an xterm. +

To compile in C++, just replace the fprintf(stderr, ..) command with an appropriate cerr << , add the namespace command, and replace the <stdio.h> with the iostream header, then compile as + +g++ -x c++ -lXft FileName -L/usr/X11/lib -L/usr/lib -lwraster -lWINGs-o FileName + + + +

The function prototypes in the library description were retrieved from the information in the WINGs man pages which were compiled by Alexey Voinov. His page was here in 2010. + + +
+
+

+

LAST: ContentsNEXT: Step 1 Drawing a Window
+ + + + \ No newline at end of file diff --git a/WINGs_tutorial/EighthWindow.c b/WINGs_tutorial/EighthWindow.c new file mode 100644 index 0000000..628cd20 --- /dev/null +++ b/WINGs_tutorial/EighthWindow.c @@ -0,0 +1,70 @@ +#include "editmenu.h" + +#define WINWIDTH 300 +#define WINHEIGHT 400 +#define MENUWIDTH 80 +#define MENITEMHT 21 + +struct datacouple{WMWindow *window; + WEditMenu *menu; +} datacouple; + +void closeAll(WMWidget *self,void *data){ + WMDestroyWidget(self); + exit(0); +} + +void getMenu(WMWidget *self, void *data){ + WMPoint position; + struct datacouple *tmp=(struct datacouple *)data; + if(WMGetButtonSelected(self)){ + position=WMGetViewScreenPosition(WMWidgetView(tmp->window)); + WEditMenuShowAt(tmp->menu,(position.x>MENUWIDTH)?position.x-MENUWIDTH:0, position.y+MENITEMHT,tmp->window); + }else + WEditMenuHide(tmp->menu); +} + +int main (int argc, char **argv){ + +Display *display; +WMScreen *screen; +WMWindow *win; +WEditMenu *submenu, *menu; +WEditMenuItem * menuitem; +struct datacouple Mainmenu; + WMButton *Button; + +WMInitializeApplication("MenuWindow", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); +win = WMCreateWindow(screen, "Menu"); +WMResizeWidget(win, WINWIDTH, WINHEIGHT); +WMSetWindowCloseAction(win, closeAll, NULL); + + submenu=WCreateEditMenu(screen,"Submenu"); + menuitem =WAddMenuItemWithTitle(submenu,"Submenu item"); + menu=WCreateEditMenu(screen,"Main menu"); + menuitem = WAddMenuItemWithTitle(menu,"To submenu"); + WSetEditMenuSubmenu(menu, menuitem , submenu); + menuitem = WAddMenuItemWithTitle(menu,"Main item"); + +Mainmenu.window=win; +Mainmenu.menu=menu; + + Button =WMCreateButton(win,WBTPushOnPushOff); + WMSetButtonText (Button, "Menu"); + WMSetButtonAction (Button, getMenu, &Mainmenu); + WMMoveWidget(Button, 1,1); + +WMRealizeWidget(win); +WMRealizeWidget(Button); +WMRealizeWidget(menu); +WMRealizeWidget(submenu); + +WMMapSubwidgets(win); +WMMapWidget(win); + +WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/FDL.html b/WINGs_tutorial/FDL.html new file mode 100644 index 0000000..460b930 --- /dev/null +++ b/WINGs_tutorial/FDL.html @@ -0,0 +1,370 @@ + + +3 Steps to Make a WINGs User Interface - Licence + + + + + +
Contents
+ + +
		GNU Free Documentation License
+		   Version 1.1, March 2000
+
+ Copyright (C) 2000  Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially.  Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License.  The "Document", below, refers to any
+such manual or work.  Any member of the public is a licensee, and is
+addressed as "you".
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject.  (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent.  A copy that is
+not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification.  Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols.  If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has less than five).
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section entitled "History", and its title, and add to
+   it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section entitled "History" in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the "History" section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.
+K. In any section entitled "Acknowledgements" or "Dedications",
+   preserve the section's title, and preserve in the section all the
+   substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.
+M. Delete any section entitled "Endorsements".  Such a section
+   may not be included in the Modified Version.
+N. Do not retitle any existing section as "Endorsements"
+   or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications".  You must delete all sections
+entitled "Endorsements."
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation.  Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License provided that you also include the
+original English version of this License.  In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+      Copyright (c)  YEAR  YOUR NAME.
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.1
+      or any later version published by the Free Software Foundation;
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+      A copy of the license is included in the section entitled "GNU
+      Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant.  If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+
+ + \ No newline at end of file diff --git a/WINGs_tutorial/FifthWindow.c b/WINGs_tutorial/FifthWindow.c new file mode 100644 index 0000000..3260b7b --- /dev/null +++ b/WINGs_tutorial/FifthWindow.c @@ -0,0 +1,119 @@ +#define MARGIN 14 +#define WINWIDTH 300 +#define WINHEIGHT 400 + +Display *display; +WMScreen *screen; + +WMWindow *win; +WMSize ButtonsetSize; + +WMText *text; +WMColor *color; +WMFrame *controlframe; + +char textbuf[40]; + +void closeAll(WMWidget *self,void *data){ + WMDestroyWidget(self); + fprintf(stderr,"I've been used!\n"); + exit(0); +} + +static void selectFiles(void *self, void *data){ + int i=0; + WMOpenPanel *oPanel; + oPanel = WMGetOpenPanel(screen); + if (WMRunModalFilePanelForDirectory(oPanel, NULL, "/tmp", + "Search..", NULL) == True){ + snprintf(textbuf,39,"%s\n-", WMGetFilePanelFileName(oPanel)); + WMFreezeText(text); + WMAppendTextStream(text,textbuf); + WMThawText(text); + } + return ; +} + +static void handleEvents(XEvent *event, void *data){ + WMWidget *widget = (WMWidget*)data; + switch (event->type) { + case ButtonPress: + snprintf(textbuf,39,"Button down at (%i,%i) \n-",event->xbutton.x,event->xbutton.y); + WMFreezeText(text); + WMAppendTextStream(text,textbuf); + WMThawText(text); + break; + } +} + +static void resizeHandler(void *self, WMNotification *notif){ + WMSize size = WMGetViewSize(WMWidgetView(win)); + WMMoveWidget(controlframe, size.width-ButtonsetSize.width, size.height-ButtonsetSize.height); + WMResizeWidget(text, size.width-MARGIN -10, size.height-80); +} + + +int main (int argc, char **argv){ + +WMButton *Button; + + WMInitializeApplication("FifthWindow", &argc, argv); + if (!(display = XOpenDisplay(""))){ + fprintf(stderr,"err: cannot open display"); + exit(1); + } + screen = WMCreateScreen(display, DefaultScreen(display)); + + /* window */ + win = WMCreateWindow(screen, ""); + WMResizeWidget(win, WINWIDTH, WINHEIGHT); + WMSetWindowCloseAction(win, closeAll, NULL); + WMCreateEventHandler(WMWidgetView(win), ButtonPressMask,handleEvents, win); + color = WMCreateRGBColor(screen, 124<<9,206<<8,162<<8, False); + WMSetWidgetBackgroundColor((WMWidget *)win, color); + WMSetViewNotifySizeChanges(WMWidgetView(win), True); + WMAddNotificationObserver(resizeHandler, NULL, WMViewSizeDidChangeNotification, WMWidgetView(win)); + + /* Text area */ + + text = WMCreateText(win); + WMResizeWidget(text, WINWIDTH-MARGIN, WINHEIGHT -80); + WMMoveWidget(text, 10, 10); + WMSetTextHasVerticalScroller(text, True); + WMSetTextEditable(text, False); + + /* frame and two buttons */ + + controlframe=WMCreateFrame(win); + WMSetWidgetBackgroundColor((WMWidget *)controlframe, color); + WMSetFrameRelief(controlframe,WRFlat); + + Button =WMCreateButton(controlframe,WBTMomentaryPush); + WMSetWidgetBackgroundColor((WMWidget *)Button, color); + WMSetButtonText (Button, "Files"); + WMSetButtonAction (Button, selectFiles, NULL); + ButtonsetSize = WMGetViewSize(WMWidgetView(Button)); + WMMoveWidget(Button, MARGIN, MARGIN); + + Button =WMCreateButton(controlframe,WBTMomentaryPush); + WMSetWidgetBackgroundColor((WMWidget *)Button, color); + WMSetButtonText (Button, "Quit"); + WMSetButtonAction (Button, closeAll, NULL); + WMMoveWidget(Button,2*MARGIN+ButtonsetSize.width, MARGIN); + ButtonsetSize.width = 3*MARGIN+2*ButtonsetSize.width; + ButtonsetSize.height=2*MARGIN+ButtonsetSize.height; + WMResizeWidget(controlframe,ButtonsetSize.width,ButtonsetSize.height); + + WMMapSubwidgets(controlframe); + resizeHandler(NULL,NULL); + /* end of frame and buttons setup */ + + + WMMapSubwidgets(win); + WMMapWidget(win); + WMRealizeWidget(win); + + WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/FirstWindow.c b/WINGs_tutorial/FirstWindow.c new file mode 100644 index 0000000..6d38916 --- /dev/null +++ b/WINGs_tutorial/FirstWindow.c @@ -0,0 +1,17 @@ +int main (int argc, char **argv){ + + Display *display; + WMScreen *screen; + WMWindow *win; + + WMInitializeApplication("FirstWindow", &argc, argv); + + display = XOpenDisplay(""); + screen = WMCreateScreen(display, DefaultScreen(display)); + win = WMCreateWindow(screen, ""); + + WMRealizeWidget(win); + WMMapWidget(win); + + WMScreenMainLoop(screen); +} diff --git a/WINGs_tutorial/FourthWindow.c b/WINGs_tutorial/FourthWindow.c new file mode 100644 index 0000000..66b98a1 --- /dev/null +++ b/WINGs_tutorial/FourthWindow.c @@ -0,0 +1,122 @@ +#define MARGIN 14 +#define WINWIDTH 300 +#define WINHEIGHT 400 + +Display *display; +WMScreen *screen; + +WMButton *Button; +WMWindow *win; +WMSize ButtonsetSize; + +WMBox *box; +WMText *text; +WMColor *color; + +char textbuf[40]; + +void closeAll(WMWidget *self,void *data){ + WMDestroyWidget(self); + fprintf(stderr,"I've been used!\n"); + exit(0); +} + +static void selectFiles(void *self, void *data){ + WMOpenPanel *oPanel; + oPanel = WMGetOpenPanel(screen); + if (WMRunModalFilePanelForDirectory(oPanel, NULL, "/tmp", + "Search..", NULL) == True){ + snprintf(textbuf,39,"%s\n-", WMGetFilePanelFileName(oPanel)); + WMFreezeText(text); + WMAppendTextStream(text,textbuf); + WMThawText(text); + } + return ; +} + +static void handleEvents(XEvent *event, void *data){ + WMWidget *widget = (WMWidget*)data; + switch (event->type) { + case ButtonPress: + snprintf(textbuf,39,"Button down at (%i,%i) \n-",event->xbutton.x,event->xbutton.y); + WMFreezeText(text); + WMAppendTextStream(text,textbuf); + WMThawText(text); + break; + } +} + +static void resizeHandler(void *self, WMNotification *notif){ + WMSize size = WMGetViewSize(WMWidgetView(win)); + WMMoveWidget(box, size.width-ButtonsetSize.width, size.height-ButtonsetSize.height); + WMResizeWidget(text, size.width-MARGIN -10, size.height-80); +} + + +int main (int argc, char **argv){ + + WMInitializeApplication("FourthWindow", &argc, argv); + if (!(display = XOpenDisplay(""))){ + fprintf(stderr,"err: cannot open display"); + exit(-1); + } + screen = WMCreateScreen(display, DefaultScreen(display)); + + /* window */ + win = WMCreateWindow(screen, ""); + WMResizeWidget(win, WINWIDTH, WINHEIGHT); + WMSetWindowCloseAction(win, closeAll, NULL); + + color = WMCreateRGBColor(screen, 124<<9,206<<8,162<<8, False); + WMSetWidgetBackgroundColor((WMWidget *)win, color); + + WMCreateEventHandler(WMWidgetView(win), ButtonPressMask,handleEvents, win); + WMSetViewNotifySizeChanges(WMWidgetView(win), True); + WMAddNotificationObserver(resizeHandler, NULL, WMViewSizeDidChangeNotification, WMWidgetView(win)); + + /* Text area */ + + text = WMCreateText(win); + WMResizeWidget(text, WINWIDTH-MARGIN, WINHEIGHT -80); + WMMoveWidget(text, 10, 10); + WMSetTextHasVerticalScroller(text, True); + WMSetTextEditable(text, False); + WMSetTextIgnoresNewline(text, False); + + /* box with buttons */ + box=WMCreateBox(win); + WMSetBoxBorderWidth(box, MARGIN); + WMSetWidgetBackgroundColor((WMWidget *)box, color); + WMSetBoxHorizontal(box, True); + + + Button =WMCreateButton(box,WBTMomentaryPush); + WMSetWidgetBackgroundColor((WMWidget *)Button, color); + WMSetButtonText (Button, "Files"); + WMSetButtonAction (Button, selectFiles, NULL); + WMMapWidget(Button); + ButtonsetSize = WMGetViewSize(WMWidgetView(Button)); + + WMAddBoxSubview(box, WMWidgetView(Button), True, False, 60, 1000, MARGIN); + + Button =WMCreateButton(box,WBTMomentaryPush); + WMSetWidgetBackgroundColor((WMWidget *)Button, color); + WMSetButtonText (Button, "Quit"); + WMSetButtonAction (Button, closeAll, NULL); + WMMapWidget(Button); + + WMAddBoxSubview(box, WMWidgetView(Button), True,False, 60, 1000, 0); + WMResizeWidget(box, 4*MARGIN+2*ButtonsetSize.width,2*MARGIN+ButtonsetSize.height); + ButtonsetSize =WMGetViewSize(WMWidgetView(box)); + resizeHandler(NULL,NULL); + /* end of box and buttons setup */ + + WMMapWidget(win); + + WMMapSubwidgets(win); + WMRealizeWidget(win); + + WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/NinthWindow.c b/WINGs_tutorial/NinthWindow.c new file mode 100644 index 0000000..5680209 --- /dev/null +++ b/WINGs_tutorial/NinthWindow.c @@ -0,0 +1,206 @@ +#include "editmenu.h" /* This must be the MODIFIED .h file */ +#include +#include +#include +#include +#define WINWIDTH 300 +#define WINHEIGHT 400 +#define MENUWIDTH 85 +#define MENITEMHT 21 +#define LOGPROGRAM "xconsole" +#define ERRMSGFIFO "/tmp/WINGsWindowfifo" +#define FIFONAMELEN 20 +#define NOLOGWINDOW (-2) /* value when there is no console window */ +#define FIFOERROR (-1) /* value when there is a problem w/ console */ +#define FIFOLOWESTPOSS 0 + + +int windowCounter=0; +int fifonr; +int sibpid; +char fifofilename[FIFONAMELEN+5]; + +struct dataStruct{ + WMWindow *window; + WEditMenu *menu; +} dataStruct; + + + /* functions for the message window part: */ + +void redirectmsg(int sig){ + + // clean up after SIGCHLD, and set fifonr to flag it + fifonr=NOLOGWINDOW; + if (!access(fifofilename,F_OK|W_OK)) + unlink(fifofilename); + return; +} + + +int showMessageWindow(){ + + sprintf(fifofilename,"%s%i",ERRMSGFIFO,(unsigned short)getpid()); + + (void) signal(SIGCHLD,redirectmsg); // clean up if message console is killed + + if(access(fifofilename,F_OK)==-1) + fifonr=mknod(fifofilename,0640|O_EXCL|S_IFIFO,(dev_t)0); + else {fifonr=FIFOERROR; + wwarning("Fifo file already exists\n"); + } + /* fifonr == FIFOERROR if mknod/mkfifo or access failed, mknod returns -1 on failure */ + +if(fifonr!=FIFOERROR){ + + sibpid=fork(); + if(sibpid==0){ + execlp(LOGPROGRAM , LOGPROGRAM, "-file",fifofilename,"-geometry","250x400", "-title","Window Messages",(char *)0); + exit(1); +}else + fifonr=open(fifofilename,O_WRONLY); +} + return fifonr; +} + + /* general and menu handling functions */ + +void closeAll(WMWidget *self,void *data){ + + WMDestroyWidget(self); + if(--windowCounter<1){ + if (fifonr>=FIFOLOWESTPOSS) + kill(sibpid,SIGTERM); + if (!access(fifofilename,F_OK|W_OK)) + unlink(fifofilename); + exit(0); + } +} + + +void menuItemAction(void *self, void *data){ + + if (fifonrwindow)); + WEditMenuShowAt(tmp->menu,(position.x>MENUWIDTH)?position.x-MENUWIDTH:0, position.y+MENITEMHT,tmp->window); + }else{ + WEditMenuHide(tmp->menu); + WDeselectItem(tmp->menu); // remove selection before next pop up + } +} + + +static void notificationHandler(void *self, WMNotification *notif){ + +if(!strcmp("WMWindowClose",WMGetNotificationName(notif))) + closeAll(self,NULL); +if(!strcmp(WMViewSizeDidChangeNotification,WMGetNotificationName(notif))){ + //resize actions + WMSize size = WMGetViewSize(WMWidgetView(self)); + } +} + + /* main widget creating functions */ + +WMWindow * makeMainwindow(Display *display, WMScreen *screen){ +WMWindow *window; + + window = WMCreateWindow(screen, "Menu"); + WMResizeWidget(window, WINWIDTH, WINHEIGHT); + WMSetWindowCloseAction(window, closeAll, NULL); + WMAddNotificationObserver(notificationHandler, window, "WMWindowClose", WMWidgetView(window)); + WMSetViewNotifySizeChanges(WMWidgetView(window), True); + WMAddNotificationObserver(notificationHandler, window, WMViewSizeDidChangeNotification, WMWidgetView(window)); + WMAddNotificationObserver(notificationHandler, window, "WMWindowClose", NULL); + WMRealizeWidget(window); + return window; +} + + +WEditMenu * makeMenus(WMScreen *screen,WEditMenu *menu, WEditMenu *submenu){ +WEditMenuItem * menuitem; + + submenu=WCreateEditMenu(screen,"Submenu"); + menuitem =WAddMenuItemWithTitle(submenu,"Submenu item"); + WSetEditMenuItemAction( menuitem, menuItemAction); + menuitem =WAddMenuItemWithTitle(submenu,"2nd submenu item"); + WSetEditMenuItemAction( menuitem, menuItemAction); + menuitem =WAddMenuItemWithTitle(submenu,"3d submenu item"); + WSetEditMenuItemAction( menuitem, menuItemAction); + menu=WCreateEditMenu(screen,"Main menu"); + menuitem = WAddMenuItemWithTitle(menu,"1st main item"); + WSetEditMenuItemAction( menuitem, menuItemAction); + menuitem = WAddMenuItemWithTitle(menu,"2nd main item"); + WSetEditMenuItemAction( menuitem, menuItemAction); + menuitem = WAddMenuItemWithTitle(menu,"To submenu"); + WSetEditMenuSubmenu(menu, menuitem , submenu); + menuitem = WAddMenuItemWithTitle(menu,"Quit"); + WSetEditMenuItemAction( menuitem, menuItemCloseAction); + WMRealizeWidget(submenu);WMRealizeWidget(menu); + return menu; +} + + +WMButton * makeButtonsTop( WMWidget *window, void *AppData){ +WMButton *Button; + + Button =WMCreateButton(window,WBTPushOnPushOff); + WMSetButtonText (Button, "Menu"); + WMSetButtonAction (Button, getMenu, AppData); + WMMoveWidget(Button, 4,2); + WMRealizeWidget(Button); + return Button; +} + + +int main (int argc, char **argv){ + +Display *display; +WMScreen *screen; +WMWindow *mainwindow; +WEditMenu *submenu, *menu; +WEditMenuItem * menuitem; +struct dataStruct Mainmenu; +WMButton *menubutton; + +fifonr=NOLOGWINDOW; + +WMInitializeApplication("MenuWindow", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); +mainwindow= makeMainwindow(display, screen) ; + +menu=makeMenus(screen,menu,submenu); + +Mainmenu.window=mainwindow; +Mainmenu.menu=menu; +menubutton=makeButtonsTop(mainwindow, &Mainmenu); + +WMMapSubwidgets(mainwindow); +WMMapWidget(mainwindow); + +WMScreenMainLoop(screen); +return 0; +} diff --git a/WINGs_tutorial/SecondWindow.c b/WINGs_tutorial/SecondWindow.c new file mode 100644 index 0000000..db31b4b --- /dev/null +++ b/WINGs_tutorial/SecondWindow.c @@ -0,0 +1,34 @@ +void closeAll(WMWidget *self,void *data){ + fprintf(stderr,"I've been used!\n"); + WMDestroyWidget(self); + exit(0); +} + +int main (int argc, char **argv){ + + Display *display; + WMScreen *screen; + + WMWindow *win; + WMColor *color; + + WMInitializeApplication("SecondWin", &argc, argv); + + if (!(display = XOpenDisplay(""))){ + fprintf(stderr, "cannot open display\n"); + exit(1); + } + screen = WMCreateScreen(display, DefaultScreen(display)); + + win = WMCreateWindow(screen, ""); + WMSetWindowCloseAction(win, closeAll, NULL); + color = WMCreateRGBColor(screen,124<<9,206<<8,162<<8, False); + WMSetWidgetBackgroundColor((WMWidget *)win, color); + + WMMapWidget(win); + WMRealizeWidget(win); + + WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/SeventhWindow.c b/WINGs_tutorial/SeventhWindow.c new file mode 100644 index 0000000..75a4b54 --- /dev/null +++ b/WINGs_tutorial/SeventhWindow.c @@ -0,0 +1,100 @@ +#include +#include + +#define HOFF 40 +#define VOFF 160 +#define WINWIDTH 180 +#define WINHEIGHT 300 + +Display *display; +WMScreen *screen; +WMPixmap* pixmap; + +struct _pict{ + Drawable dwin; + XSegment segments[40]; + int seglen; + } pic; + +GC gc, g3; + +void closeAction(WMWidget *self,void *data){ + WMDestroyWidget(self); + exit(0); +} + +void drawProcedure(XEvent *event, void *data){ + + WMDrawPixmap(pixmap, ((struct _pict*)data)->dwin,HOFF,30); + XDrawRectangle(display,((struct _pict*)data)->dwin,g3, HOFF,VOFF,100,100); + XFillRectangle(screen->display, ((struct _pict*)data)->dwin , WMColorGC(screen->white), HOFF, VOFF, 100, 100); + XDrawSegments(display, ((struct _pict*)data)->dwin, WMColorGC(screen->black), ((struct _pict*)data)->segments, ((struct _pict*)data)->seglen); + XFlush(display); + return; +} + + +int main (int argc, char **argv){ +int i,j; +WMColor *color; +WMWindow * win; +RImage *image; +struct _pict pict; +Drawable de; + +RColor one, two={0xaf, 0x0f,0xff,0x33}; +one.red=247; +one.green=251; +one.blue=107; +one.alpha=0xff; + + +WMInitializeApplication("DrawWin", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); +win = WMCreateWindow(screen, ""); +WMResizeWidget(win, WINWIDTH, WINHEIGHT); +WMSetWindowCloseAction(win, closeAction, NULL); +WMSetWindowTitle(win,"Graphics"); +color = WMCreateRGBColor(screen,124<<9,206<<8,162<<8, False); +WMSetWidgetBackgroundColor((WMWidget *)win, color); + /* end setup main window */ + +image=RCreateImage( 100,100,0.5); +RFillImage(image, &two); +RDrawLine(image, 50,10,90,90,&one); +RDrawLine(image, 10,90,50,10,&one); +RDrawLine(image, 10,90,90,90,&one); + +g3=WMColorGC(screen->gray); +XSetLineAttributes(display,g3,3,LineSolid,CapButt,JoinMiter); + +pict.segments[1].x1= pict.segments[0].x1=HOFF; +pict.segments[0].x2=HOFF; +pict.segments[0].y1=VOFF; +pict.segments[1].y2= pict.segments[0].y2=VOFF; +pict.segments[1].x2= HOFF+10; +pict.segments[1].y1=VOFF+10; +pict.seglen=2; +for (i=9;i>0;i--){ + j=2*(10-i); + pict.segments[j+1].x1= pict.segments[j].x1=HOFF; + pict.segments[j+1].y2= pict.segments[j].y2=VOFF; + pict.segments[j].x2= i+pict.segments[j-1].x2; + pict.segments[j].y1=i+pict.segments[j-1].y1; + pict.segments[j+1].x2= i+pict.segments[j].x2; + pict.segments[j+1].y1=i+pict.segments[j].y1; + pict.seglen+=2; +}; + + +WMRealizeWidget(win); + +pict.dwin=W_VIEW_DRAWABLE(WMWidgetView(win)); +pixmap=WMCreatePixmapFromRImage(screen, image,1); + +WMCreateEventHandler(WMWidgetView(win), ExposureMask,drawProcedure,&pict); + +WMMapWidget(win); +WMScreenMainLoop(screen); +} diff --git a/WINGs_tutorial/SixthWindow.c b/WINGs_tutorial/SixthWindow.c new file mode 100644 index 0000000..7e24581 --- /dev/null +++ b/WINGs_tutorial/SixthWindow.c @@ -0,0 +1,58 @@ +#include +#include + +#define WINWIDTH 200 +#define WINHEIGHT 300 + +Display *display; +WMScreen *screen; +WMPixmap* pixmap; + +void closeAction(WMWidget *self,void *data){ + WMDestroyWidget(self); + exit(0); +} + +void drawProcedure(XEvent *event, void *data){ + WMDrawPixmap(pixmap, W_VIEW_DRAWABLE(WMWidgetView(data)),30,30);XFlush(display); +} + + +int main (int argc, char **argv){ +WMColor *color; +WMWindow * win; +RImage *image; + +RColor one, two={0xaf, 0x0f,0xff,0x33}; +one.red=0x20; +one.green=0x20; +one.blue=0x20; +one.alpha=0xff; + + +WMInitializeApplication("DrawWin", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); +win = WMCreateWindow(screen, ""); +WMResizeWidget(win, WINWIDTH, WINHEIGHT); +WMSetWindowCloseAction(win, closeAction, NULL); +WMSetWindowTitle(win,"Graphics"); +color = WMCreateRGBColor(screen,124<<9,206<<8,162<<8, False); +WMSetWidgetBackgroundColor((WMWidget *)win, color); + /* end setup main window */ + + +image=RCreateImage( 100,100,.8); +RFillImage(image, &two); +RDrawLine(image, 50,10,90,90,&one); +RDrawLine(image, 10,90,50,10,&one); +RDrawLine(image, 10,90,90,90,&one); + +WMRealizeWidget(win); + +pixmap=WMCreatePixmapFromRImage(screen, image,1); +WMCreateEventHandler(WMWidgetView(win), ExposureMask,drawProcedure,win); + +WMMapWidget(win); +WMScreenMainLoop(screen); +} diff --git a/WINGs_tutorial/ThirdWindow.c b/WINGs_tutorial/ThirdWindow.c new file mode 100644 index 0000000..218ebfe --- /dev/null +++ b/WINGs_tutorial/ThirdWindow.c @@ -0,0 +1,46 @@ +void closeAll(WMWidget *self,void *data){ + fprintf(stderr, "I've been used!\n"); + WMDestroyWidget(self); + exit(0); +} + +static void +handleEvents(XEvent *event, void *data) +{ + WMWidget *widget = (WMWidget*)data; + switch (event->type) { + case ButtonPress: + closeAll(widget,NULL); + break; + } +} + +int main (int argc, char **argv){ + + Display *display; + WMScreen *screen; + + WMWindow *win; + WMColor *color; + + WMInitializeApplication("ThirdWindow", &argc, argv); + + if (!(display = XOpenDisplay(""))){ + fprintf(stderr,"error: cannot open display\n"); + exit(1); + } + screen = WMCreateScreen(display, DefaultScreen(display)); + + win = WMCreateWindow(screen, ""); + WMSetWindowCloseAction(win, closeAll, NULL); + WMCreateEventHandler(WMWidgetView(win), ButtonPressMask,handleEvents, win); + color = WMCreateRGBColor(screen, 124<<9,206<<8,162<<8, False); + WMSetWidgetBackgroundColor((WMWidget *)win, color); + + WMMapWidget(win); + WMRealizeWidget(win); + + WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/WINGGraphics.html b/WINGs_tutorial/WINGGraphics.html new file mode 100644 index 0000000..7edd5f1 --- /dev/null +++ b/WINGs_tutorial/WINGGraphics.html @@ -0,0 +1,119 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + +
LAST: Programming Details 1ContentsNEXT: Programming Details 3
+ +

Drawing procedures

+ +
The drawable
+

The WINGs library has functions to directly draw an image in a label, button or slider. To write to other widgets, there is a function WMDrawPixmap (WMPixmap *pixmap, Drawable d, int x, int y). The pixmap can be written to any XLib variable of type Drawable, at position (x,y). This section shows how it is done to a window. The drawable is retrieved from the widget's view structure by the macro W_VIEW_DRAWABLE(WMView). You only call this macro after the widget has been WMRealizeWidgeted, or there simply will not be a drawable in it. To use it,#include <WINGs/WINGsP.h>. +

Images can be created from within the code itself. The WINGs/wraster library creates a structure for it, by the call RCreateImage, and there are a few functions to draw a line or segments in it. You would only use this if you like to store the image in memory for some reason. These functions use a colour structure RColor. There is a conversion function from a WMColor, but the RColor is a simple structure with four unsigned long members which are the RGB and alpha values. This example shows how a picture is drawn directly into a window, by the defined function drawProcedure. This function is called by associating Expose events to it, by using WMCreateEventHandler on the window's view: +


+void drawProcedure(XEvent *event, void *data){
+ WMDrawPixmap(pixmap, W_VIEW_DRAWABLE(WMWidgetView(data)),30,30);XFlush(display);
+}
+int main (){
+   /*  code   */
+WMCreateEventHandler(WMWidgetView(win), ExposureMask,drawProcedure,win);
+  /*  */ }
+

+ Try to comment out the line with the event handler function, and to call WMDrawPixmap(pixmap, W_VIEW_DRAWABLE(WMWidgetView(win)),30,30) directly from main. It won't work. When the WMScreenMainLoop starts up, there will be an Expose event. The window will react to the event by drawing itself, as specified in the WINGslib routines, but there won't be another call to WMDrawPixmap, unless you programme it yourself. + +

Xlib graphics functions
+

The Xlib library itself offers more possibilities to draw in a widget, like drawing curves. The Xlib functions write to the drawable, like WMDrawPixmap. Xlib functions need the Xlib GC type graphics contexts. You keep different graphics contexts at a time to switch drawing styles. The WMColorGC macro creates one from a WMColor structure, which will give you the color you used as an argument. In the example, the line width in this graphics context is set to 3 instead of one with the function XSetLineAttributes. You'll get this line width whenever you use XMColorGC(screen->gray) from that point on. The next lines are drawn with default line width. The example is here. + +

Useful Xlib functions and structures are +

    +
  • int XDrawRectangle(Display *display, Drawable d, GC gc, + int x, int y, unsigned int width, unsigned int + height)
  • + int XDrawLines(Display *display, Drawable d, GC gc, XPoint + *points, int npoints, int mode)
  • + + int XDrawSegments(Display *display, Drawable d, GC gc, + XSegment *segments, int nsegments)
  • + + int XDrawArc(Display *display, Drawable d, GC gc, int x, + int y, unsigned int width, unsigned int height, int + angle1, int angle2)
  • + int XDrawArcs(Display *display, Drawable d, GC gc, XArc + *arcs, int narcs)
  • + int XDrawPoint(Display *display, Drawable d, GC gc, int x, + int y)
  • + + int XDrawPoints(Display *display, Drawable d, GC gc, + XPoint *points, int npoints, int mode)
  • + + GC XCreateGC(Display *display, Drawable d, unsigned long + valuemask, XGCValues *values)
  • + int XFillArc(Display *display, Drawable d, GC gc, int x, + int y, unsigned int width, unsigned int height, int + angle1, int angle2)
  • + int XFillPolygon(Display *display, Drawable d, GC gc, + XPoint *points, int npoints, int shape, int mode)
  • + + + typedef struct { + short x1, y1, x2, y2; + } XSegment
  • + + typedef struct { + short x, y; + } XPoint
  • + + + typedef struct { + short x, y; + unsigned short width, height; + short angle1, angle2; /* Degrees * 64 */ + } XArc +
+

The XFree XLib man pages are here in 2010. + + +

An OpenGL drawing area
+

Just like the Xlib functions, we can use a drawable for drawing 3 dimensional images with the OpenGL/Mesa GL libraries. This section will show how to use a WINGs frame for this. The application shall have a GL-window and one button which allows the user to turn the object in the frame. +

We realize a widget "glframe" of type WMFrame as usual, and get the drawable (win of type Window) out of its view with +

win =W_VIEW_DRAWABLE(WMWidgetView(glframe));
+To set up the variables needed to use the MesaGL library, we use the glX library. We shall also change some properties of the X-window win. We can retrieve the necessary information for both by way of an RContext, but what we need is so simple, that we shall use Xlib functions to get it directly. +
Window win;
+XVisualInfo	*xvVisualInfo;
+Colormap	usColorMap;
+XSetWindowAttributes 	winAttr;
+GLXContext       glXContext;
+int Attributes[] = {	GLX_RGBA,
+		GLX_RED_SIZE, 8,
+		GLX_GREEN_SIZE, 8,
+		GLX_BLUE_SIZE, 8,
+		GLX_DEPTH_SIZE, 16,
+		GLX_DOUBLEBUFFER,
+		None};
+xvVisualInfo = glXChooseVisual(display, DefaultScreen(display), Attributes);
+cmColorMap = XCreateColormap(display,RootWindow(display, DefaultScreen(display)), usVisualInfo->visual, AllocNone);
+winAttr.colormap = usColorMap;
+winAttr.border_pixel = 0;
+winAttr.background_pixel = 0;
+winAttr.event_mask = ExposureMask | ButtonPressMask  |StructureNotifyMask| KeyPressMask;
+
+XChangeWindowAttributes(display,win,CWBorderPixel | CWColormap | CWEventMask,&winAttr);
+glXContext = glXCreateContext(display, xvVisualInfo, None, True);
+glXMakeCurrent(display, win, glXContext);
+

The first thing to get, is an X XVisualInfo structure for the colour properties we need (8 bits for a colour) and depth size. The glX library has the
glXChooseVisual(Display *display, int screen, int * attributes)
function for that. We use these data to create a colormap,with the Xlib function
XCreateColormap(Display *display, Window win, Visual *visual, int alloc).
We then make an Xlib structure XSetWindowAttributes, to which we add the colormap as a member .colormap, and to which we set a member .event_mask by ORing the necessary masks. This structure, finally, can be used to set the window's properties with
int XChangeWindowAttributes(Display *display, Window win, unsigned long valuemask, XSetWindowAttributes *attributes).
Having done this, we collect the "environment variables" for OpenGL with the glX function
GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct ).
Finally we select the glframe's drawable win as the window OpenGl shall write to, by
Bool glXMakeCurrent( Display *display, GLXDrawable win, GLXContext ctx ).
The frame's window Window win can now be used in the GL-call void glXSwapBuffers( Display *display, GLXDrawable win ). +

The source code is in the file glframe.c. You need to have MesaGL installed, and the glx library. To compile, use gcc -x c glframe.c -lXft -L/usr/X11/lib -L/usr/lib -lWINGs -lwraster -lOSMesa -lm -o glframe. If the compiler does not find the glx library, you could add -L/usr/X11/lib/modules/extensions -lglx, if that is where your library is. + + + +
+

+

LAST: Programming Details 1ContentsNEXT: Programming Details 3
+ + + \ No newline at end of file diff --git a/WINGs_tutorial/WINGGraphics_files/glframe.jpeg b/WINGs_tutorial/WINGGraphics_files/glframe.jpeg new file mode 100644 index 0000000..7a63c00 Binary files /dev/null and b/WINGs_tutorial/WINGGraphics_files/glframe.jpeg differ diff --git a/WINGs_tutorial/WINGGraphics_files/seventh2.jpeg b/WINGs_tutorial/WINGGraphics_files/seventh2.jpeg new file mode 100644 index 0000000..37c4d24 Binary files /dev/null and b/WINGs_tutorial/WINGGraphics_files/seventh2.jpeg differ diff --git a/WINGs_tutorial/WINGLib.html b/WINGs_tutorial/WINGLib.html new file mode 100644 index 0000000..000bc9d --- /dev/null +++ b/WINGs_tutorial/WINGLib.html @@ -0,0 +1,1188 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + +
LAST: Programming Details 3Contents
+ + +

Library description: List of Widgets and Sample Code

+

This section lists the prototypes of all the WINGs and a few libwraster functions, some of them with a coding example. + +

General widgets
+
    +
  • void WMDestroyWidget (WMWidget *widget) +
  • void WMMapWidget (WMWidget *w) +
  • void WMMoveWidget (WMWidget *w, int x, int y) +
  • void WMRealizeWidget (WMWidget *w) +
  • void WMRedisplayWidget (WMWidget *w) +
  • void WMResizeWidget (WMWidget *w, unsigned int width, unsigned int height) +
  • void WMSetWidgetBackgroundColor (WMWidget *w, WMColor *color) +
  • void WMUnmapWidget (WMWidget *w) +
  • void WMUnmapSubwidgets (WMWidget *w) +
  • unsigned int WMWidgetHeight (WMWidget *w) +
  • unsigned int WMWidgetWidth (WMWidget *w) +
  • Bool WMWidgetIsMapped (WMWidget *w) +
  • WMWidget * WMWidgetOfView (WMView *view) +
  • WMScreen * WMWidgetScreen (WMWidget *w) +
    +
  • void WMLowerWidget (WMWidget *w) +
  • void WMRaiseWidget (WMWidget *w) +
  • void WMReparentWidget (WMWidget *w, WMWidget *newParent, int x, int y) +
  • void WMSetFocusToWidget (WMWidget *widget) +
  • void WMSetWidgetDefaultBoldFont (WMScreen *scr, WMFont *font) +
  • void WMSetWidgetDefaultFont (WMScreen *scr, WMFont *font) +
  • Window WMWidgetXID (WMWidget *w) +
  • WMColor * WMGetWidgetBackgroundColor (WMWidget *w) +
+
Frames
+A frame can be used to group widgets. When moving widgets, their position will be calculated with respect to the upper left corner of their parent frame. A frame has a WMView. Title position definitions are here. WMReliefType WMFlat will make the frame's border invisible. +
  • WMFrame * WMCreateFrame (WMWidget *parent) +
  • void WMSetFrameTitle (WMFrame *fPtr, char *title) +
  • void WMSetFrameTitlePosition (WMFrame *fPtr, + WMTitlePosition position) +
  • void WMSetFrameRelief (WMFrame *fPtr, + WMReliefType relief) +
+ + +
Panels
+
    +
  • WMWindow * WMCreatePanelForWindow (WMWindow *owner, char *name) +
  • WMWindow * WMCreatePanelWithStyleForWindow (WMWindow *owner, char *name, int style) +
  • WMGenericPanel * WMCreateGenericPanel (WMScreen *scrPtr, WMWindow *owner, char *title, char *defaultButton, char *alternateButton) +
  • void WMDestroyGenericPanel (WMGenericPanel *panel) +
  • void WMChangePanelOwner (WMWindow *win, WMWindow *newOwner) +
+ +
Windows
+
    + +
  • WMWindow * WMCreateWindow (WMScreen *screen, char *name) +
  • WMWindow * WMCreateWindowWithStyle (WMScreen *screen, char *name, int style) +
  • void WMCloseWindow (WMWindow *win) +
  • void WMSetWindowCloseAction (WMWindow *win, WMAction *action, void *clientData) +
  • void WMSetWindowAspectRatio (WMWindow *win, int minX, int minY, int maxX, int maxY) +
  • void WMSetWindowBaseSize (WMWindow *win, unsigned width, unsigned height) +
  • void WMSetWindowUserPosition (WMWindow *win, int x, int y) +
  • void WMSetWindowInitialPosition (WMWindow *win, int x, int y) +
  • void WMSetWindowMaxSize (WMWindow *win, unsigned width, unsigned height) +
  • void WMSetWindowMinSize (WMWindow *win, unsigned width, unsigned height) +
  • void WMSetWindowMiniwindowPixmap (WMWindow *win, WMPixmap *pixmap) +
  • void WMSetWindowMiniwindowTitle (WMWindow *win, char *title) +
  • void WMSetWindowLevel (WMWindow *win, int level) +
  • void WMSetWindowResizeIncrements (WMWindow *win, unsigned wIncr, unsigned hIncr) +
  • void WMSetWindowTitle (WMWindow *win, char *title) +
  • void WMSetWindowDocumentEdited (WMWindow *win, Bool flag) +
+ + + +
Views
+
    +
  • WMPoint WMGetViewPosition (WMView *view) +
  • WMPoint WMGetViewScreenPosition (WMView *view) +
  • WMSize WMGetViewSize (WMView *view) +
  • void WMSetViewExpandsToParent (WMView *view, int leftOffs, int topOffs, int rightOffs, int bottomOffs) +
  • void WMSetViewNotifySizeChanges (WMView *view, Bool flag) +
      +
    • void WMSetViewDragDestinationProcs (WMView *view, WMDragDestinationProcs *procs) +
    • void WMSetViewDragSourceProcs (WMView *view, WMDragSourceProcs *procs) +
    • void WMSetViewNextResponder (WMView *view, WMView *responder)
    • Window WMViewXID (WMView *view) +
    + + +
    Buttons
    + WMButton * WMCreateButton (WMWidget *parent, WMButtonType type) +
  • WMButton * WMCreateCustomButton (WMWidget *parent, int behaviourMask) +
  • void WMGroupButtons (WMButton *bPtr, WMButton *newMember) +
  • void WMSetButtonAction (WMButton *bPtr, WMAction *action, void *clientData) +
  • void WMSetButtonImage (WMButton *bPtr, WMPixmap *image) +
  • void WMSetButtonImageDefault (WMButton *bPtr) +
  • void WMSetButtonImageDimsWhenDisabled (WMButton *bPtr, Bool flag) +
  • void WMSetButtonImagePosition (WMButton *bPtr, WMImagePosition position) +
  • void WMSetButtonText (WMButton *bPtr, char *text) +
  • void WMSetButtonTextAlignment (WMButton *bPtr, WMAlignment alignment) +
  • void WMSetButtonTextColor (WMButton *bPtr, WMColor *color) +
  • void WMSetButtonAltImage (WMButton *bPtr, WMPixmap *image) +
  • void WMSetButtonAltText (WMButton *bPtr, char *text) +
  • void WMSetButtonAltTextColor (WMButton *bPtr, WMColor *color) +
  • void WMSetButtonBordered (WMButton *bPtr, int isBordered) +
  • void WMSetButtonContinuous (WMButton *bPtr, Bool flag) +
  • void WMSetButtonDisabledTextColor (WMButton *bPtr, WMColor *color) +
  • void WMSetButtonFont (WMButton *bPtr, WMFont *font) +
  • void WMSetButtonPeriodicDelay (WMButton *bPtr, float delay, float interval) +
  • void WMSetButtonEnabled (WMButton *bPtr, Bool flag) +
  • void WMSetButtonSelected (WMButton *bPtr, int isSelected) +
  • void WMSetButtonTag (WMButton *bPtr, int tag) +
  • void WMPerformButtonClick (WMButton *bPtr) +
  • int WMGetButtonEnabled (WMButton *bPtr) +
  • int WMGetButtonSelected (WMButton *bPtr) + +

    WMButtonType: WBTMomentaryPush, WBTMomentaryChange,WBTMomentaryLight WBTPushOnPushOff, WBTOnOff, WBToggle, WBTSwitch, WBTRadio + +

    Button boxes
    +
      +
    • WMBox * WMCreateBox (WMWidget *parent) +
    • void WMSetBoxBorderWidth (WMBox *box, unsigned width) +
    • void WMSetBoxHorizontal (WMBox *box, Bool flag) +
    • void WMAddBoxSubview (WMBox *bPtr, WMView *view, Bool expand, Bool fill, int minSize, int maxSize, int space) +
    • void WMRemoveBoxSubview (WMBox *bPtr, WMView *view) +
    • void WMAddBoxSubviewAtEnd (WMBox *bPtr, WMView *view, Bool expand, Bool fill, int minSize, int maxSize, int space) +
    +
    Expanding and pull-down buttons
    +A pop-up button shows a list of buttons when it is clicked. Use the WMSetPopUpButtonPullsDown function with boolean true to make it pull down like a menu. When false, the list will shift, and the current item will be under the mouse pointer.WMAction has been described above. To make the list, you create the first Button, and just use WMAddPopUpButtonItem for the next ones. The numbering starts at 0. You do not need to keep pointers to your labels, as there are functions to get the item number, and,with the item number, the label. The action called is the same for the whole menu list. +
      +
    • WMPopUpButton * WMCreatePopUpButton (WMWidget *parent) +
    • WMMenuItem * WMAddPopUpButtonItem (WMPopUpButton *bPtr, char *title) +
    • WMMenuItem * WMInsertPopUpButtonItem (WMPopUpButton *bPtr, int index, char *title) +
    • void WMRemovePopUpButtonItem (WMPopUpButton *bPtr, int index) +
    • void WMSetPopUpButtonAction (WMPopUpButton *bPtr, WMAction *action, void *clientData) +
    • void WMSetPopUpButtonPullsDown (WMPopUpButton *bPtr, Bool flag) +
    • void WMSetPopUpButtonText (WMPopUpButton *bPtr, char *text) + +
    • Bool WMGetPopUpButtonEnabled (WMPopUpButton *bPtr) +
    • char * WMGetPopUpButtonItem (WMPopUpButton *bPtr, int index) +
    • Bool WMGetPopUpButtonItemEnabled (WMPopUpButton *bPtr, int index) +
    • WMMenuItem * WMGetPopUpButtonMenuItem (WMPopUpButton *bPtr, int index) +
    • int WMGetPopUpButtonNumberOfItems (WMPopUpButton *bPtr) +
    • int WMGetPopUpButtonSelectedItem (WMPopUpButton *bPtr) + +
    • void WMSetPopUpButtonEnabled (WMPopUpButton *bPtr, Bool flag) +
    • void WMSetPopUpButtonItemEnabled (WMPopUpButton *bPtr, int index, Bool flag) +
    • void WMSetPopUpButtonSelectedItem (WMPopUpButton *bPtr, int index) + +
    + +
    Text Fields +
    A text field is a widget in which the user can type text. Setting it to secure will show asterisks instead of the typed in characters. +
      + +
    • WMTextField * WMCreateTextField (WMWidget *parent) +
    • void WMDeleteTextFieldRange (WMTextField *tPtr, WMRange range) +
    • void WMSetTextFieldSecure (WMTextField *tPtr, Bool flag) +
    • void WMSetTextFieldText (WMTextField *tPtr, char *text) +
    • char * WMGetTextFieldText (WMTextField *tPtr) +
    • void WMSetTextFieldBordered (WMTextField *tPtr, Bool bordered) +
    • void WMInsertTextFieldText (WMTextField *tPtr, char *text, int position) +
    • void WMSelectTextFieldRange (WMTextField *tPtr, WMRange range) +
    • void WMSetTextFieldAlignment (WMTextField *tPtr, WMAlignment alignment) +
    • void WMSetTextFieldBeveled (WMTextField *tPtr, Bool flag) +
    • void WMSetTextFieldCursorPosition (WMTextField *tPtr, unsigned int position) +
    • void WMSetTextFieldEditable (WMTextField *tPtr, Bool flag) +
    • Bool WMGetTextFieldEditable (WMTextField *tPtr) +
    • void WMSetTextFieldFont (WMTextField *tPtr, WMFont *font) +
    • WMFont * WMGetTextFieldFont (WMTextField *tPtr) +
    • void WMSetTextFieldNextTextField (WMTextField *tPtr, WMTextField *next) +
    • void WMSetTextFieldPrevTextField (WMTextField *tPtr, WMTextField *prev) +
    • WMTextFieldDelegate * WMGetTextFieldDelegate (WMTextField *tPtr) +
    • void WMSetTextFieldDelegate (WMTextField *tPtr, WMTextFieldDelegate *delegate) + +
    + +
    Labels +
    A label displays text in its parent. WRFlat is the relief type which shows the label without a border. WRSunken and WRSimple are other relief types. +
      +
    • WMLabel * WMCreateLabel (WMWidget *parent) +
    • void WMSetLabelRelief (WMLabel *lPtr, WMReliefType relief) +
    • void WMSetLabelText (WMLabel *lPtr, char *text) +
    • void WMSetLabelTextAlignment (WMLabel *lPtr, WMAlignment alignment) +
    • void WMSetLabelTextColor (WMLabel *lPtr, WMColor *color) +
    • void WMSetLabelWraps (WMLabel *lPtr, Bool flag) +
    • void WMSetLabelFont (WMLabel *lPtr, WMFont *font) +
    • void WMSetLabelImage (WMLabel *lPtr, WMPixmap *image) +
    • void WMSetLabelImagePosition (WMLabel *lPtr, WMImagePosition position) +
    • int WMWidthOfString (WMFont *font, char *text, + int length) +
    • int W_GetTextHeight (WMFont *font, char *text, int width, + int wrap) +
    • WMFont * WMGetLabelFont (WMLabel *lPtr) +
    • WMPixmap * WMGetLabelImage (WMLabel *lPtr) +
    • char * WMGetLabelText (WMLabel *lPtr) +
    • char * WMGetTabViewItemLabel (WMTabViewItem *item) +
    + +
    Sliders +

    +The slider's orientation is set by WMResizeWidgeting it. A continuous slider will pass all the values along the way when it is being changed. +
      +
    • WMSlider * WMCreateSlider (WMWidget *parent) +
    • int WMGetSlider[Max|Min[]Value (WMSlider *slider) +
    • void WMSetSliderAction (WMSlider *slider, + WMAction *action, void *data) +
    • void WMSetSliderContinuous (WMSlider *slider, Bool flag) + +
    • void WMSetSlider[Max|Min|]Value (WMSlider *slider, int value) + +
    • void WMSetSliderKnobThickness (WMSlider *sPtr, + int thickness) +
    • void WMSetSliderImage (WMSlider *sPtr, WMPixmap *pixmap) +
    + + +
    Scrollable views
    +This widget can have two scrollbars to navigate the widget inside of it. +
      +
    • WMScrollView * WMCreateScrollView (WMWidget *parent) +
    • void WMSetScrollViewContentView (WMScrollView *sPtr, WMView *view) +
    • void WMSetScrollViewHasHorizontalScroller (WMScrollView *sPtr, Bool flag) +
    • void WMSetScrollViewHasVerticalScroller (WMScrollView *sPtr, Bool flag) +
    • void WMSetScrollViewLineScroll (WMScrollView *sPtr, int amount) +
    • void WMSetScrollViewPageScroll (WMScrollView *sPtr, int amount) +
    • void WMSetScrollViewRelief (WMScrollView *sPtr, WMReliefType type) +
    • void WMResizeScrollViewContent (WMScrollView *sPtr, unsigned int width, unsigned int height) +
    • void WMScrollViewScrollPoint (WMScrollView *sPtr, WMPoint point) +
    • WMScroller * WMGetScrollViewHorizontalScroller (WMScrollView *sPtr) +
    • WMScroller * WMGetScrollViewVerticalScroller (WMScrollView *sPtr) +
    • WMRect WMGetScrollViewVisibleRect (WMScrollView *sPtr) + +
    + +
    Message pop-up windows +

    A message pop-up window is shown by calling: +int WMRunAlertPanel (WMScreen *scrPtr, WMWindow *owner, char *messagetophalf, char *messagebottomhalf, char *defaultButton, char *alternateButton, char *otherButton) +The first argument should be the widget's screen, the second the window we are working in. The last three are labels for three buttons. The default button will return WAPRDefault (0) from the function, if clicked, and is the option selected if the user presses 'enter'. The middle and left button return 1 and -1. Only those buttons are shown whose labels are not NULL. +

      +
    • WMAlertPanel * WMCreateAlertPanel (WMScreen *scrPtr, WMWindow *owner, char *title, char *msg, char *defaultButton, char *alternateButton, char *otherButton) +
    • void WMDestroyAlertPanel (WMAlertPanel *panel) +
    + + +
    Input dialogs +
    A pop up which asks for input, with a cancel and OK button, is provided through the self explanatory function: +char * WMRunInputPanel (WMScreen *screen, WMWindow *owner, char *dialogtitle, char *message,char *defaultText, char *okButtontext, char *cancelButtontext). Cancel returns a null pointer. The defaultText is presented in the text field in the pop-up, and can be changed by the user. +
      +
    • void WMDestroyInputPanel (WMInputPanel *panel) +
    • WMInputPanel * WMCreateInputPanel (WMScreen *scrPtr, WMWindow *owner, char *title, char *msg, char *defaultText, char *okButton, char *cancelButton) +
    + +
    File selection dialogs
    +File selector and file saving dialogs can be called from the WINGs library rightaway. The file selector window allows the user to browse the file system, open a file, and to delete or create a file or directory. To use it, there are three functions: +
    • WMOpenPanel * WMGetOpenPanel (WMScreen *screen) +
    • int WMRunModalFilePanelForDirectory (WMFilePanel *panel, WMWindow *owner,char *initialpath,char *title, char **fileTypes) +
    • char * WMGetFilePanelFileName (WMFilePanel *panel) +
    • WMSavePanel * WMGetSavePanel (WMScreen *screen) +
    • void WMSetFilePanelAccessoryView (WMFilePanel *panel, WMView *view) +
    • void WMSetFilePanelAutoCompletion (WMFilePanel *panel, Bool flag) +
    • void WMSetFilePanelCanChooseDirectories (WMFilePanel *panel, Bool flag) +
    • void WMSetFilePanelCanChooseFiles (WMFilePanel *panel, Bool flag) +
    • void WMSetFilePanelDirectory (WMFilePanel *panel, char *path)
    • WMView * WMGetFilePanelAccessoryView (WMFilePanel *panel) +
    • void WMFreeFilePanel (WMFilePanel *panel) +
    +

    +To open files there is a struct WMOpenPanel, to close them WMSavePanel. As for the WMView, we take the nature of the Panel as given for now. We just open a pointer to one on the screen we have opened. To open files, the WMOpenPanel pointer is passed to the function WMRunModalFilePanelForDirectory, which makes the file selector pop up. The owner can be set to NULL. initialpath is a string containing the starting directory name. The title is the dialog's title. The dialog has cancel and OK buttons, which make the function return False and True respectively. If True, the selected file name can be retrieved with WMGetFilePanelFileName (WMFilePanel *panel). To save files, exactly the same functions are used, with the only difference that you pass a pointer to a WMSavePanel. + +

    Text Areas
    +FreezeText and thaw before and after appending will make the appended text appear immediately. +
    • WMText *WMCreateText(WMWidget *parent) +
    • WMText * WMCreateTextForDocumentType (WMWidget *parent, WMAction *parser, WMAction *writer) +
    • void WMAppendTextBlock (WMText *tPtr, void *vtb) +
    • void WMAppendTextStream (WMText *tPtr, char *text) +
    • void WMFreezeText (WMText *tPtr) +
    • void WMThawText (WMText *tPtr) +
    • char * WMGetTextStream (WMText *tPtr) +
    • void WMPrependTextBlock (WMText *tPtr, void *vtb) +
    • void WMPrependTextStream (WMText *tPtr, char *text) +
    • void * WMRemoveTextBlock (WMText *tPtr) +
    • Bool WMReplaceTextSelection (WMText *tPtr, char *replacement) +
    • Bool WMScrollText (WMText *tPtr, int amount) +
    • void WMShowTextRuler (WMText *tPtr, Bool show) +
    • Bool WMFindInTextStream (WMText *tPtr, char *needle, Bool direction, Bool caseSensitive) +
    • Bool WMPageText (WMText *tPtr, Bool direction) + + +
    • void WMSetTextHasHorizontalScroller (WMText *tPtr, Bool shouldhave) +
    • void WMSetTextHasRuler (WMText *tPtr, Bool shouldhave) +
    • void WMSetTextHasVerticalScroller (WMText *tPtr, Bool shouldhave) +
    • void WMSetTextAlignment (WMText *tPtr, WMAlignment alignment) +
    • void WMSetTextBackgroundColor (WMText *tPtr, WMColor *color) +
    • void WMSetTextBackgroundPixmap (WMText *tPtr, WMPixmap *pixmap) +
    • void WMSetTextBlockProperties (WMText *tPtr, void *vtb, unsigned int first, unsigned int kanji, unsigned int underlined, int script, WMRulerMargins *margins) +
    • void WMSetTextDefaultColor (WMText *tPtr, WMColor *color) +
    • void WMSetTextDefaultFont (WMText *tPtr, WMFont *font) +
    • void WMSetTextDelegate (WMText *tPtr, WMTextDelegate *delegate) +
    • void WMSetTextEditable (WMText *tPtr, Bool editable) +
    • void WMSetTextForegroundColor (WMText *tPtr, WMColor *color) +
    • void WMSetTextIgnoresNewline (WMText *tPtr, Bool ignore) +
    • void WMSetTextIndentNewLines (WMText *tPtr, Bool indent) +
    • void WMSetTextRelief (WMText *tPtr, WMReliefType relief) +
    • void WMSetTextSelectionColor (WMText *tPtr, WMColor *color) +
    • void WMSetTextSelectionFont (WMText *tPtr, WMFont *font) +
    • void WMSetTextSelectionUnderlined (WMText *tPtr, int underlined) +
    • void WMSetTextUsesMonoFont (WMText *tPtr, Bool mono) + +
    • WMColor * WMGetTextDefaultColor (WMText *tPtr) +
    • WMFont * WMGetTextDefaultFont (WMText *tPtr) +
    • int WMGetTextEditable (WMText *tPtr) +
    • Bool WMGetTextIgnoresNewline (WMText *tPtr) +
    • int WMGetTextInsertType (WMText *tPtr) +
    • WMArray * WMGetTextObjects (WMText *tPtr) +
    • Bool WMGetTextRulerShown (WMText *tPtr) +
    • WMArray * WMGetTextSelectedObjects (WMText *tPtr) +
    • char * WMGetTextSelectedStream (WMText *tPtr) +
    • WMColor * WMGetTextSelectionColor (WMText *tPtr) +
    • WMFont * WMGetTextSelectionFont (WMText *tPtr) +
    • int WMGetTextSelectionUnderlined (WMText *tPtr) +
    • Bool WMGetTextUsesMonoFont (WMText *tPtr) +
    +
      +
    • void * WMCreateTextBlockWithObject (WMText *tPtr, WMWidget *w, char *description, WMColor *color, unsigned short first, unsigned short extraInfo) +
    • void * WMCreateTextBlockWithPixmap (WMText *tPtr, WMPixmap *p, char *description, WMColor *color, unsigned short first, unsigned short extraInfo) +
    • void * WMCreateTextBlockWithText (WMText *tPtr, char *text, WMFont *font, WMColor *color, unsigned short first, unsigned short len) +
    • void WMDestroyTextBlock (WMText *tPtr, void *vtb) +
    • void WMGetTextBlockProperties (WMText *tPtr, void *vtb, unsigned int *first, unsigned int *kanji, unsigned int *underlined, int *script, WMRulerMargins *margins) +
    + +
    Split windows/views
    +
      +
    • WMSplitView * WMCreateSplitView (WMWidget *parent) +
    • void WMAddSplitViewSubview (WMSplitView *sPtr, WMView *subview) +
    • void WMAdjustSplitViewSubviews (WMSplitView *sPtr) +
    • void WMRemoveSplitViewSubview (WMSplitView *sPtr, WMView *view) +
    • void WMRemoveSplitViewSubviewAt (WMSplitView *sPtr, int index) +
    • void WMSetSplitViewConstrainProc (WMSplitView *sPtr, WMSplitViewConstrainProc *proc) +
    • void WMSetSplitViewVertical (WMSplitView *sPtr, Bool flag) +
    • int WMGetSplitViewDividerThickness (WMSplitView *sPtr) +
    • WMView * WMGetSplitViewSubviewAt (WMSplitView *sPtr, int index) +
    • int WMGetSplitViewSubviewsCount (WMSplitView *sPtr) +
    • Bool WMGetSplitViewVertical (WMSplitView *sPtr) + + +
    + + +
    lists and Property Lists
    +

    WMListItem has a member .text, which contains the string added to the list with WMAddListItem. When making a (multiple) selection in the view, the items are added in a WMArray in the order they have been clicked. The WMArray is a dynamic array with functions to retrieve its elements, or the number of elements. WMList provides a WMListSelectionDidChangeNotification event. Sample code using WMAddNotificationObserver to add a function which handles all the selection events: + +

    /* global*/
    +static void listSelectionObserver(void *observer, WMNotification *notification){
    +WMList *lPtr = (WMList*)WMGetNotificationObject(notification);
    +WMListItem *item;
    +int i;
    +
    + item =  WMGetFromArray(WMGetListSelectedItems(lPtr),0);  /* 1st selected item */
    + i= WMGetArrayItemCount(WMGetListSelectedItems(lPtr)));   /* number of items   */
    +    
    +     /* do something */
    +}
    +  
    +     /* in main :    */
    +
    +WMList *list;
    +int i;
    +char text[100];
    +
    + list = WMCreateList(window);
    + WMSetListAllowMultipleSelection(list, True);
    + for (i=0; i<20; i++) {
    +     sprintf(text, "20 times same item");
    +     WMAddListItem(list, text);
    + }
    + WMAddNotificationObserver(listSelectionObserver, NULL/*(observer)*/,
    +                              WMListSelectionDidChangeNotification, list);
    + WMMapSubwidgets(window);
    +}
    +
    +WMSetList[Double]Action specifies a WMAction to do, when a list item is [double]clicked, e.g. +
    static void doubleClick(WMWidget *self, void *data){
    +    WMSelectAllListItems((WMList*)self);
    +}
    + + +

    Functions: + +

      +
    • WMList * WMCreateList (WMWidget *parent) +
    • void WMClearList (WMList *lPtr) +
    • WMListItem * WMInsertListItem (WMList *lPtr, int row, char *text) +
    • void WMSelectAllListItems (WMList *lPtr) +
    • void WMSelectListItem (WMList *lPtr, int row) +
    • void WMSelectListItemsInRange (WMList *lPtr, WMRange range) +
    • void WMRemoveListItem (WMList *lPtr, int row) +
    • void WMSortListItems (WMList *lPtr) +
    • void WMSortListItemsWithComparer (WMList *lPtr, WMCompareDataProc *func) +
    • WMListItem * WMGetListItem (WMList *lPtr, int row) +
    • int WMGetListItemHeight (WMList *lPtr) +
    • WMArray * WMGetListItems (WMList *lPtr) +
    • int WMGetListNumberOfRows (WMList *lPtr) +
    • int WMGetListPosition (WMList *lPtr) +
    • WMListItem * WMGetListSelectedItem (WMList *lPtr) +
    • int WMGetListSelectedItemRow (WMList *lPtr) +
    • WMArray * WMGetListSelectedItems (WMList *lPtr) + +
    • int WMFindRowOfListItemWithTitle (WMList *lPtr, char *title) +
    • Bool WMListAllowsEmptySelection (WMList *lPtr) +
    • Bool WMListAllowsMultipleSelection (WMList *lPtr) +
    • void WMSetListAction (WMList *lPtr, WMAction *action, void *clientData) +
    • void WMSetListAllowEmptySelection (WMList *lPtr, Bool flag) +
    • void WMSetListAllowMultipleSelection (WMList *lPtr, Bool flag) +
    • void WMSetListBottomPosition (WMList *lPtr, int row) +
    • void WMSetListDoubleAction (WMList *lPtr, WMAction *action, void *clientData) +
    • void WMSetListPosition (WMList *lPtr, int row) +
    • void WMSetListSelectionToRange (WMList *lPtr, WMRange range) +
    • void WMSetListUserDrawItemHeight (WMList *lPtr, unsigned short height) +
    • void WMSetListUserDrawProc (WMList *lPtr, WMListDrawProc *proc) +
    • void WMUnselectAllListItems (WMList *lPtr) +
    • void WMUnselectListItem (WMList *lPtr, int row) + +
    +
      +
    • WMPropList * WMCreatePropListFromDescription (char *desc) +
    • WMPropList * WMDeepCopyPropList (WMPropList *plist) +
    • char * WMGetPropListDescription (WMPropList *plist, Bool indented) +
    • int WMGetPropListItemCount (WMPropList *plist) +
    • Bool WMIsPropListEqualTo (WMPropList *plist, WMPropList *other) +
    • WMPropList * WMReadPropListFromFile (char *file) +
    • void WMReleasePropList (WMPropList *plist) +
    • WMPropList * WMRetainPropList (WMPropList *plist) +
    • WMPropList * WMShallowCopyPropList (WMPropList *plist) +
    • Bool WMWritePropListToFile (WMPropList *plist, char *path, Bool atomically) + +
    • void WMPLSetCaseSensitive (Bool caseSensitiveness) + +
    + + +
    Colour Panels

    +
      +
    • WMColorPanel * WMGetColorPanel (WMScreen *scrPtr) +
    • void WMCloseColorPanel (WMColorPanel *panel) +
    • void WMFreeColorPanel (WMColorPanel *panel) +
    • WMColor * WMGetColorPanelColor (WMColorPanel *panel) +
    • void WMSetColorPanelAction (WMColorPanel *panel, WMAction2 *action, void *data) +
    • void WMSetColorPanelColor (WMColorPanel *panel, WMColor *color) +
    • void WMSetColorPanelPickerMode (WMColorPanel *panel, WMColorPanelMode mode) +
    • void WMShowColorPanel (WMColorPanel *panel) +
    + +
    Font Panel

    +
      + +
    • WMFontPanel * WMGetFontPanel (WMScreen *scr) +
    • WMFont * WMGetFontPanelFont (WMFontPanel *panel) +
    • char * WMGetFontPanelFontName (WMFontPanel *panel) +
    • void WMHideFontPanel (WMFontPanel *panel) +
    • void WMSetFontPanelAction (WMFontPanel *panel, WMAction2 *action, void *data) +
    • void WMSetFontPanelFont (WMFontPanel *panel, WMFont *font) +
    • Bool WMSetFontPanelFontName (WMFontPanel *panel, char *fontName) +
    • void WMShowFontPanel (WMFontPanel *panel) +
    • void WMFreeFontPanel (WMFontPanel *panel) + +
    + +
    Tabbed views
    +

    The label on the tab itself should not be empty, or the tab won't be clickable. The view in the tab takes the view of the inserted widget. A frame expands to the tabbed view it is in. The widgets which go into the tabbed views should have the same parent as the whole TabView widget. Sample code for a TabView containing two tabs, the first with a frame, the second with a label: +

    
    +/* WMWindow *window created */
    +int x,y, Width, Height;
    +WMFrame *frame;
    +WMLabel *label;
    +WMTabView *tabview;
    +WMTabViewItem *tab;
    +
    + tabview = WMCreateTabView(window);
    + WMMoveWidget(tabview, x, y);
    + WMResizeWidget(tabview, Width, Height);
    +  
    + frame = WMCreateFrame(window);
    + tab = WMCreateTabViewItemWithIdentifier(0);
    + WMSetTabViewItemView(tab, WMWidgetView(frame));
    + WMAddItemInTabView(tabview, tab);
    + WMSetTabViewItemLabel(tab, "1");
    +
    + label = WMCreateLabel(window);
    + WMSetLabelText(label, "Text in View");
    + WMMapWidget(label);
    + tab = WMCreateTabViewItemWithIdentifier(0);
    + WMSetTabViewItemView(tab, WMWidgetView(label));
    + WMAddItemInTabView(tabview, tab);
    + WMSetTabViewItemLabel(tab, "tab 2"); 
    +
    + WMMapSubwidgets(window);
    +
    + + +
      +
    • WMTabView * WMCreateTabView (WMWidget *parent) +
    • WMTabViewItem * WMCreateTabViewItem (int identifier, char *label) +
    • WMTabViewItem * WMCreateTabViewItemWithIdentifier (int identifier) +
    • void WMDestroyTabViewItem (WMTabViewItem *item) +
    • void WMAddItemInTabView (WMTabView *tPtr, WMTabViewItem *item) +
    • WMTabViewItem * WMAddTabViewItemWithView (WMTabView *tPtr, WMView *view, int identifier, char *label) +
    • void WMInsertItemInTabView (WMTabView *tPtr, int index, WMTabViewItem *item) +
    • void WMRemoveTabViewItem (WMTabView *tPtr, WMTabViewItem *item) +
    • void WMSetTabViewItemView (WMTabViewItem *item, WMView *view)
    • WMTabViewItem * WMGetSelectedTabViewItem (WMTabView *tPtr) +
    • int WMGetTabViewItemIdentifier (WMTabViewItem *item) +
    • char * WMGetTabViewItemLabel (WMTabViewItem *item) +
    • WMView * WMGetTabViewItemView (WMTabViewItem *item) +
    • void WMSelectFirstTabViewItem (WMTabView *tPtr) +
    • void WMSelectLastTabViewItem (WMTabView *tPtr) +
    • void WMSelectNextTabViewItem (WMTabView *tPtr) +
    • void WMSelectPreviousTabViewItem (WMTabView *tPtr) +
    • void WMSelectTabViewItem (WMTabView *tPtr, WMTabViewItem *item) +
    • void WMSelectTabViewItemAtIndex (WMTabView *tPtr, int index) +
    • void WMSetTabViewDelegate (WMTabView *tPtr, WMTabViewDelegate *delegate) +
    • void WMSetTabViewEnabled (WMTabView *tPtr, Bool flag) +
    • void WMSetTabViewFont (WMTabView *tPtr, WMFont *font) +
    • void WMSetTabViewItemEnabled (WMTabViewItem *tPtr, Bool flag) +
    • void WMSetTabViewItemLabel (WMTabViewItem *item, char *label) + +
    • void WMSetTabViewType (WMTabView *tPtr, WMTabViewType type) +
    • WMTabViewItem * WMTabViewItemAtPoint (WMTabView *tPtr, int x, int y) + +
    + +
    Progress Indicators
    +
      + +
    • WMProgressIndicator * WMCreateProgressIndicator (WMWidget *parent) +
    • int WMGetProgressIndicatorMaxValue (WMProgressIndicator *progressindicator) +
    • int WMGetProgressIndicatorMinValue (WMProgressIndicator *progressindicator) +
    • int WMGetProgressIndicatorValue (WMProgressIndicator *progressindicator) +
    • void WMSetProgressIndicatorMaxValue (WMProgressIndicator *progressindicator, int value) +
    • void WMSetProgressIndicatorMinValue (WMProgressIndicator *progressindicator, int value) +
    • void WMSetProgressIndicatorValue (WMProgressIndicator *progressindicator, int value) +
    + +
    Event handlers
    +
      +
    • void WMCreateEventHandler (WMView *view, unsigned long mask, WMEventProc *eventProc, void *clientData) +
    • void WMDeleteEventHandler (WMView *view, unsigned long mask, WMEventProc *eventProc, void *clientData) +
    • int WMHandleEvent (XEvent *event) +
    • WMEventHook * WMHookEventHandler (WMEventHook *handler) +
    • void WMMaskEvent (Display *dpy, long mask, XEvent *event) +
    • void WMNextEvent (Display *dpy, XEvent *event) +
    +
      +
    • int XPending(Display *display) +
    +is a function in libXlib. It returns the number of events in the queue, if needed, after flushing the events buffer. If there are any, WMNextEvent can be called, and next WMHandleEvent. + +
    Selections
    +
      +
    • Bool WMCreateSelectionHandler (WMView *view, Atom selection, Time timestamp, WMSelectionProcs *procs, void *cdata) +
    • void WMDeleteSelectionCallback (WMView *view, Atom selection, Time timestamp) +
    • void WMDeleteSelectionHandler (WMView *view, Atom selection, Time timestamp) +
    • Bool WMRequestSelection (WMView *view, Atom selection, Atom target, Time timestamp, WMSelectionCallback *callback, void *cdata) + +
    +
    Screens
    +
      + +
    • WMScreen * WMCreateScreen (Display *display, int screen) +
    • WMScreen * WMCreateScreenWithRContext (Display *display, int screen, RContext *context) +
    • WMScreen * WMCreateSimpleApplicationScreen (Display *display) +
    • WMScreen * WMOpenScreen (const char *display) +
    • WMPoint WMGetViewScreenPosition (WMView *view) +
    • int WMScreenDepth (WMScreen *scr) +
    • Display * WMScreenDisplay (WMScreen *scr) +
    • unsigned int WMScreenHeight (WMScreen *scr) +
    • RContext * WMScreenRContext (WMScreen *scr) +
    • unsigned int WMScreenWidth (WMScreen *scr) +
    • void WMScreenMainLoop (WMScreen *scr) +
    • Bool WMScreenPending (WMScreen *scr) +
    + + +
    Image functions
    + + +
      +
    • RImage * WMGetApplicationIconImage (WMScreen *scr) +
    • WMColor * WMWhiteColor (WMScreen *scr) +
    • WMColor * WMCreateNamedColor (WMScreen *scr, char *name, + Bool exact) +
    • RImage * RCreateImageFromXImage (RContext *context, + XImage *image, + XImage *mask) +
    • RImage * RCreateImage (unsigned width, unsigned height, + int alpha) + +
    • RImage * RGetImageFromXPMData (RContext *context, + char **data) +
    • RImage * RLoadXPM (RContext *context, char *file, + int index) + +
    • RContext * RCreateContext (Display *dpy, + int screen_number, + RContextAttributes *attribs) +
    • RContext * WMScreenRContext (WMScreen *scr) +
    • WMPixmap * WMCreateBlendedPixmapFromFile (WMScreen *scrPtr, char *fileName, RColor *color) +
    • WMPixmap * WMCreateBlendedPixmapFromRImage (WMScreen *scrPtr, RImage *image, RColor *color) +
    • WMPixmap * WMCreatePixmap (WMScreen *scrPtr, int width, int height, int depth, Bool masked) +
    • WMPixmap * WMCreatePixmapFromFile (WMScreen *scrPtr, char *fileName) +
    • WMPixmap * WMCreatePixmapFromRImage (WMScreen *scrPtr, RImage *image, int threshold) +
    • WMPixmap * WMCreatePixmapFromXPMData (WMScreen *scrPtr, char **data) +
    • WMPixmap * WMCreatePixmapFromXPixmaps (WMScreen *scrPtr, Pixmap pixmap, Pixmap mask, int width, int height, int depth) +
    • void WMDrawPixmap (WMPixmap *pixmap, Drawable d, int x, int y) +
    • Pixmap WMGetPixmapMaskXID (WMPixmap *pixmap) +
    • WMSize WMGetPixmapSize (WMPixmap *pixmap) +
    • Pixmap WMGetPixmapXID (WMPixmap *pixmap) +
    • WMPixmap * WMGetSystemPixmap (WMScreen *scr, int image) +
    • void WMReleasePixmap (WMPixmap *pixmap) +
    • WMPixmap * WMRetainPixmap (WMPixmap *pixmap) + +
    + +
    Application wide functions
    + +
      +
    • void WMInitializeApplication (char *applicationName, int *argc, char **argv) +
    • char * WMGetApplicationName () +
    • void WMSetApplicationHasAppIcon (WMScreen *scr, Bool flag) +
    • void WMSetApplicationIconImage (WMScreen *scr, RImage *image) +
    • void WMSetApplicationIconPixmap (WMScreen *scr, WMPixmap *icon) +
    +
      +
    • void WMSetApplicationIconWindow (WMScreen *scr, Window window) +
    • WMPixmap * WMCreateApplicationIconBlendedPixmap (WMScreen *scr, RColor *color) +
    • RImage * WMGetApplicationIconImage (WMScreen *scr) +
    • WMPixmap * WMGetApplicationIconPixmap (WMScreen *scr) +
    +
    + +
    Notifications
    +

    A typical sequence to have a window handle messages which come from some widget, is: +
    (global) +const char *WMRequestName="AnyName";
    +At the point (in some widget function) where another window (widget) should act on the notification, put: +
    WMPostNotificationName(WMRequestName, self, NULL);
    +This call will put the notification in a queue. +

    In the WMNotificationObserverAction(void *self,WMNotification notif), with name "notificationHandler", put +
    if(!strcmp(WMRequestName,WMGetNotificationName(notif))){do something}
    +This will do something if the incoming notification is one with the right name. To put it to work by a widget "window", do: +
    + WMAddNotificationObserver(notificationHandler, window, WMRequestName, object)
    +Arguments "window" and "object", and also the notification name, can be NULL. +The last argument (object) to the WMAddNotificationObserver function selects an object where the notification is allowed to come from. To handle all incoming notifications with the right name, set this to NULL +

      +
    • void WMAddNotificationObserver (WMNotificationObserverAction *observerAction, void *observer, const char *name, void *object) +
    • WMNotification * WMCreateNotification (const char *name, void *object, void *clientData) +
    • WMNotificationQueue * WMCreateNotificationQueue (void ) +
    • void WMPostNotification (WMNotification *notification) +
    • void WMPostNotificationName (const char *name, void *object, void *clientData) +
    • void * WMGetNotificationClientData (WMNotification *notification) +
    • const char * WMGetNotificationName (WMNotification *notification) +
    • void * WMGetNotificationObject (WMNotification *notification) +
    • void WMEnqueueNotification (WMNotificationQueue *queue, WMNotification *notification, WMPostingStyle postingStyle) +
    • void WMDequeueNotificationMatching (WMNotificationQueue *queue, WMNotification *notification, unsigned mask) +
    • void WMEnqueueCoalesceNotification (WMNotificationQueue *queue, WMNotification *notification, WMPostingStyle postingStyle, unsigned coalesceMask) +
    • WMNotificationQueue * WMGetDefaultNotificationQueue (void ) +
    • void WMReleaseNotification (WMNotification *notification) +
    • void WMRemoveNotificationObserver (void *observer) +
    • void WMRemoveNotificationObserverWithName (void *observer, const char *name, void *object) +
    • WMNotification * WMRetainNotification (WMNotification *notification) +
    • void WMSetViewNotifySizeChanges (WMView *view, Bool flag) +
    + +
    Text balloons
    +
      +
    • void WMSetBalloonEnabled (WMScreen *scr, Bool flag) +
    • void WMSetBalloonDelay (WMScreen *scr, int delay) +
    • void WMSetBalloonFont (WMScreen *scr, WMFont *font) +
    • void WMSetBalloonTextAlignment (WMScreen *scr, WMAlignment alignment) +
    • void WMSetBalloonTextColor (WMScreen *scr, WMColor *color) +
    • void WMSetBalloonTextForView (char *text, WMView *view) +
    • W_Balloon * W_CreateBalloon (WMScreen *scr) +
    • void W_BalloonHandle[Enter|Leave]View (WMView *view) +
    + +
    Drag/drop functions
    +

    +

      +
    • void WMDragImageFromView (WMView *view, WMPixmap *image, char *dataTypes, WMPoint atLocation, WMSize mouseOffset, XEvent *event, Bool slideBack) +
    • WMPoint WMGetDraggingInfoImageLocation (WMDraggingInfo *info) +
    • void WMRegisterViewForDraggedTypes (WMView *view, char *acceptedTypes) +
    • void WMSetViewDragDestinationProcs (WMView *view, WMDragDestinationProcs *procs) +
    • void WMSetViewDragSourceProcs (WMView *view, WMDragSourceProcs *procs) +
    • void WMUnregisterViewDraggedTypes (WMView *view) +
    • Bool WMRequestDroppedData (WMView *view, WMDraggingInfo *info, char *type, WMDropDataCallback *callback) + +
    + +
    Network connection
    +
      + +
    • WMConnection * WMCreateConnectionAsServerAtAddress (char *host, char *service, char *protocol) +
    • WMConnection * WMCreateConnectionToAddress (char *host, char *service, char *protocol) +
    • WMConnection * WMCreateConnectionToAddressAndNotify (char *host, char *service, char *protocol) +
    • WMConnection * WMAcceptConnection (WMConnection *listener) +
    • void WMCloseConnection (WMConnection *cPtr) +
    • void WMDestroyConnection (WMConnection *cPtr) +
    • void WMSetConnectionClientData (WMConnection *cPtr, void *data) +
    • Bool WMSetConnectionCloseOnExec (WMConnection *cPtr, Bool flag) +
    • void WMSetConnectionDefaultTimeout (unsigned int timeout) +
    • void WMSetConnectionDelegate (WMConnection *cPtr, ConnectionDelegate *delegate) +
    • void WMSetConnectionFlags (WMConnection *cPtr, unsigned int flags) +
    • Bool WMSetConnectionNonBlocking (WMConnection *cPtr, Bool flag) +
    • void WMSetConnectionOpenTimeout (unsigned int timeout) +
    • void WMSetConnectionSendTimeout (WMConnection *cPtr, unsigned int timeout) +
    • void WMSetConnectionShutdownOnClose (WMConnection *cPtr, Bool flag) +
    • Bool WMEnqueueConnectionData (WMConnection *cPtr, WMData *data) +
    • char * WMGetConnectionAddress (WMConnection *cPtr) +
    • WMData * WMGetConnectionAvailableData (WMConnection *cPtr) +
    • void * WMGetConnectionClientData (WMConnection *cPtr) +
    • unsigned int WMGetConnectionFlags (WMConnection *cPtr) +
    • char * WMGetConnectionProtocol (WMConnection *cPtr) +
    • char * WMGetConnectionService (WMConnection *cPtr) +
    • int WMGetConnectionSocket (WMConnection *cPtr) +
    • WMConnectionState WMGetConnectionState (WMConnection *cPtr) +
    • WMConnectionTimeoutState WMGetConnectionTimeoutState (WMConnection *cPtr) +
    • WMArray * WMGetConnectionUnsentData (WMConnection *cPtr) +
    • int WMSendConnectionData (WMConnection *cPtr, WMData *data) +
    + +
    Draw functions
    +
      +
    • RContext * RCreateContext (Display *dpy, int screen_number, RContextAttributes *attribs) +
    • GC WMColorGC (WMColor *color) +
    • RImage * RCreateImage (unsigned width, unsigned height, int alpha) +
    • RImage * RCreateImageFromDrawable (RContext *context, Drawable drawable, Pixmap mask) +
    • RImage * RCreateImageFromXImage (RContext *context, XImage *image, XImage *mask) +
    • RXImage * RCreateXImage (RContext *context, int depth, unsigned width, unsigned height) +
    • void RDestroyXImage (RContext *context, RXImage *rximage) +
    • void RBevelImage (RImage *image, int bevel_type) +
    • int RBlurImage (RImage *image) +
    • void RClearImage (RImage *image, RColor *color) +
    • RImage * RCloneImage (RImage *image) +
    • int RDrawLine (RImage *image, int x0, int y0, int x1, int y1, RColor *color) +
    • void RDrawLines (RImage *image, RPoint *points, int npoints, int mode, RColor *color) +
    • void RDrawSegments (RImage *image, RSegment *segs, int nsegs, RColor *color) +
    • void RFillImage (RImage *image, RColor *color) +
    • void RCombineArea (RImage *image, RImage *src, int sx, int sy, unsigned width, unsigned height, int dx, int dy) +
    • void RCombineAreaWithOpaqueness (RImage *image, RImage *src, int sx, int sy, unsigned width, unsigned height, int dx, int dy, int opaqueness) +
    • void RCombineImageWithColor (RImage *image, RColor *color) +
    • void RCombineImages (RImage *image, RImage *src) +
    • void RCombineImagesWithOpaqueness (RImage *image, RImage *src, int opaqueness) +
    • int RConvertImage (RContext *context, RImage *image, Pixmap *pixmap) +
    • int RConvertImageMask (RContext *context, RImage *image, Pixmap *pixmap, Pixmap *mask, int threshold) +
    • Bool RGetClosestXColor (RContext *context, RColor *color, XColor *retColor) +
    • char * RGetImageFileFormat (char *file) +
    • RImage * RGetImageFromXPMData (RContext *context, char **data) +
    • Bool RGetPixel (RImage *image, int x, int y, RColor *color) +
    • RImage * RGetSubImage (RImage *image, int x, int y, unsigned width, unsigned height) +
    • RXImage * RGetXImage (RContext *context, Drawable d, int x, int y, unsigned width, unsigned height) +
    • void RHSVtoRGB (RHSVColor *hsv, RColor *rgb) +
    • RImage * RLoadImage (RContext *context, char *file, int index) +
    • RImage * RLoadPPM (RContext *context, char *file_name, int index) +
    • RImage * RLoadXPM (RContext *context, char *file, int index) +
    • RImage * RMakeCenteredImage (RImage *image, unsigned width, unsigned height, RColor *color) +
    • RImage * RMakeTiledImage (RImage *tile, unsigned width, unsigned height) +
    • const char * RMessageForError (int errorCode) +
    • int ROperateLine (RImage *image, int operation, int x0, int y0, int x1, int y1, RColor *color) +
    • void ROperateLines (RImage *image, int operation, RPoint *points, int npoints, int mode, RColor *color) +
    • void ROperatePixel (RImage *image, int operation, int x, int y, RColor *color) +
    • void ROperatePixels (RImage *image, int operation, RPoint *points, int npoints, int mode, RColor *color) +
    • void ROperateSegments (RImage *image, int operation, RSegment *segs, int nsegs, RColor *color) +
    • void RPutPixel (RImage *image, int x, int y, RColor *color) +
    • void RPutPixels (RImage *image, RPoint *points, int npoints, int mode, RColor *color) +
    • void RPutXImage (RContext *context, Drawable d, GC gc, RXImage *ximage, int src_x, int src_y, int dest_x, int dest_y, unsigned int width, unsigned int height) +
    • void RRGBtoHSV (RColor *rgb, RHSVColor *hsv) +
    • void RReleaseImage (RImage *image) +
    • RImage * RRenderGradient (unsigned width, unsigned height, RColor *from, RColor *to, int style) +
    • RImage * RRenderInterwovenGradient (unsigned width, unsigned height, RColor colors1, int thickness1, RColor colors2, int thickness2) +
    • RImage * RRenderMultiGradient (unsigned width, unsigned height, RColor **colors, int style) +
    • RImage * RRetainImage (RImage *image) +
    • RImage * RRotateImage (RImage *image, float angle) +
    • Bool RSaveImage (RImage *image, char *filename, char *format) +
    • Bool RSaveXPM (RImage *image, char *filename) +
    • RImage * RScaleImage (RImage *image, unsigned new_width, unsigned new_height) +
    • RImage * RSmoothScaleImage (RImage *src, unsigned new_width, unsigned new_height) +
    • char ** RSupportedFileFormats (void )
    • RColor ulongToRColor (WMScreen *scr, unsigned long value) +
    • RColor WMGetRColorFromColor(WMColor *color) +
    • RColor col = {0xae,0xaa,0xae,0xff} +
    + +
      Other used graphics functions which are not libWINGs/libwraster: +
    • Status XmuCreateColormap (dpy , colormap ) +
    • void XmuDeleteStandardColormap (dpy , screen , property ) +
    • Status XmuGetColormapAllocation (vinfo , property , red_max , green_max , blue_max ) +
    • Status XmuLookupStandardColormap (dpy , screen , visualid , depth , property , replace , retain ) +
    • XStandardColormap * XmuStandardColormap (dpy , screen , visualid , depth , property , cmap , red_max , green_max , blue_max ) +
    • int XDrawRectangle(Display *display, Drawable d, GC gc, + int x, int y, unsigned int width, unsigned int + height)
    • + int XDrawLines(Display *display, Drawable d, GC gc, XPoint + *points, int npoints, int mode)
    • + + int XDrawSegments(Display *display, Drawable d, GC gc, + XSegment *segments, int nsegments)
    • + + int XDrawArc(Display *display, Drawable d, GC gc, int x, + int y, unsigned int width, unsigned int height, int + angle1, int angle2)
    • + int XDrawArcs(Display *display, Drawable d, GC gc, XArc + *arcs, int narcs)
    • + int XDrawPoint(Display *display, Drawable d, GC gc, int x, + int y)
    • + + int XDrawPoints(Display *display, Drawable d, GC gc, + XPoint *points, int npoints, int mode)
    • + + GC XCreateGC(Display *display, Drawable d, unsigned long + valuemask, XGCValues *values)
    • + int XFillArc(Display *display, Drawable d, GC gc, int x, + int y, unsigned int width, unsigned int height, int + angle1, int angle2)
    • + int XFillPolygon(Display *display, Drawable d, GC gc, + XPoint *points, int npoints, int shape, int mode)
    • + + + typedef struct { + short x1, y1, x2, y2; + } XSegment
    • + + typedef struct { + short x, y; + } XPoint
    • + + + typedef struct { + short x, y; + unsigned short width, height; + short angle1, angle2; /* Degrees * 64 */ + } XArc + + +
    + +
    Browser functions
    +
      +
    • WMBrowser * WMCreateBrowser (WMWidget *parent) +
    • int WMAddBrowserColumn (WMBrowser *bPtr) +
    • Bool WMBrowserAllowsEmptySelection (WMBrowser *bPtr) +
    • Bool WMBrowserAllowsMultipleSelection (WMBrowser *bPtr) +
    • void WMSetBrowserAction (WMBrowser *bPtr, WMAction *action, void *clientData) +
    • void WMSetBrowserAllowEmptySelection (WMBrowser *bPtr, Bool flag) +
    • void WMSetBrowserAllowMultipleSelection (WMBrowser *bPtr, Bool flag) +
    • void WMSetBrowserColumnTitle (WMBrowser *bPtr, int column, char *title) +
    • void WMSetBrowserDelegate (WMBrowser *bPtr, WMBrowserDelegate *delegate) +
    • void WMSetBrowserDoubleAction (WMBrowser *bPtr, WMAction *action, void *clientData) +
    • void WMSetBrowserHasScroller (WMBrowser *bPtr, int hasScroller) +
    • void WMSetBrowserMaxVisibleColumns (WMBrowser *bPtr, int columns) +
    • char * WMSetBrowserPath (WMBrowser *bPtr, char *path) +
    • void WMSetBrowserPathSeparator (WMBrowser *bPtr, char *separator) +
    • void WMSetBrowserTitled (WMBrowser *bPtr, Bool flag) +
    • void WMSortBrowserColumn (WMBrowser *bPtr, int column) +
    • void WMSortBrowserColumnWithComparer (WMBrowser *bPtr, int column, WMCompareDataProc *func) +
    • int WMGetBrowserFirstVisibleColumn (WMBrowser *bPtr) +
    • WMList * WMGetBrowserListInColumn (WMBrowser *bPtr, int column) +
    • int WMGetBrowserMaxVisibleColumns (WMBrowser *bPtr) +
    • int WMGetBrowserNumberOfColumns (WMBrowser *bPtr) +
    • char * WMGetBrowserPath (WMBrowser *bPtr) +
    • char * WMGetBrowserPathToColumn (WMBrowser *bPtr, int column) +
    • WMArray * WMGetBrowserPaths (WMBrowser *bPtr) +
    • int WMGetBrowserSelectedColumn (WMBrowser *bPtr) +
    • WMListItem * WMGetBrowserSelectedItemInColumn (WMBrowser *bPtr, int column) +
    • int WMGetBrowserSelectedRowInColumn (WMBrowser *bPtr, int column) +
    • WMListItem * WMInsertBrowserItem (WMBrowser *bPtr, int column, int row, char *text, Bool isBranch) +
    • void WMLoadBrowserColumnZero (WMBrowser *bPtr) +
    • void WMRemoveBrowserItem (WMBrowser *bPtr, int column, int row) +
    + +
    Menu items
    +
      +
    • WMMenuItem * WMCreateMenuItem (void ) +
    • void WMDestroyMenuItem (WMMenuItem *item) +
    • void WMSetMenuItemAction (WMMenuItem *item, WMAction *action, void *data) +
    • void WMSetMenuItemEnabled (WMMenuItem *item, Bool flag) +
    • void WMSetMenuItemMixedStatePixmap (WMMenuItem *item, WMPixmap *pixmap) +
    • void WMSetMenuItemOffStatePixmap (WMMenuItem *item, WMPixmap *pixmap) +
    • void WMSetMenuItemOnStatePixmap (WMMenuItem *item, WMPixmap *pixmap) +
    • void WMSetMenuItemPixmap (WMMenuItem *item, WMPixmap *pixmap) +
    • void WMSetMenuItemRepresentedObject (WMMenuItem *item, void *object) +
    • void WMSetMenuItemShortcut (WMMenuItem *item, char *shortcut) +
    • void WMSetMenuItemShortcutModifierMask (WMMenuItem *item, unsigned mask) +
    • void WMSetMenuItemState (WMMenuItem *item, int state) +
    • void WMSetMenuItemTitle (WMMenuItem *item, char *title) +
    • Bool WMMenuItemIsSeparator (WMMenuItem *item) +
    • WMAction * WMGetMenuItemAction (WMMenuItem *item) +
    • void * WMGetMenuItemData (WMMenuItem *item) +
    • Bool WMGetMenuItemEnabled (WMMenuItem *item) +
    • WMPixmap * WMGetMenuItemMixedStatePixmap (WMMenuItem *item) +
    • WMPixmap * WMGetMenuItemOffStatePixmap (WMMenuItem *item) +
    • WMPixmap * WMGetMenuItemOnStatePixmap (WMMenuItem *item) +
    • WMPixmap * WMGetMenuItemPixmap (WMMenuItem *item) +
    • void * WMGetMenuItemRepresentedObject (WMMenuItem *item) +
    • char * WMGetMenuItemShortcut (WMMenuItem *item) +
    • unsigned WMGetMenuItemShortcutModifierMask (WMMenuItem *item) +
    • int WMGetMenuItemState (WMMenuItem *item) +
    • char * WMGetMenuItemTitle (WMMenuItem *item) +
    • WMMenuItem * WMGetSeparatorMenuItem (void ) +
    + + +
    Utility/redefined functions
    +
      + +
    • char * wdefaultspathfordomain (char *domain) +
    • char * wexpandpath (char *path) +
    • void wfatal (const char *msg, ... ) +
    • char * wfindfile (char *paths, char *file) +
    • char * wfindfileinarray (WMPropList *array, char *file) +
    • char * wfindfileinlist (char **path_list, char *file) +
    • void wfree (void *ptr) +
    • char * wgethomedir () +
    • void * wmalloc (size_t size) +
    • void wmessage (const char *msg, ... ) +
    • WMPoint wmkpoint (int x, int y) +
    • WMRange wmkrange (int start, int count) +
    • WMSize wmksize (unsigned int width, unsigned int height) +
    • void * wrealloc (void *ptr, size_t newsize) +
    • void wrelease (void *ptr) +
    • void * wretain (void *ptr) +
    • waborthandler * wsetabort (waborthandler *handler) +
    • char * wstrappend (char *dst, char *src) +
    • char * wstrconcat (char *str1, char *str2) +
    • char * wstrdup (char *str) +
    • char * wstrerror (int errnum) +
    • char * wstrndup (char *str, size_t len) +
    • void wsyserror (const char *msg, ... ) +
    • void wsyserrorwithcode (int error, const char *msg, ... ) +
    • void wtokenfree (char **tokens, int count) +
    • char * wtokenjoin (char **list, int count) +
    • char * wtokennext (char *word, char **next) +
    • void wtokensplit (char *command, char ***argv, int *argc) +
    • char * wtrimspace (char *s) +
    • char * wusergnusteppath () +
    • void wwarning (const char *msg, ... ) +
    +Other used functions:
      +
    • int calculateCombineArea (RImage *des, RImage *src, int *sx, int *sy, int *swidth, int *sheight, int *dx, int *dy) +
    • void convertCPColor (CPColor *color) +
    • void destroyNode (void *data) +
    • void drawClip () +
    • char * generateNewFilename (char *curName) +
    • unsigned char getShift (unsigned char value) +
    • char * getStream (WMText *tPtr, int sel, int array) +
    • WMArray * getStreamObjects (WMText *tPtr, int sel) +
    • Pixmap makeMenuPixmap (PopUpButton *bPtr) +
    • Bool requestDroppedData (WMView *view, WMDraggingInfo *info, char *type) +
    • WMData * requestHandler (WMView *view, Atom selection, Atom target, void *cdata, Atom *type) +
    • RColor ulongToRColor (WMScreen *scr, unsigned long value) +
    +

    Data types

    + +
    WMColor
    +
      + +
    • WMColor * WMCreateNamedColor (WMScreen *scr, char *name, Bool exact) +
    • WMColor * WMCreateRGBAColor (WMScreen *scr, unsigned short red, unsigned short green, unsigned short blue, unsigned short alpha, Bool exact) +
    • WMColor * WMCreateRGBColor (WMScreen *scr, unsigned short red, unsigned short green, unsigned short blue, Bool exact) +
    • void WMReleaseColor (WMColor *color) +
    • WMColor * WMRetainColor (WMColor *color) +
    • char * WMGetColorRGBDescription (WMColor *color) + +
    • WMColor * WMBlackColor (WMScreen *scr) +
    • WMColor * WMWhiteColor (WMScreen *scr) +
    • WMColor * WMGrayColor (WMScreen *scr) +
    • WMColor * WMDarkGrayColor (WMScreen *scr) +
    • unsigned short WMBlueComponentOfColor (WMColor *color) +
    • unsigned short WMRedComponentOfColor (WMColor *color) +
    • unsigned short WMGreenComponentOfColor (WMColor *color) +
    • void WMSetColorInGC (WMColor *color, GC gc) +
    • WMPixel WMColorPixel (WMColor *color) +
    • void WMSetColorAlpha (WMColor *color, unsigned short alpha) +
    • unsigned short WMGetColorAlpha (WMColor *color) +
      +
    • void WMPaintColorSwatch (WMColor *color, Drawable d, int x, int y, unsigned int width, unsigned int height) +
    • void WMSetColorWellColor (WMColorWell *cPtr, WMColor *color) +
    • WMColorWell * WMCreateColorWell (WMWidget *parent) +
    • WMColor * WMGetColorWellColor (WMColorWell *cPtr) +
    + + +
    WMFont
    +
      +
    • WMFont * WMCreateFont (WMScreen *scrPtr, char *fontName) +
    • WMFont * WMCreateFontSet (WMScreen *scrPtr, char *fontName) +
    • WMFont * WMCreateFontWithFlags (WMScreen *scrPtr, char *fontName, WMFontFlags flags) +
    • WMFont * WMCreateNormalFont (WMScreen *scrPtr, char *fontName) +
    • WMFont * WMCreateAntialiasedFont (WMScreen *scrPtr, char *fontName) +
    • WMFont * WMCreateAntialiasedFontSet (WMScreen *scrPtr, char *fontName) +
    • WMFont * WMCopyFontWithChanges (WMScreen *scrPtr, WMFont *font, const WMFontAttributes *changes) +
    • void WMReleaseFont (WMFont *font) +
    • WMFont * WMRetainFont (WMFont *font) +
    • WMFont * WMDefaultBoldSystemFont (WMScreen *scrPtr) +
    • WMFont * WMDefaultSystemFont (WMScreen *scrPtr) +
    • WMFont * WMSystemFontOfSize (WMScreen *scrPtr, int size) +
    • WMFont * WMBoldSystemFontOfSize (WMScreen *scrPtr, int size) +
    • unsigned int WMFontHeight (WMFont *font) +
    • XFontSet WMGetFontFontSet (WMFont *font) +
    • char * WMGetFontName (WMFont *font) +
    • Bool WMIsAntialiasedFont (WMFont *font) +
    • void WMSetWidgetDefaultBoldFont (WMScreen *scr, WMFont *font) +
    • void WMSetWidgetDefaultFont (WMScreen *scr, WMFont *font) +
    + + +
    WMArray
    +
      +
    • WMArray * WMCreateArray (int initialSize) +
    • WMArray * WMCreateArrayWithArray (WMArray *array) +
    • WMArray * WMCreateArrayWithDestructor (int initialSize, WMFreeDataProc *destructor) + +
    • void WMAddToArray (WMArray *array, void *item) +
    • void WMAppendArray (WMArray *array, WMArray *other) +
    • void * WMArrayFirst (WMArray *array, WMArrayIterator *iter) +
    • void * WMArrayLast (WMArray *array, WMArrayIterator *iter) +
    • void * WMArrayNext (WMArray *array, WMArrayIterator *iter) +
    • void * WMArrayPrevious (WMArray *array, WMArrayIterator *iter) +
    • int WMCountInArray (WMArray *array, void *item) +
    • int WMDeleteFromArray (WMArray *array, int index) +
    • void WMEmptyArray (WMArray *array) +
    • int WMFindInArray (WMArray *array, WMMatchDataProc *match, void *cdata) +
    • void WMFreeArray (WMArray *array) +
    • int WMGetArrayItemCount (WMArray *array) +
    • void * WMGetFromArray (WMArray *array, int index) +
    • void WMInsertInArray (WMArray *array, int index, void *item) +
    • void WMMapArray (WMArray *array, void (*function)(void *, void *), void *data) +
    • void * WMPopFromArray (WMArray *array) +
    • int WMRemoveFromArrayMatching (WMArray *array, WMMatchDataProc *match, void *cdata) +
    • void * WMReplaceInArray (WMArray *array, int index, void *item) +
    • void WMSortArray (WMArray *array, WMCompareDataProc *comparer) +
      + +
    • WMPropList * WMCreatePLArray (WMPropList *elem, ... ) +
    • void WMAddToPLArray (WMPropList *plist, WMPropList *item) +
    • void WMDeleteFromPLArray (WMPropList *plist, int index) +
    • WMPropList * WMGetFromPLArray (WMPropList *plist, int index) +
    • void WMInsertInPLArray (WMPropList *plist, int index, WMPropList *item) +
    • Bool WMIsPLArray (WMPropList *plist) +
    • void WMRemoveFromPLArray (WMPropList *plist, WMPropList *item) +
    • WM_ITERATE_ARRAY(WMArray *,itemtype *,WMArrayIterator *iter) +
    + + +
    Trees
    +
      + +
    • WMTreeNode * WMCreateTreeNode (void *data) +
    • WMTreeNode * WMCreateTreeNodeWithDestructor (void *data, WMFreeDataProc *destructor) +
    • void WMDeleteLeafForTreeNode (WMTreeNode *aNode, int index) +
    • void WMDestroyTreeNode (WMTreeNode *aNode) +
    • void * WMGetDataForTreeNode (WMTreeNode *aNode) +
    • void * WMReplaceDataForTreeNode (WMTreeNode *aNode, void *newData) +
    • WMTreeNode * WMGetParentForTreeNode (WMTreeNode *aNode) +
    • int WMGetTreeNodeDepth (WMTreeNode *aNode) +
    • WMTreeNode * WMFindInTree (WMTreeNode *aTree, WMMatchDataProc *match, void *cdata) +
    • WMTreeNode * WMInsertItemInTree (WMTreeNode *parent, int index, void *item) +
    • WMTreeNode * WMInsertNodeInTree (WMTreeNode *parent, int index, WMTreeNode *aNode) +
    • void WMRemoveLeafForTreeNode (WMTreeNode *aNode, void *leaf) +
    • void WMSortLeavesForTreeNode (WMTreeNode *aNode, WMCompareDataProc *comparer) +
    • void WMSortTree (WMTreeNode *aNode, WMCompareDataProc *comparer) + +
    + + +

    ENUMS and #defines

    + +
    List of event masks and corresponding events
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Event maskEvent
    KeyPressMask KeyPress
    KeyReleaseMask KeyRelease
    ButtonPressMask ButtonPress
    ButtonReleaseMask ButtonRelease
    EnterWindowMask EnterNotify
    LeaveWindowMask LeaveNotify
    FocusChangeMask FocusIn
    FocusChangeMask FocusOut
    KeymapStateMask KeymapNotify
    ExposureMask Expose
    ExposureMask GraphicsExpose
    ExposureMask NoExpose
    VisibilityChangeMask VisibilityNotify
    SubstructureNotifyMask CreateNotify
    StructureNotifyMask DestroyNotify
    StructureNotifyMask UnmapNotify
    StructureNotifyMask MapNotify
    SubstructureRedirectMask MapRequest
    StructureNotifyMask ReparentNotify
    StructureNotifyMask ConfigureNotify
    SubstructureRedirectMask ConfigureRequest
    StructureNotifyMask GravityNotify
    ResizeRedirectMask ResizeRequest
    StructureNotifyMask CirculateNotify
    SubstructureRedirectMask CirculateRequest
    PropertyChangeMask PropertyNotify
    ColormapChangeMask ColormapNotify
    ClientMessageMask ClientMessage
    PointerMotionMask|PointerMotionHintMask|
    +ButtonMotionMask|Button1MotionMask|
    +Button2MotionMask|Button3MotionMask|
    +Button4MotionMask|Button5MotionMask
    MotionNotify
    + + +
    Frame Title Positions
    +
      +
    • WTPAboveTop +
    • WTPAtTop +
    • WTPBelowTop +
    • WTPAboveBottom +
    • WTPAtBottom +
    • WTPBelowBottom +
    +
    WM Image Positions WMImagePosition
    +
      +
    • WIPNoImage, +
    • WIPImageOnly, +
    • WIPLeft, +
    • WIPRight, +
    • WIPBelow, +
    • WIPAbove, +
    • WIPOverlaps +
    +
    WMAlignment
    +
      +
    • WALeft +
    • WACenter +
    • WARight +
    • WAJustified +
    + +
    Reliefs WMReliefType
    +
      +
    • WRFlat +
    • WRSimple +
    • WRRaised +
    • WRSunken +
    • WRGroove +
    • WRRidge +
    • WRPushed +
    +
    Colours
    +

    +typedef struct RColor { + unsigned char red; + unsigned char green; + unsigned char blue; + unsigned char alpha; +} RColor; + + +

    +typedef struct RSegment { + int x1, y1, x2, y2; +} RSegment; + + + +
    +
    +

    +

    LAST: Programming Details 3Contents
    + + + + + +
  • \ No newline at end of file diff --git a/WINGs_tutorial/WINGLib_files/2tabs.jpeg b/WINGs_tutorial/WINGLib_files/2tabs.jpeg new file mode 100644 index 0000000..ed7cd60 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/2tabs.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/AlertPanel.jpeg b/WINGs_tutorial/WINGLib_files/AlertPanel.jpeg new file mode 100644 index 0000000..7ebaf42 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/AlertPanel.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/Buttons.jpeg b/WINGs_tutorial/WINGLib_files/Buttons.jpeg new file mode 100644 index 0000000..2a3b0f7 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/Buttons.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/ColorPanel.jpeg b/WINGs_tutorial/WINGLib_files/ColorPanel.jpeg new file mode 100644 index 0000000..577bb80 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/ColorPanel.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/FontPanel.jpeg b/WINGs_tutorial/WINGLib_files/FontPanel.jpeg new file mode 100644 index 0000000..a16554c Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/FontPanel.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/InputDialog.jpeg b/WINGs_tutorial/WINGLib_files/InputDialog.jpeg new file mode 100644 index 0000000..c0f97a4 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/InputDialog.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/Labels.jpeg b/WINGs_tutorial/WINGLib_files/Labels.jpeg new file mode 100644 index 0000000..f9d031e Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/Labels.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/List.jpeg b/WINGs_tutorial/WINGLib_files/List.jpeg new file mode 100644 index 0000000..dae8aa0 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/List.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/OpenFileDialog.jpeg b/WINGs_tutorial/WINGLib_files/OpenFileDialog.jpeg new file mode 100644 index 0000000..bee009f Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/OpenFileDialog.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/Progress.jpeg b/WINGs_tutorial/WINGLib_files/Progress.jpeg new file mode 100644 index 0000000..9ea879c Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/Progress.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/PullDown.jpeg b/WINGs_tutorial/WINGLib_files/PullDown.jpeg new file mode 100644 index 0000000..4eef4c0 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/PullDown.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/Slider.jpeg b/WINGs_tutorial/WINGLib_files/Slider.jpeg new file mode 100644 index 0000000..7309521 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/Slider.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/TabView.jpeg b/WINGs_tutorial/WINGLib_files/TabView.jpeg new file mode 100644 index 0000000..8bbf633 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/TabView.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/TextField.jpeg b/WINGs_tutorial/WINGLib_files/TextField.jpeg new file mode 100644 index 0000000..88660b3 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/TextField.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/scrollview.jpeg b/WINGs_tutorial/WINGLib_files/scrollview.jpeg new file mode 100644 index 0000000..3f2177e Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/scrollview.jpeg differ diff --git a/WINGs_tutorial/WINGLib_files/textarea.jpeg b/WINGs_tutorial/WINGLib_files/textarea.jpeg new file mode 100644 index 0000000..2b5e079 Binary files /dev/null and b/WINGs_tutorial/WINGLib_files/textarea.jpeg differ diff --git a/WINGs_tutorial/WINGMenu.html b/WINGs_tutorial/WINGMenu.html new file mode 100644 index 0000000..f1d1e9f --- /dev/null +++ b/WINGs_tutorial/WINGMenu.html @@ -0,0 +1,82 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + +
    LAST: Programming Details 2ContentsNEXT: Library description
    + +

    Change a widget: a cascading menu

    +

    The WINGs library offers functions to set up a structure for a menu with submenus. However, the mapping of the menu itself is left to the Window Maker window manager. Without Window Maker, a menu which has been programmed this way, will not show. The easy way around this, is to use the source code for the editable menu in the WPrefs application, change it to give it the usual menu functionality, and compile this modified source code with the application's code. The two files you need to do this, are in the Window Maker's 0.92 source code directory WPrefs.app. Copy WPrefs.app/editmenu.c and WPrefs.app/editmenu.h to your current directory. A couple of little changes to editmenu.c will be sufficient to give adequate menu/submenu functionality. +

    Change the editable menu widget struct W_EditMenuItem. The EditMenuItem structure is the structure which is used to programme the editable menu in the Window Maker Preferences utility. To use it as a regular menu, it needs a pointer to the function which you want to execute when you click the item. Any WINGs widget structure needs to keep W_Class widgetClass and WMView *view as its first two declarations. Insert the line WMAction * callback; somewhere after them. The widget declaration will now be: +

    
    +typedef struct W_EditMenuItem {
    +    W_Class widgetClass;
    +    WMView *view;
    +
    +    struct W_EditMenu *parent;
    +    char *label;
    +    WMPixmap *pixmap;		       
    +    void *data;
    +    WMCallback *destroyData;
    +    WMAction * callback;
    +    struct W_EditMenu *submenu;	       
    +    struct {
    +        unsigned isTitle:1;
    +        unsigned isHighlighted:1;
    +    } flags;
    +} EditMenuItem;
    +For convenience, add this function to editmenu.c, too: +
    void WSetEditMenuItemAction(WEditMenuItem *item, WMAction *callback)
    +{
    +    item->callback= callback;
    +}
    + +

    We shall make a window with one button which will make the menu pop up. The code to create the menu is as follows. Have editmenu.c and editmenu.h in the same directory as the window application code, insert #include "editmenu.h" somewhere at the top. +

    
    +WEditMenu *submenu, *menu;
    +WEditMenuItem * menuitem;
    +
    +submenu=WCreateEditMenu(screen,"Submenu");
    +menuitem =WAddMenuItemWithTitle(submenu,"Submenu item"); 
    +menu=WCreateEditMenu(screen,"Main menu");
    +menuitem = WAddMenuItemWithTitle(menu,"To submenu"); 
    +WSetEditMenuSubmenu(menu, menuitem , submenu);
    +menuitem = WAddMenuItemWithTitle(menu,"Main item"); 
    +WMRealizeWidget(submenu);
    +WMRealizeWidget(menu);
    +The function to map the window w's menu at point (x,y) is WEditMenuShowAt(menu,x,y,w). However, it will not show anything unless it is used after the intial window has been mapped. To do this, we use WMSetButtonAction on a button, and make the WMAction map the menu. We pass it pointers to both the menu and the window, so that we can map the menu in the window's neighbourhood. The WMAction will look like : +
    void getMenu(WMWidget *self, void *data){
    +  WMPoint position;
    +  struct datacouple *tmp=(struct datacouple *)data;
    +  if(WMGetButtonSelected(self)){
    +  position=WMGetViewScreenPosition(WMWidgetView(tmp->window)); 
    +  WEditMenuShowAt(tmp->menu,(position.x>MENUWIDTH)?position.x-MENUWIDTH:0,\
    +               position.y+MENITEMHT,tmp->window);
    +  }else
    +    WEditMenuHide(tmp->menu);
    +}
    The used structure is struct datacouple{WMWindow *window; WEditMenu *menu;} datacouple; +. Realize the window before the others. The code with details is here. To compile it, you now type cc -x c EighthWindow.c editmenu.c -lXft -L/usr/X11/lib -L/usr/lib -lWINGs -lwraster -o EighthWindow. editmenu.c is, of course, the modified source file. +

    To use the callback functions, we need to execute them somewhere. To do this, search the static void selectItem function in the editmenu.c source. After its last line, insert the line: if (menu->selectedItem->callback) menu->selectedItem->callback(menu->selectedItem,NULL);. Define the callback before main as, eg.: +

    void menuItemAction(void *self, void *data){
    +fprintf(stderr, "Selected\n");}
    +and add it to the menu items in the main code with the WSetEditMenuItemAction( menuitem, menuItemAction);. There is also a little addition to the getMenu function, to reset the menu when we hide it. + +

    The function WCreateEditMenuItem in editmenu.c associates to ButtonPress events on the menu item widget, the function handleItemClick. This event handler function calls the function selectItem when it gets this event, and does a few other things we shall not need any more. The selectItem function goes through a few things. If the clicked menu item is a submenu entry, it checks its location and maps the submenu. At the end of this function we have inserted the line which calls our callback function in case the pointer to it is not NULL. If the menu has to appear, legacy-style, below a fixed bar in the window's top, we would just need to calculate this position, and also need to hide the menu whenever we drag the window itself. For a free floating menu, the latter is not very important. +

    The application source code is here. The editmenu.c code with the first few changes in it, is here. The changes are marked by a comment starting with /* MOD . There is one change in the new editmenu.h file. +

    Window manager hints
    +

    As the menu does not have the functions of an ordinary application window, we would not want it to have the same window frame. The buttons in the titlebar may be omitted, or limited. This can be done by the window manager, on data obtained from the X server.The X server, in its turn, gets them from the application. The XLib function XSetTransientForHint will, in xfce4, make the menu widget look like the one in the image shown on the left. The window manager gives it a title bar and button. It also allows to drag the menu. The code must provide functions to handle the event that the close button on the title bar is clicked, or the menu window will have the same problem as our first window. The window manager can also be bypassed. To do this, there is the Xlib function int XChangeWindowAttributes(Display *display, Window w, + unsigned long valuemask, XSetWindowAttributes + *attributes). As shown in the example code, it can be used to set the window attribute override_redirect. This will block window manager interference with the placement of windows. The menu window will now in all window managers look like the one in the first image at the top of this page. +



    +
    +

    +

    LAST: Programming Details 2ContentsNEXT: Library description
    + + + \ No newline at end of file diff --git a/WINGs_tutorial/WINGMenu_files/menu.jpeg b/WINGs_tutorial/WINGMenu_files/menu.jpeg new file mode 100644 index 0000000..fd8352a Binary files /dev/null and b/WINGs_tutorial/WINGMenu_files/menu.jpeg differ diff --git a/WINGs_tutorial/WINGMenu_files/redirectmenu1.jpeg b/WINGs_tutorial/WINGMenu_files/redirectmenu1.jpeg new file mode 100644 index 0000000..4ace77c Binary files /dev/null and b/WINGs_tutorial/WINGMenu_files/redirectmenu1.jpeg differ diff --git a/WINGs_tutorial/WINGMenu_files/redirectmenu2.jpeg b/WINGs_tutorial/WINGMenu_files/redirectmenu2.jpeg new file mode 100644 index 0000000..ad965fa Binary files /dev/null and b/WINGs_tutorial/WINGMenu_files/redirectmenu2.jpeg differ diff --git a/WINGs_tutorial/WINGsIntro.html b/WINGs_tutorial/WINGsIntro.html new file mode 100644 index 0000000..e36cd3f --- /dev/null +++ b/WINGs_tutorial/WINGsIntro.html @@ -0,0 +1,42 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + +
    LAST: ContentsNEXT: Step 1 Drawing a Window
    + +

    Make a WINGs based Graphical User Interface in 3 Steps

    + +The WINGs library is the library with routines for a graphical user interface which comes with the Window Maker window manager. In 2010 the library's web page is here on the windowmaker.org website. You can download windowmaker with the WINGs libraries here. The library provides widgets which you can use to make a graphical user interface. A widget is a software module which is used to interact with the user. Buttons and menus are widgets. The WINGs library offers the possibility to programme these widgets in a few lines of C code, so that you can dedicate the rest of your time to the functionality in your application. + +

    This tutorial shows in three simple steps how to write a graphical user interface with WINGs. Those three steps will cover all that is needed to write the major dialogs and widgets needed for communication between application and user. It assumes that you know how to programme in C, but you do not need to know anything about GUI-programming. + +

    Step 1 in this tutorial will show the framework for an application which uses a WINGS graphical user interface. It shows how you have the WINGs library create a widget for you, and how you set its properties. Step 2 briefly explains what events are, and how you make your application react to incoming events. This is what makes your interface work. Step 3 shows how to insert two buttons and a text area into the application's window, and how to implement the handling of events for them. Along the explanations in the main text, there are a few examples of source code. Most WINGs function names speak for themselves, and therefore, not everything in the source code is repeated in the text. You can just read the code. The example developed in the three steps is a sufficient blueprint to allow you to use the other widgets in the WINGs library. To do that, just look up the functions in the relevant section in the library description section. + +

    There are three programming detail sections after the three tutorial sections. They explain how to use Xlib code along with the WINGs code, how to set up a widget in which you can draw OpenGL images, and how to change part of the WINGs library source for your own needs, among other things. + +

    To compile WINGs widgets, you need a C-compiler, the WINGs library, and an X-server on your computer. The first few libraries which you need will be libWINGs and libwraster, and the X11 library libXft. If the WINGs library directory is in the /usr/lib path, and your X11 libraries in /usr/X11/lib, you can compile the code with gcc as follows +

    gcc -x c FileName -lXft -L/usr/X11/lib -L/usr/lib -lwraster -lWINGs -o FileName +

    This will get you a binary called FileName which you can run, either by double clicking, or by running the ./FileName command in an xterm. +

    To compile in C++, just replace the fprintf(stderr, ..) command with an appropriate cerr << , add the namespace command, and replace the <stdio.h> with the iostream header, then compile as + +g++ -x c++ -lXft FileName -L/usr/X11/lib -L/usr/lib -lwraster -lWINGs-o FileName + + + +

    The function prototypes in the library description were retrieved from the information in the WINGs man pages which were compiled by Alexey Voinov. His page was here in 2010. + + +
    +
    +

    +

    LAST: ContentsNEXT: Step 1 Drawing a Window
    + + + + \ No newline at end of file diff --git a/WINGs_tutorial/WINGsRemark.html b/WINGs_tutorial/WINGsRemark.html new file mode 100644 index 0000000..f80a0ca --- /dev/null +++ b/WINGs_tutorial/WINGsRemark.html @@ -0,0 +1,174 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + +
    LAST: Step 3 Adding WidgetsContentsNEXT: Programming Details 2
    + +

    Programming details and WINGs functions

    + +
    Count the windows
    +In the code up till now, we had just one window. When it receives notificaton that the window is requested to close, it shuts down the whole application. In an application with more windows open, we might not like it when closing an arbitrary window shuts everything down. An obvious solution is to exit the programma when the last open window is requested to close, and keep a count of the number of windows open. The closeAll function becomes: +
    int windowcounter=0;
    +void closeAll(WMWidget *self,void *data){
    +  WMDestroyWidget(self);
    +  fprintf(stderr,"I've been used!");
    +  if(--windowcounter<1) exit(0);
    +}
    +A second window should be opened with the existing screen as an argument. After success in opening, you increase windowcounter by one. +
    Icons and images
    +

    Defining an icon which will be used for your application, and drawing an image in a widget, are quite straightforward. Suppose, there is an XPM-image available, and it is the file /usr/include/pixmaps/picture.xpm. The following code sets an application icon and draws an icon in a label. +

    RContext *ctxt;
    +RImage *img;
    +WMPixmap *wimg;
    +      /* code to open screen, window*/
    + ctxt=WMScreenRContext(screen);
    + img=RLoadXPM(ctxt, "/usr/include/pixmaps/picture.xpm", 0);
    + WMSetApplicationIconImage(screen, img);
    + wimg=  WMCreatePixmapFromRImage(screen, img,0);
    +     /* code to create a label */
    + WMSetLabelImagePosition(label, WIPImageOnly);
    + WMSetLabelImage(label, wimg);
    +RContext refers to the X-server's so-called graphics context. This specifies which line width, fill patterns, etc. will be used. That information is not contained in the XPM-file. With WMScreenRContext, we use the existing context. RLoadXPM loads the xpm from a file, and stores it as an RImage. +

    The image is set as an icon for the application with this RImage. We transform the RImage into a WMPixmap. The WMPixmap can be shown in a widget. Here, we show it in a label with WMSetLabelImage . You must specify its position with the right option first. +

    An X pixmap is a text file. You can insert its code into your application source code directly, and handle it with RGetImageFromXPMData + +

    Virtual screen and resolution
    + +

    +WINGs provide the function unsigned int WMScreenWidth (WMScreen *wmscr) to get the screen's width in pixels. There is a similar function to get its height. This is information about the virtual screen, and is not always what you are looking for. Many (or all?) Gtk+ interfaces have bigger font sizes when the virtual screen is bigger, even when the monitor is the same. If your monitor runs at 1024x768, and your virtual screen measures 1800x1440 pixels, you would often want to adjust your application to the monitor's resolution, and the view it has on the virtual screen, rather than to the screen's size itself. To get the used video mode (ie. the 1024x768 in our example), and the position on the virtual screen, the X-library libXxf86vmode provides two functions. +

      +
    • Bool XF86VidModeGetModeLine( Display *display, int screen, int *dotclock_return, XF86VidModeModeLine *modeline) +
    • Bool XF86VidModeGetViewPort( Display *display, int screen, int *x_return, int *y_return) +
    + The returned modeline is a structure which has members hdisplay and vdisplay. The monitor's current resolution is hdisplay x vdisplay. The monitor's left uppper corner is at the position returned by XF86VidModeGetViewPort in *x_return x *y-return. The screen parameter in these function calls is not a WMScreen variable. A WMScreen variable wmscris a structure, defined in WINGsP.h, which contains the screen number in a member wmscr.screen. The follwing example defines a function *WMGetModeViewSSize() For simplicity, it is assumed the application is using the default screen. The argument to the WMScreenWidth function should of course be a WMScreen type. + +
        /*   extra headers    */
    +#include <X11/Xlib.h>
    +#include <X11/extensions/xf86vmode.h>
    + 
    +Display *display;
    +WMScreen *screen;
    +
    +int *WMGetModeViewSSize(){
    +int *result;
    +XF86VidModeModeLine modeline;
    +int dotclock_return;
    +
    +result=(int *)calloc(8,sizeof(int));
    +
    + XF86VidModeGetModeLine(display,DefaultScreen(display), &dotclock_return,&modeline);
    + *result= modeline.hdisplay;
    + result[1]= modeline.vdisplay;
    + XF86VidModeGetViewPort(display,DefaultScreen(display), result+2,result+3);
    + result[4]=WMScreenWidth(screen);
    + result[5]=WMScreenHeight(screen);
    +
    + return result;
    +}
    +To compile this function, you need the libXxf86vm library. For the GNU compiler, your command would now be gcc -x c -lXft FileName.c -L/usr/X11/lib -L/usr/lib -lWINGs -lwraster -lXxf86vm -o FileName. When you run the function (after opening the screen), and print its results, you will find something like:
    result 0 and 1: 1024 768 
    +result 2 and 3: 126 171 
    +result 4 and 5: 1800 1440
    +meaning that the monitor is running at 1024x768, its upper left corner is at (126,171) in the virtual screen, and the whole screen has a resolution of 1800x1440. The user is seeing the screen part from (126,171) to (1150,939). In the illustration to the right, (X,Y) represent the Viewport coordinates which are obtained from XF86VidModeGetViewPort. The bright part is the part of the virtual screen which is visible on the monitor at that moment. + +
    Message log window
    +

    In all the applications up till now, error and other messages have been sent to stderr or stdout. when you start the programmes by (double-)clicking in your file manager, the messages may disappear, or pop up in a window. This makes starting the application from an xterm command line the most practical. To get rid of this disappointing feature, you can programme another window to send the messages to, or, more logically, use a named pipe to send them to a different application which you already have on your system. This section gives an example how to code this last method. +

    The method is simple: when the first message needs to be written, the code creates the pipe with mknod. If successful, it forks. The child process uses unix' execlp to start the logging application. In this example it is xconsole, with the pipe as its file argument. The parent process opens the pipe for writing. The application now can write to the pipe. +

    The first detail is in the function to close our applicaton, closeAll, in the examples. This function should terminate the child process, and also delete the file which was used for piping the data. The second detail is the way we keep track if the child process is still running, or whether the user has clicked it away. For this we declare a signal handler each time we start up the child process. At the SIGCHLD signal, which indicates the child process has been terminated, we call a function which deletes the pipe file as well, and sets a global variable to a value which allows us to check if the child process has terminated. When writing our second message, we check first if the child process is still running. If it is, we can write to the pipe, if it isn't, we create a new child process and pipe. If there is any problem, we fall back on the usual stderr. Here is the (extra) code for a simple implementation: + +

    #include <fcntl.h>
    +#include <signal.h>
    +#include <sys/stat.h>
    +#define ERRMSGFIFO "/tmp/WINGsWindowfifo"
    +#define NOLOGWINDOW (-2)
    +#define FIFOERROR (-1)
    +#define FIFOLOWESTPOSS 0
    +
    +int fifonr=NOLOGWINDOW;   /* the fifo nr, or an error value */
    +int sibpid;               /* the child's process ID  */
    +
    +
    + /*    clean up when closing: */
    +
    +void closeAll(WMWidget *self,void *data){
    +
    +  WMDestroyWidget(self);
    +   if(--windowCounter<1){
    +    if (fifonr>=FIFOLOWESTPOSS) 
    +     kill(sibpid,SIGTERM);
    +    if (!access(ERRMSGFIFO,F_OK|W_OK))
    +     unlink(ERRMSGFIFO);
    +   exit(0);
    +   }
    +}
    +
    +  /*     handle the case the child terminates. Set fifonr and clean up:     */
    +
    +void redirectmsg(int sig){  
    +
    +  fifonr=NOLOGWINDOW;
    +  if (!access(ERRMSGFIFO,F_OK|W_OK))
    +    unlink(ERRMSGFIFO);
    +  return;
    +}
    +
    +
    +   /*   have the log window pop up:    */
    +
    +int showMessageWindow(){
    +
    +(void) signal(SIGCHLD,redirectmsg); /* use redirectmsg whenever the child process stops  */
    +
    +if(access(ERRMSGFIFO,F_OK)==-1)
    +  fifonr=mknod(ERRMSGFIFO,0640|O_EXCL|S_IFIFO,(dev_t)0);
    +else 
    +  fifonr=FIFOERROR;
    +     /* fifonr == FIFOERROR if mkfifo or access failed, for mknod returns -1 on failure   */
    +
    +if(fifonr!=FIFOERROR){
    +
    + sibpid=fork();
    +
    + if(sibpid==0){
    +   execlp("xconsole" , "xconsole", "-file",ERRMSGFIFO,"-geometry","250x400", \
    +        "-title","Application Messages",(char *)0);
    +   exit(1);
    +}
    + else
    +   fifonr=open(ERRMSGFIFO,O_WRONLY);
    +}
    +  return fifonr;
    +}
    +
    +
    +    /*    usage:       */
    +
    +void someActionWithMessage(void *self, void *data){
    +
    +  if (fifonr<FIFOLOWESTPOSS)
    +    fifonr=showMessageWindow();   /* (re)start xconsole, or try again in case of FIFOERROR  */
    +
    +  if (fifonr==FIFOERROR)                                  /* if still error, use stderr   */
    +    fprintf(stderr,"%s selected\n",  WMgetSomeInformationFrom(self));
    +  else{
    +    char textbuffer[100];
    +    snprintf(textbuffer,99, "%s is the information\n",  WMGetSomeInformationFrom(self));
    +    write(fifonr, textbuffer,strlen(textbuffer));
    +  }
    +}
    +
    +

    +The someActionWithMessage function is a WMAction in this case. Of course, there must be an xconsole in the user's path and he needs the correct rights. The example catches the events that the user clicks away the xconsole before he is finished, that the fifo file already exists, and that the fifo file is replaced with something which is not accessible during run time. There is nothing to change in main. + +
    +

    +

    LAST: Step 3 Adding WidgetsContentsNEXT: Programming Details 2
    + + + \ No newline at end of file diff --git a/WINGs_tutorial/WINGsRemark_files/ScreenSize.jpeg b/WINGs_tutorial/WINGsRemark_files/ScreenSize.jpeg new file mode 100644 index 0000000..456f8a7 Binary files /dev/null and b/WINGs_tutorial/WINGsRemark_files/ScreenSize.jpeg differ diff --git a/WINGs_tutorial/WINGstep1.html b/WINGs_tutorial/WINGstep1.html new file mode 100644 index 0000000..b07f291 --- /dev/null +++ b/WINGs_tutorial/WINGstep1.html @@ -0,0 +1,64 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + +
    LAST: Introduction ContentsNEXT: Step 2 Processing Events
    + +

    Step 1: Six lines show a window on the screen

    +

    +The WINGs library allows you to get a window on the screen with a few lines of C-code. The following source code will give a non-responsive empty window. By adding a short function and just one extra line of code, we shall enable it to be closed by clicking the destroy button on the title bar. +

    Application FirstWindow
    +
    #include <WINGs/WINGs.h>
    +
    +int main (int argc, char **argv){
    +
    + Display *display;
    + WMScreen *screen;
    + WMWindow *win;
    +
    +   display = XOpenDisplay("");
    +   screen = WMCreateScreen(display, DefaultScreen(display));
    +   win = WMCreateWindow(screen, "");
    + 
    +   WMRealizeWidget(win);
    +   WMMapWidget(win);
    +
    +   WMScreenMainLoop(screen);
    +}
    +
    +
    +

    The order in which things are created is display -> screen -> window. A display is your pc, with keyboard and mouse. Its name is what you may see if you type into your xterm echo $DISPLAY. The answer might very well be::0.0. Your PC may have more than one screen. So, after connecting to the display with XOpenDisplay, you must open a screen with WMCreateScreen. The display knows which screen is your default screen, and there is a function Defaultscreen to tell you that. Your application will need to open a window in that screen, and that window is what you would like to interact with. + +You complete the window, and put it on the screen with WMMapWidget(WMWindow *window), and WMRealizeWidget(WMWindow *window). Omitting either of these two functions, will have as result that your programme is stuck and you won't see anything on the screen. IN general, a widget is complete when WMRealizedWidgeted. As long as you do not map it, you will not see it. The other way round, it won't work. You cannot map a widget which has not been realized. After WMrealizing the window, you set the interface in motion by calling WMScreenMainLoop(WMScreen *screen). WMMapWidget makes a widget visible. You can also WMUnmapWidget them. +

    The source code is here. There is an extra intialization line which organizes the data the WINGs functions work with. Compile it: The application will show a grey area inside of the borders which your window manager provides. If you started the programme by running ./FirstWindow from an xterm, you can stop it by using ctrl-c from the command line. If you started it in the graphical interface by double clicking it, you may or may not be able to close it with the close button on the title bar. You'll notice that in Windowmaker the button is disabled, and you need to kill the application (double click). If you are using a different window manager you may be able close the window by clicking on the close button. More about this in a moment. + +

    Setting some properties
    +

    After creating the window with WMCreatWindow, and before mapping it, its properties can be set. Function names speak for themselves. +

    • WMResizeWidget(WMWindow *window,size-t WinSizePixels,int WinSizePixels) +
    • WMSetWindowTitle(WMWindow *window, const char **titlestring) +
    • WMSetWindowMinSize(WMWindow *window,int s,int s) +
    • WMSetWindowAspectRatio(WMWindow *window,int t,int t, int t, size-t t) +
    • WMSetWindowResizeIncrements(WMWindow *window,int Size,int Size) +
    • WMSetWidgetBackgroundColor(WMWidget *window, WMColor *color) +
    +A WMColor colour can be created and undone with +
    • WMColor * WMCreateRGBColor (WMScreen *screen, unsigned short red, unsigned short green, unsigned short blue, Bool exact) +
    • void WMReleaseColor (WMColor *color) +
    +The resulting colour is a RGB combination.. +

    After inserting whichever functions you like, compile the code again. + +

    Something is missing
    +

    Let us go back to the difference in behaviour under different window managers. Open an xterm, and run your application FirstWindow) from the command line ./FirstWindow, that is, if it's in your current directory. We have seen that under windowmaker, the close button is disabled, and you can only close the window by using ctrl-c. Now switch to a different window manager, like xfce4 or (yes) fvwm2. Run FileName from the command line in an xterm. Click on the close button in the title bar. The window closes, but that is not all. You are getting an error message in your xterm, when you close the window. xfce4 says Broken pipe. fvwm has more funky messages like XIO: fatal IO error 104 (Connection reset by peer) on X server ":0.0" after 1320 requests (1319 known processed) with 1 events remaining., or X connection to :0.0 broken (explicit kill or server shutdown). So one window manager disables a button, and the others give error messages. We have a problem to solve in any of them. + +

    LAST: Introduction ContentsNEXT: Step 2 Processing Events
    + + + diff --git a/WINGs_tutorial/WINGstep2.html b/WINGs_tutorial/WINGstep2.html new file mode 100644 index 0000000..08a8ecc --- /dev/null +++ b/WINGs_tutorial/WINGstep2.html @@ -0,0 +1,59 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + +
    LAST: Step 1 Drawing a WindowContentsNEXT: Step 3 Adding Widgets
    + +

    Step 2: Processing events

    + +
    Closing the window
    + +

    Every widget can process events if it wants to. An event is a structure with information, which is created by the X-server, when certain things happen, such as a mouse click, a pressed key, or the raising of a window. These Xevents are queued. You can select for a window or widget, which events, sent by the X-server, you want it to use. The other events will be ignored. The widget takes these events out of the queue. You must specify which function will be executed for which event. In our FirstWindow application, we have not done anything of this kind. + +

    In the FirstWindow application, the WMScreenMainLoop(screen) call puts the application into a loop to wait for events. We had not specified any events to be processed, however, and the application does not react to the event that you told the window manager to close it by clicking on the close button. For this, there is an easy fix. It is the function +
    void WMSetWindowCloseAction (WMWindow *window, WMAction *action, void *clientData)
    +This should be called after the window's creation and before its mapping with WMMapWidget(). The argument WMAction must be a function, which looks like this:
    void action(WMWidget *self,void *data){ commands}.
    It is automatically called when the window is closed. Typically, it handles the data, it destroys the widget where the CloseAction event arrived, in this case our only window. In our simple programme, we would simply exit the application. If there can be more than a single window, we should keep track of their number, and exit only if we are on the last window (if we wish to do so). Widgets are deleted by void WMDestroyWidget (WMWidget *widget) Now , to the FirstWindow code, we can, somewhere before the main function, define this function: +

    
    +void closeAll(WMWidget *self,void *data){
    +  WMDestroyWidget(self);
    +  fprintf(stderr, "I've been used!\n");
    +  exit(0);
    +}
    +
    +We write a message to the standard error output when the function is used. After the WMCreateWindow() line, we insert the line: +
    WMSetWindowCloseAction(window, closeAll, NULL);
    +

    Compile it. The source code now looks like this. Do the experiments above again. In Windowmaker the close button now is enabled. In the other window managers, the error messages have disappeared, and our function lets us know it has been used. +The title bar reads "untitled", because we have not used WMSetWindowTitle. The destroy-button now is enabled, however. The colour was created by the red, green, and blue values : 124<<9, 206<<8, and 162<<8. + + +

    Closing the window in a different way
    +The WMSetWindowCloseAction() hides many details. Suppose we like to close the window and end the application in a different way. We can use the same closeAll function as above for this. We are going to close the window whenever there is a mouse click in it. When there is a click, the system notifies the window that there is an X-event "ButtonPress". To use this, we must specify which events we want to use for the window, and specify which function will be called in case such an event arrives. The function to do this, is
    void WMCreateEventHandler (WMView *view, unsigned long mask, WMEventProc *eventProc,void *clientData).
    The mask argument in it will be an "OR"ed combination of masks. Here is a list of Events and their event masks. For the moment, we just need "ButtonPressMask". The WMEventProc is a function which must look like void eventProc(XEvent *event, void *data). The clientData is our window to which we like to give access for these events. (WMView *) is a member in the WMWidget structure. It can be obtained from the window by the function WMWidgetView(WMWindow *window). +Now, insert the following function after our closeAll function in the programme +
    
    +static void handleEvents(XEvent *event, void *data)
    +{
    +    WMWidget *widget = (WMWidget*)data;
    +    switch (event->type) {
    +    case ButtonPress:
    +        closeAll(widget,NULL);
    +        break;
    +    }
    +}
    +
    +It says that if the incoming event for the window is of type ButtonPress, it will call the function closeAll. We really do not need the switch statement now, because we do not specify anything for ButtonRelease. Usually we define functions for all the event types which we have specified by the mask in the WMCreateEventHandler function. Now, after the line with WMCreateWindow(), insert the following line in our programme: +
     WMCreateEventHandler(WMWidgetView(win), ButtonPressMask,handleEvents, win)
    +The full source code now looks like this. Compile the code. Run the programme, and find that the window closes as soon as you click in it. We have given window access to the ButtonPress Xevent, and specified that in case this event comes up, the closeAll function should be called. We'll remove this annoying feature again in the next step, when we shall show a button in the window, which will duely close the window when clicked. + +
    +

    +

    LAST: Step 1 Drawing a WindowContentsNEXT: Step 3 Adding Widgets
    + + + diff --git a/WINGs_tutorial/WINGstep2_files/FirstWindow.jpeg b/WINGs_tutorial/WINGstep2_files/FirstWindow.jpeg new file mode 100644 index 0000000..79b96e2 Binary files /dev/null and b/WINGs_tutorial/WINGstep2_files/FirstWindow.jpeg differ diff --git a/WINGs_tutorial/WINGstep3.html b/WINGs_tutorial/WINGstep3.html new file mode 100644 index 0000000..cc1f1f4 --- /dev/null +++ b/WINGs_tutorial/WINGstep3.html @@ -0,0 +1,143 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + +
    LAST: Step 2 Processing EventsContentsNEXT: Programming Details
    + +

    Step 3: Adding widgets to a window

    + +
    Adding buttons to a widget
    +

    As a window is a widget, we can create a button for it with the function
    + WMButton * WMCreateButton (WMWidget *parent, WMButtonType type)
    +To make the button visible, the function WMMapSubwidgets may be called on the window. A call to WMMapWidget on the button will do the same of course. Before mapping the button, its properties can be set with functions whose names speak for themselves + +

    +

    • void WMSetButtonText (WMButton *bPtr, char *text) +
    • void WMSetButtonTextAlignment (WMButton *bPtr,WMAlignment alignment) +
    • void WMSetButtonAction (WMButton *bPtr, WMAction *action, void *clientData) +
    • void WMMoveWidget (WMWidget *wdiget, int pixelstoright, int pixelsdown) +
    • WMScreen * WMWidgetScreen (WMWidget *widget) +
    • WMSize WMGetViewSize (WMView *view) +
    • void WMMapSubwidgets (WMWidget *widget) +
    + +

    As windows and buttons are both widgets, WMResizeWidget() is the same as for the window above, just as the function to set the background colour. Sizing and moving is in pixels, movements are in pixels from the parent widget's upper left corner. The default action on a button, which is a mouse click, will call the WMAction function, just as happens with the CloseAction on the window. WMAlignment can be WALeft, WACenter, WARight or WAJustified. + +

    The different WMButtonTypes are +

    Touch buttons:
    WBTMomentaryPush, WBTMomentaryChange,WBTMomentaryLight +
    Alternate on/off buttons:
    WBTPushOnPushOff, WBTOnOff, WBToggle +
    Checkbox with label next to it:
    WBTSwitch, WBTRadio +
    +Particular behaviour of a button can be obtained by using the function
    +WMButton * WMCreateCustomButton (WMWidget *parent, int behaviourMask)
    +By default a new widget will be placed in the window's top left corner. WMMoveWidget is used to place it correctly. +

    Buttons can be grouped together by using a WMBox widget. You would do this when you want to do something fancy with the buttons, eg. filling the width of a part of the window, and resizing with that part. Create the box before creating the button, WMMap the button, and next add the latter's view, extracted with WMWidgetView() to the box: +

      +
    • WMBox * WMCreateBox (WMWidget *parent) +
    • void WMSetBoxHorizontal (WMBox *box, Bool TrueorFalse) +
    • void WMAddBoxSubview (WMBox *box, WMView *buttonsview, + Bool expand, Bool fill, int minSize, + int maxSizeor0, int space) +
    • void WMSetBoxBorderWidth (WMBox *box, unsigned width) +
    • void WMSetViewExpandsToParent (WMView *boxview, int leftOffset, + int topOffset, int rightOffset, + int bottomOffset) +
    +

    In the WMAddBoxSubview function, setting expand to True will stretch the button to the height of the box. space sets the space after the button. To resize the widgetbox with the window, you can use the WMSetViewExpandsToParent function. Otherwise, you can calculate your own positions, and move the box to where it is supposed to be in a resized window. There are other ways to group buttons, or other widgets, eg. by a frame. + +

    Resize events
    +To know the current window's size, and the size of any other widget, there is the function WMSize WMGetViewSize (WMView *view). As before, the function WMWidgetView casts the widget into a view. WMWidgetScreen returns a pointer to the screen in which the widget was created. + +

    We thus can get the window's size, and place widgets in their correct positions. What is left to do is a function which handles the event that the user resizes the window. The buttons, or the box containing them, should move to their correct positions in the window again in such an event, or resize with the window itself. There is an event WMViewSizeDidChangeNotification when the window is resized. For a WMWindow win, passing WMWidgetView(win) as the last argument to the function below will define what to do when this event occurs. +
    void WMAddNotificationObserver (WMNotificationObserverAction *observerAction, void *observer,const char *name, void *object)
    +The third argument should be the event's name (WMViewSizeDidChangeNotification), and the first argument is the name of the function which will be called. This function should look like void observerAct(void *self, WMNotification *notification). It is all done in the sample code here. + +

    Adding the event handlers and widgets to the application
    +In the FirstWindow code, we insert the following lines to handle the resize notification:
    +
       WMSetViewNotifySizeChanges(WMWidgetView(win), True);
    +  WMAddNotificationObserver(resizeHandler, NULL, WMViewSizeDidChangeNotification, WMWidgetView(win));
    +

    Before the main function we define the function (resizeHandler) which will handle the resize event for the two widgets, the text area and the box with buttons. There is a global variable ButtonsetSize, which contains the size of the box with buttons: +

     WMSize ButtonsetSize;
    + static void resizeHandler(void *self, WMNotification *notif){
    + WMSize size = WMGetViewSize(WMWidgetView(win));   
    + WMMoveWidget(box, size.width-ButtonsetSize.width, size.height-ButtonsetSize.height);
    + WMResizeWidget(text, size.width-MARGIN -10, size.height-80);
    +}
    +static void handleEvents(XEvent *event, void *data)
    +{int i=0;
    +    WMWidget *widget = (WMWidget*)data;
    +    switch (event->type) {
    +    case ButtonPress:
    +      while (i<40)textbuf[i++]=' ';
    +      snprintf(textbuf,39,"Button down at (%i,%i) \n-",event->xbutton.x,event->xbutton.y);
    +      WMFreezeText(text);
    +      WMAppendTextStream(text,textbuf);
    +      WMThawText(text);
    +      break;
    +    }
    +}
    +
    +
    +The buttons keep their size, but are moved to stay in the bottom right corner, the text area is resized along with the window, but stays 80 pixels away from the window bottom border. We also do something useful with the mouseclicks on the window itself. This is done in the function handleEvents. The event ButtonPress has the click time and position in a member .xbutton. When the button is pressed, we get that information, and print it to the text area. + +

    The text is written to a text area. Function names for it are self-explanatory. We create this widget after creating the window. It will be WMmapped by the final WMMapSubwidgets. The code for setting it up is just: +

     text = WMCreateText(win);
    +  WMResizeWidget(text, WINWIDTH-MARGIN, WINHEIGHT -80);
    +  WMMoveWidget(text, 10, 10)
    The text is written to the area by passing character strings to the WMAppendTextStream function. + +

    The important functions in creating the box and its widgets are: +

     box=WMCreateBox(win); 
    + WMSetBoxBorderWidth(box, MARGIN);
    + WMSetBoxHorizontal(box, True);  
    + Button =WMCreateButton(box,WBTMomentaryPush);
    + WMSetButtonAction (Button, selectFiles, NULL);
    + WMMapWidget(Button);
    + ButtonsetSize = WMGetViewSize(WMWidgetView(QuitButton));  
    + WMAddBoxSubview(box, WMWidgetView(QuitButton), True,False, 60, 1000, MARGIN); 
    +  /*-- make and add another button --*/
    + WMResizeWidget(box, 4*MARGIN+2*ButtonsetSize.width,2*MARGIN+ButtonsetSize.height);
    + ButtonsetSize =WMGetViewSize(WMWidgetView(box));
    + resizeHandler(NULL,NULL)
    +Application windowThe box is created before the button is, because the button will have to be created with the box (its parent widget) as its first argument. The box is the "outer" widget and will be mapped with WMMapSubwidgets, but we map the buttons separately. The function which will be called on the default button event is closeAll() for the quit button. The file button will call the selectFiles() function, in which we open a file selector widget. We have left it to WINGs to decide what size the button will be. We temporarily use ButtonsetSize to store this size. We add the button's view to the box. After adding all the buttons, We store the size of the resulting box, and use it in our resizeHandler function to keep the box in the corner. File selector widget.Following the source code, pressing the file button will pop up the file selector dialog, and the name of the selected file is printed in the text area. Notice that, without the box widget, we would need two global Button pointers to change the position of both buttons in the resizeHandler function. We now need one Button pointer, which can remain local to main. + +

    Here is the full code which we have now. As we have a text area, we can print text to it, as long as we are sure that the widget has not been destroyed. The scroll bar next to the area is obtained with one single function call. + +

    Frames
    +

    The WMBox needs quite some configuration. It is not really intended for putting two simple buttons in a corner. We can use a frame to keep widgets together and move them with one single pointer. For buttons, we could also use the WMGroupButtons function to handle a group of buttons with just one pointer. To use a frame, use this code, instead of the WMBox functions: At global scope: +

    WMFrame *controlframe;
    +static void resizeHandler(void *self, WMNotification *notif){
    +     WMSize size = WMGetViewSize(WMWidgetView(win));   
    +     WMMoveWidget(controlframe, size.width-ButtonsetSize.width, size.height-ButtonsetSize.height);
    +     WMResizeWidget(text, size.width-MARGIN -10, size.height-80);
    +}
    +In main: +
      controlframe=WMCreateFrame(win);
    +  Button =WMCreateButton(controlframe,WBTMomentaryPush);
    +  ButtonsetSize = WMGetViewSize(WMWidgetView(Button));    
    +  WMMoveWidget(Button,MARGIN, MARGIN);
    +  /* (code to create a second button of the same size, with the same pointer)  */
    +  WMMoveWidget(Button,2*MARGIN+ButtonsetSize.width, MARGIN);
    +  ButtonsetSize.width = 3*MARGIN+2*ButtonsetSize.width;
    +  ButtonsetSize.height=2*MARGIN+ButtonsetSize.height;
    +  WMResizeWidget(controlframe,ButtonsetSize.width,ButtonsetSize.height);
    +  WMMapSubwidgets(controlframe);
    + +

    As we created the buttons inside the frame, we WMMoveWidget them along coordinates with respect to the frame's upper left corner. We have left it to WINGs to set the buttons' size, so we get their size with WMGetViewSize. With the button sizes, we calculate what size the frame is to have, and how far we need to move the buttons from the upper left corner to get them to the right place. We WMMap both buttons inside the frame with WMMapSubwidgets(controlframe);. The frame is the outer widget, and will be WMMapped just before the window. Replacing the box with the frame, we get this source code. After compiling, we get the same application. The obvious frame properties are set with the frame functions + +

    Next sections
    +

    The three steps up till now have shown the important points in programming with the WINGs library. The basics are all the same all the time. Create, specify WMAction, define the WMAction function somewhere, WMMap the widget. If this won't do, use PostNotification, and AddNotificationObserver to the widget which should react to it. +

    From the next sections, the library description gives a whole range of widgets which you can fit into the window this way, and related functions and data structures. There is sample code for those widgets whose code seems a bit more involved. The only thing which cannot be obtained by a simple function call is a menu with submenus, which is to work under any window manager, not just Window Maker. The third programming detail section explains, how to programme this kind of menu. The other two programming detail sections are not about the WINGs/wraster/windowmaker libraries themselves, except for a short section on the use of the WINGs functions to insert icons into widgets. Detail section 1 contains an example of how to get rid of the disappointing xterm window which you need to start your windowed application from, to read its messages on stderr or stdout. It shows the standard code to open a logging window on the screen when needed. For convenience, it uses xconsole for this, a standard application on unix systems with X11. The same section 1 shows how to get the correct information about monitor resolution when a virtual screen is used. Detail section 2 gives code samples which demonstrate how to mix Xlib code with the WINGs library. Xlib is the library which gives direct access to the X-server, and which is the underlying code to the WINGs library itself. It also contains a section which shows how to use OpenGL 3D graphics code in a WINGs frame. These extra sections do not explain all the details on the used libraries. However, by just following the code examples, you can reproduce their results, and change them to use them in your own programmes. + + +
    +

    +

    LAST: Step 2 Processing EventsContentsNEXT: Programming Details
    + + + diff --git a/WINGs_tutorial/WINGstep3_files/Buttons.jpeg b/WINGs_tutorial/WINGstep3_files/Buttons.jpeg new file mode 100644 index 0000000..2a3b0f7 Binary files /dev/null and b/WINGs_tutorial/WINGstep3_files/Buttons.jpeg differ diff --git a/WINGs_tutorial/WINGstep3_files/FirstWindow4.jpeg b/WINGs_tutorial/WINGstep3_files/FirstWindow4.jpeg new file mode 100644 index 0000000..4ab3fbb Binary files /dev/null and b/WINGs_tutorial/WINGstep3_files/FirstWindow4.jpeg differ diff --git a/WINGs_tutorial/WINGstep3_files/OpenFileDialog.jpeg b/WINGs_tutorial/WINGstep3_files/OpenFileDialog.jpeg new file mode 100644 index 0000000..bee009f Binary files /dev/null and b/WINGs_tutorial/WINGstep3_files/OpenFileDialog.jpeg differ diff --git a/WINGs_tutorial/WINGstep3_files/ScreenSize.jpeg b/WINGs_tutorial/WINGstep3_files/ScreenSize.jpeg new file mode 100644 index 0000000..456f8a7 Binary files /dev/null and b/WINGs_tutorial/WINGstep3_files/ScreenSize.jpeg differ diff --git a/WINGs_tutorial/WINGtoc.html b/WINGs_tutorial/WINGtoc.html new file mode 100644 index 0000000..7f9490d --- /dev/null +++ b/WINGs_tutorial/WINGtoc.html @@ -0,0 +1,126 @@ + + +3 Steps to Make a WINGs User Interface + + + + + + + + + +
    NEXT: Introduction
    +

    A WINGs based graphical user interface in three steps

    +

    CONTENTS

    +
      +
    1. Introduction +
    2. Step 1. Six lines show a window on the screen +
        +
      1. First application +
      2. Setting properties +
      3. Something is missing +
      +
    3. Step 2. Processing events +
      1. Closing the window +
      2. Closing the window in a different way +
      +
    4. Step 3. Adding widgets to a window +
      1. Adding buttons to a widget +
      2. Resize events +
      3. Adding the event handlers and widgets to the application +
      4. Frames +
      +
    5. Programming details +
      1. Count the windows +
      2. Icons and images +
      3. Virtual screen and resolution +
      4. Message log window +
      +
    6. Graphics programming details +
      1. The Drawable +
      2. Xlib Graphics Functions +
      3. An OpenGL Drawing Area +
      +
    7. Floating hierarchical menus +
      1. The menu widget +
      2. Window Manager Hints
      +
    8. Complete library description +
      1. General widgets +
      2. Frames +
      3. Panels +
      4. Windows +
      5. Views +
      6. Buttons +
      7. Button boxes +
      8. Expanding and pull-down buttons +
      9. Text fields +
      10. Labels +
      11. Sliders +
      12. Scrollable views +
      13. Message pop-up windows +
      14. Input dialogs +
      15. File selection dialogs +
      16. Text Areas +
      17. Split windows/views +
      18. Lists +
      19. Colour selection panels +
      20. Font selection panel +
      21. Tabbed views +
      22. Progress indicators +
      23. Event handlers +
      24. Selections +
      25. Screens +
      26. Image functions +
      27. Application wide functions +
      28. Notifications +
      29. Text balloons +
      30. Drag/drop functions +
      31. Network connections +
      32. Draw functions +
      33. Browser functions +
      34. Menu items +
      35. Utilities/redefined functions +
      36. Data types +
        1. WMColor +
        2. WMFont +
        3. WMArray +
        4. Trees +
        +
      37. ENUMs and #defines +
        1. List of event masks and corresponding events +
        2. Frame Title Positions +
        3. WM Image Positions +
        4. WMAlignment +
        5. Reliefs +
      +
    9. Appendix: list of examples
        +
      1. Minimal window +
      2. Responsive window +
      3. Clickable window +
      4. Window with buttons and text area +
      5. Window with buttons and text area using frames +
      6. Pixmap drawing +
      7. Xlib drawing +
      8. Menu creation +
      9. Menu and submenus +
      10. OpenGL in a frame +
      +
    10. GNU Free Documentation License +
    +

    +

    +
    +
    + Copyright (c) 2010 + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with no Invariant Sections, with no + Front-Cover Texts, and with no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + + + +

    diff --git a/WINGs_tutorial/glframe.c b/WINGs_tutorial/glframe.c new file mode 100644 index 0000000..5c86d89 --- /dev/null +++ b/WINGs_tutorial/glframe.c @@ -0,0 +1,283 @@ +#include +#include +#include + +#include +#include +#include + +#define CONTENTH 300 +#define CONTENTW 300 +#define CONTENTMARGIN 30 + + +struct couple{ + WMWindow *window; + WMFrame *frame; +} datacouple; + + +float red=252.0/256, green=88.0/256, blue=16.0/256; +float redb=252.0/256, greenb=242.0/256, blueb=80.0/256; + +int Attr[] = { GLX_RGBA, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 16, + GLX_DOUBLEBUFFER, + None}; +Display * display; +float alpha=0; + +void init(void) +{ +glClearColor (256/256, 256/256, 256/256, 0.0); +glPolygonMode(GL_FRONT, GL_FILL); +glPolygonMode(GL_BACK, GL_FILL); +glEnable(GL_DEPTH_TEST); +glShadeModel(GL_SMOOTH); + +glEnable(GL_LIGHTING); +GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f }; +GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8f, 1.0f }; +GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f }; +GLfloat position[] = { 2.0f, -0.1f, 2.0f, 1.0f }; +GLfloat position2[] = { -2.0f, -0.26f, -4.0f, 1.0f }; +glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); +glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); +//glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight); +glMateriali(GL_FRONT, GL_SHININESS, 98); +glLightfv(GL_LIGHT0, GL_POSITION, position2); +//glLightfv(GL_LIGHT1, GL_POSITION, position2); + +glEnable(GL_LIGHT0); +//glEnable(GL_LIGHT1); +glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); +//glColorMaterial(GL_FRONT, GL_SPECULAR); +glEnable(GL_COLOR_MATERIAL); +glShadeModel(GL_SMOOTH); +glCullFace( GL_BACK ); +glEnable( GL_CULL_FACE ); + +glEnable(GL_POLYGON_SMOOTH); +/*glEnable(GL_BLEND); +glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE); +//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);*/ + +} + +void normvector(float a, float aa, float aaa, float b, float bb, float bbb, float c, float cc, float ccc,float *result){ + float v1[3];float v2[3];float tmp; + + v1[0]=(b-a);v1[1]=(bb-aa);v1[2]=(bbb-aaa); + v2[0]=(b-c);v2[1]=(bb-cc);v2[2]=(bbb-ccc); + result[0]=(v1[1]*v2[2]-v1[2]*v2[1]); + result[1]=(v1[2]*v2[0]-v1[0]*v2[2]); + result[2]=(v1[0]*v2[1]-v1[1]*v2[0]); + tmp=sqrt(result[0]*result[0]+result[1]*result[1]+result[2]*result[2]); + result[0]/=tmp; + result[1]/=tmp; + result[2]/=tmp; +} + + +void redraw(XEvent * v,void *xw){ +Window win; +float z[3]; + +win = *(Window *)xw; + +glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); +glPushMatrix(); glShadeModel(GL_SMOOTH); + +glRotatef(alpha, 0, 1, 0); +if (alpha > 360) alpha =alpha-360; + +glBegin(GL_TRIANGLES); + +glColor3f(redb,greenb,blueb); +normvector(-0.85f, 0.0f, 0.0f,0.0f, 0.0f, 0.85f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.0f, 0.6f, 0.0f); + +normvector(0.0f, 0.0f,0.85f,0.85f, 0.0f, 0.0f,0.0f, 0.60f,0.0f,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.6f, 0.0f); + +glColor3f(red,green,blue); +normvector(0.85f, 0.0f, 0.0f,0.0f, 0.0f, -0.85f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(0.0f, 0.6f, 0.0f); + +normvector(0.0f, 0.0f, -0.85f,-0.85f, 0.0f, 0.0f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.6f, 0.0f); + +glColor3f(redb,greenb,blueb); +normvector(-0.85f, 0.0f, 0.0f,0.0f, -1.0f, 0.0f,0.0f, 0.0f, 0.85f,z); +glNormal3fv(z); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(0.0f, 0.0f, 0.85f); + +normvector(0.0f, 0.0f, 0.85f, 0.0f, -1.0f, 0.0f,0.85f, 0.0f, 0.0f ,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(0.85f, 0.0f, 0.0f); + +glColor3f(red,green,blue); +normvector(0.85f, 0.0f, 0.0f,0.0f, -1.0f, 0.0f, 0.0f, 0.0,-0.85f ,z); +glNormal3fv(z); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f,-1.0f, 0.0f); +glVertex3f(0.0f, 0.0f, -0.85f); + +normvector(0.0f, 0.0f, -0.85f,0.0f, -1.0f, 0.0f, -0.85f, 0.0f,0.0f ,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(-0.85f, 0.0f, 0.0f); + +glEnd(); + +glPopMatrix(); +glXSwapBuffers(display, win); +} + +setsize(unsigned int width, unsigned int height) +{ +glViewport(0, 0, width, height); +glMatrixMode(GL_PROJECTION); +glLoadIdentity(); +glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); +glMatrixMode (GL_MODELVIEW); +} + +void DoRotate(void *self,void *xwindow){ + XEvent event;int i=0; + alpha+=15; +redraw(NULL,(Window *)xwindow); +} + +void redo(XEvent * event,void *xw){ + switch (event->type) + { + case Expose: + if (event->xexpose.count!=0) break; + redraw(event,&event->xexpose.window); + break; + case ConfigureNotify: setsize(event->xconfigure.width, event->xconfigure.height); // assuming there will be an expose afterwards + break; + } +} + +void closeAll(WMWidget *self,void *data){ + WMDestroyWidget(self); + exit(0); +} + +static void resizeHandler(void *data, WMNotification *notif){ + struct couple *tmp;tmp=(struct couple *)data; + WMSize size = WMGetViewSize(WMWidgetView(tmp->window)); + WMResizeWidget(tmp->frame, size.width -2*CONTENTMARGIN, size.height-2*CONTENTMARGIN); +} + +void getargs(int argc, char **argv){ +if (argc>3) { + redb=red=(float)atoi(argv[1])/256; + greenb=green=(float)atoi(argv[2])/256; + blueb=blue=(float)atoi(argv[3])/256; +} + if (argc>6){ + redb=(float)atoi(argv[4])/256; + greenb=(float)atoi(argv[5])/256; + blueb=(float)atoi(argv[6])/256; + } +} + +int main (int argc, char **argv){ + +WMFrame *glframe; +WMScreen *screen; +WMWindow *window; +WMButton *Button; + + +/* Xlib and glX variables */ +Window win; +XVisualInfo *xvVisualInfo; +Colormap cmColorMap; +XSetWindowAttributes winAttr; +GLXContext glXContext; + +getargs(argc,argv); +WMInitializeApplication("GLWindow", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); + + if(!glXQueryExtension(display, NULL, NULL)){wwarning("X server does not have GLX\n"); return 0; } + +window = WMCreateWindow(screen, "Main"); +WMResizeWidget(window, CONTENTW+2*CONTENTMARGIN, CONTENTH+2*CONTENTMARGIN*CONTENTH/CONTENTW); +WMSetWindowAspectRatio(window, CONTENTW,CONTENTH,CONTENTW,CONTENTH); +WMSetWindowCloseAction(window, closeAll, NULL); +WMSetWindowTitle(window,"GL Frame"); +WMRealizeWidget(window); +datacouple.window=window; +WMSetViewNotifySizeChanges(WMWidgetView(window), True); +WMAddNotificationObserver(resizeHandler, &datacouple, WMViewSizeDidChangeNotification, WMWidgetView(window)); + + +glframe = WMCreateFrame(window); +datacouple.frame=glframe; +WMResizeWidget(glframe, CONTENTW, CONTENTH); +WMMoveWidget(glframe, CONTENTMARGIN,CONTENTMARGIN); +WMRealizeWidget(glframe); + +Button=WMCreateButton(window, WBTMomentaryPush); +WMSetButtonAction(Button, DoRotate,&win); +WMSetButtonText(Button,"Turn"); +WMMoveWidget(Button, CONTENTMARGIN,2); +WMRealizeWidget(Button); +WMMapWidget(Button); + +/* get the frame's X window value */ +win =W_VIEW_DRAWABLE(WMWidgetView(glframe)); +WMCreateEventHandler(WMWidgetView(glframe), ExposureMask|StructureNotifyMask,redo,&win); + +xvVisualInfo = glXChooseVisual(display, DefaultScreen(display), Attr); + if(xvVisualInfo == NULL) {wwarning("No visualinfo\n");return 0;} + +cmColorMap = XCreateColormap(display,RootWindow(display, DefaultScreen(display)), xvVisualInfo->visual, AllocNone); + +winAttr.colormap = cmColorMap; +winAttr.border_pixel = 0; +winAttr.background_pixel = 0; +winAttr.event_mask = ExposureMask | ButtonPressMask |StructureNotifyMask| KeyPressMask; + +XChangeWindowAttributes(display,win,CWBorderPixel | CWColormap | CWEventMask,&winAttr); +glXContext = glXCreateContext(display, xvVisualInfo, None, True); + if(!glXContext) {wwarning("glX cannot create rendering context\n");return 0;} + +glXMakeCurrent(display, win, glXContext); + +WMMapWidget(glframe); +init(); +setsize(CONTENTW,CONTENTH); +WMMapWidget(window); + +WMScreenMainLoop(screen); + +return 0; +} diff --git a/WINGs_tutorial/glframe.c.1 b/WINGs_tutorial/glframe.c.1 new file mode 100644 index 0000000..9fd9ef3 --- /dev/null +++ b/WINGs_tutorial/glframe.c.1 @@ -0,0 +1,285 @@ +#include +#include +#include +#include +#include + +#include +#include +#include + +#define CONTENTH 300 +#define CONTENTW 300 +#define CONTENTMARGIN 30 + + +struct couple{ + WMWindow *window; + WMFrame *frame; +} datacouple; + + +float red=252.0/256, green=88.0/256, blue=16.0/256; +float redb=252.0/256, greenb=242.0/256, blueb=80.0/256; + +int Attr[] = { GLX_RGBA, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 16, + GLX_DOUBLEBUFFER, + None}; +Display * display; +float alpha=0; + +void init(void) +{ +glClearColor (256/256, 256/256, 256/256, 0.0); +glPolygonMode(GL_FRONT, GL_FILL); +glPolygonMode(GL_BACK, GL_FILL); +glEnable(GL_DEPTH_TEST); +glShadeModel(GL_SMOOTH); + +glEnable(GL_LIGHTING); +GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f }; +GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8f, 1.0f }; +GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f }; +GLfloat position[] = { 2.0f, -0.1f, 2.0f, 1.0f }; +GLfloat position2[] = { -2.0f, -0.26f, -4.0f, 1.0f }; +glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); +glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); +//glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight); +glMateriali(GL_FRONT, GL_SHININESS, 98); +glLightfv(GL_LIGHT0, GL_POSITION, position2); +//glLightfv(GL_LIGHT1, GL_POSITION, position2); + +glEnable(GL_LIGHT0); +//glEnable(GL_LIGHT1); +glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); +//glColorMaterial(GL_FRONT, GL_SPECULAR); +glEnable(GL_COLOR_MATERIAL); +glShadeModel(GL_SMOOTH); +glCullFace( GL_BACK ); +glEnable( GL_CULL_FACE ); + +glEnable(GL_POLYGON_SMOOTH); +/*glEnable(GL_BLEND); +glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE); +//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);*/ + +} + +void normvector(float a, float aa, float aaa, float b, float bb, float bbb, float c, float cc, float ccc,float *result){ + float v1[3];float v2[3];float tmp; + + v1[0]=(b-a);v1[1]=(bb-aa);v1[2]=(bbb-aaa); + v2[0]=(b-c);v2[1]=(bb-cc);v2[2]=(bbb-ccc); + result[0]=(v1[1]*v2[2]-v1[2]*v2[1]); + result[1]=(v1[2]*v2[0]-v1[0]*v2[2]); + result[2]=(v1[0]*v2[1]-v1[1]*v2[0]); + tmp=sqrt(result[0]*result[0]+result[1]*result[1]+result[2]*result[2]); + result[0]/=tmp; + result[1]/=tmp; + result[2]/=tmp; +} + + +void redraw(XEvent * v,void *xw){ +Window win; +float z[3]; + +win = *(Window *)xw; + +glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); +glPushMatrix(); glShadeModel(GL_SMOOTH); + +glRotatef(alpha, 0, 1, 0); +if (alpha > 360) alpha =alpha-360; + +glBegin(GL_TRIANGLES); + +glColor3f(redb,greenb,blueb); +normvector(-0.85f, 0.0f, 0.0f,0.0f, 0.0f, 0.85f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.0f, 0.6f, 0.0f); + +normvector(0.0f, 0.0f,0.85f,0.85f, 0.0f, 0.0f,0.0f, 0.60f,0.0f,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.6f, 0.0f); + +glColor3f(red,green,blue); +normvector(0.85f, 0.0f, 0.0f,0.0f, 0.0f, -0.85f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(0.0f, 0.6f, 0.0f); + +normvector(0.0f, 0.0f, -0.85f,-0.85f, 0.0f, 0.0f,0.0f, 0.6f, 0.0f,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, 0.6f, 0.0f); + +glColor3f(redb,greenb,blueb); +normvector(-0.85f, 0.0f, 0.0f,0.0f, -1.0f, 0.0f,0.0f, 0.0f, 0.85f,z); +glNormal3fv(z); +glVertex3f(-0.85f, 0.0f, 0.0f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(0.0f, 0.0f, 0.85f); + +normvector(0.0f, 0.0f, 0.85f, 0.0f, -1.0f, 0.0f,0.85f, 0.0f, 0.0f ,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, 0.85f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(0.85f, 0.0f, 0.0f); + +glColor3f(red,green,blue); +normvector(0.85f, 0.0f, 0.0f,0.0f, -1.0f, 0.0f, 0.0f, 0.0,-0.85f ,z); +glNormal3fv(z); +glVertex3f(0.85f, 0.0f, 0.0f); +glVertex3f(0.0f,-1.0f, 0.0f); +glVertex3f(0.0f, 0.0f, -0.85f); + +normvector(0.0f, 0.0f, -0.85f,0.0f, -1.0f, 0.0f, -0.85f, 0.0f,0.0f ,z); +glNormal3fv(z); +glVertex3f(0.0f, 0.0f, -0.85f); +glVertex3f(0.0f, -1.0f, 0.0f); +glVertex3f(-0.85f, 0.0f, 0.0f); + +glEnd(); + +glPopMatrix(); +glXSwapBuffers(display, win); +} + +setsize(unsigned int width, unsigned int height) +{ +glViewport(0, 0, width, height); +glMatrixMode(GL_PROJECTION); +glLoadIdentity(); +glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); +glMatrixMode (GL_MODELVIEW); +} + +void DoRotate(void *self,void *xwindow){ + XEvent event;int i=0; + alpha+=15; +redraw(NULL,(Window *)xwindow); +} + +void redo(XEvent * event,void *xw){ + switch (event->type) + { + case Expose: + if (event->xexpose.count!=0) break; + redraw(event,&event->xexpose.window); + break; + case ConfigureNotify: setsize(event->xconfigure.width, event->xconfigure.height); // assuming there will be an expose afterwards + break; + } +} + +void closeAll(WMWidget *self,void *data){ + WMDestroyWidget(self); + exit(0); +} + +static void resizeHandler(void *data, WMNotification *notif){ + struct couple *tmp;tmp=(struct couple *)data; + WMSize size = WMGetViewSize(WMWidgetView(tmp->window)); + WMResizeWidget(tmp->frame, size.width -2*CONTENTMARGIN, size.height-2*CONTENTMARGIN); +} + +void getargs(int argc, char **argv){ +if (argc>3) { + redb=red=(float)atoi(argv[1])/256; + greenb=green=(float)atoi(argv[2])/256; + blueb=blue=(float)atoi(argv[3])/256; +} + if (argc>6){ + redb=(float)atoi(argv[4])/256; + greenb=(float)atoi(argv[5])/256; + blueb=(float)atoi(argv[6])/256; + } +} + +int main (int argc, char **argv){ + +WMFrame *glframe; +WMScreen *screen; +WMWindow *window; +WMButton *Button; + + +/* Xlib and glX variables */ +Window win; +XVisualInfo *xvVisualInfo; +Colormap cmColorMap; +XSetWindowAttributes winAttr; +GLXContext glXContext; + +getargs(argc,argv); +WMInitializeApplication("GLWindow", &argc, argv); +display = XOpenDisplay(""); +screen = WMCreateScreen(display, DefaultScreen(display)); + + if(!glXQueryExtension(display, NULL, NULL)){wwarning("X server does not have GLX\n"); return 0; } + +window = WMCreateWindow(screen, "Main"); +WMResizeWidget(window, CONTENTW+2*CONTENTMARGIN, CONTENTH+2*CONTENTMARGIN*CONTENTH/CONTENTW); +WMSetWindowAspectRatio(window, CONTENTW,CONTENTH,CONTENTW,CONTENTH); +WMSetWindowCloseAction(window, closeAll, NULL); +WMSetWindowTitle(window,"GL Frame"); +WMRealizeWidget(window); +datacouple.window=window; +WMSetViewNotifySizeChanges(WMWidgetView(window), True); +WMAddNotificationObserver(resizeHandler, &datacouple, WMViewSizeDidChangeNotification, WMWidgetView(window)); + + +glframe = WMCreateFrame(window); +datacouple.frame=glframe; +WMResizeWidget(glframe, CONTENTW, CONTENTH); +WMMoveWidget(glframe, CONTENTMARGIN,CONTENTMARGIN); +WMRealizeWidget(glframe); + +Button=WMCreateButton(window, WBTMomentaryPush); +WMSetButtonAction(Button, DoRotate,&win); +WMSetButtonText(Button,"Turn"); +WMMoveWidget(Button, CONTENTMARGIN,2); +WMRealizeWidget(Button); +WMMapWidget(Button); + +/* get the frame's X window value */ +win =W_VIEW_DRAWABLE(WMWidgetView(glframe)); +WMCreateEventHandler(WMWidgetView(glframe), ExposureMask|StructureNotifyMask,redo,&win); + +xvVisualInfo = glXChooseVisual(display, DefaultScreen(display), Attr); + if(xvVisualInfo == NULL) {wwarning("No visualinfo\n");return 0;} + +cmColorMap = XCreateColormap(display,RootWindow(display, DefaultScreen(display)), xvVisualInfo->visual, AllocNone); + +winAttr.colormap = cmColorMap; +winAttr.border_pixel = 0; +winAttr.background_pixel = 0; +winAttr.event_mask = ExposureMask | ButtonPressMask |StructureNotifyMask| KeyPressMask; + +XChangeWindowAttributes(display,win,CWBorderPixel | CWColormap | CWEventMask,&winAttr); +glXContext = glXCreateContext(display, xvVisualInfo, None, True); + if(!glXContext) {wwarning("glX cannot create rendering context\n");return 0;} + +glXMakeCurrent(display, win, glXContext); + +WMMapWidget(glframe); +init(); +setsize(CONTENTW,CONTENTH); +WMMapWidget(window); + +WMScreenMainLoop(screen); + +return 0; +} diff --git a/dev/index.html b/dev/index.html new file mode 100644 index 0000000..465e1b5 --- /dev/null +++ b/dev/index.html @@ -0,0 +1,119 @@ + + + + Window Maker: Development + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    Development

    + +

    Here are some pieces of information regarding development in Window Maker.

    + +

    Source code versioning system

    + +

    The source code for Window Maker is contained in a git +repository located here. To obtain a +full-fledged copy of the repository do this:

    + +
    git clone git://repo.or.cz/wmaker-crm.git
    +
    + +

    There are two main branches in the repository, called ‘master’ and ‘next’. The +purpose of the ‘next’ branch is to add and extra layer of testing before the +patches hit the ‘master’ branch. It is rebased when needed. The ‘master’ branch +should ideally never be rebased – if it is, run to the nearest +anti-nuclear bunker.

    + +

    Submitting patches

    + +

    The Window Maker source code follows the +coding style of the linux kernel. +Respect it when submitting patches.

    + +

    If you are not familiar with git, take a look at the +git homepage – it contains the kind of documentation you +need to get started. You should also read the file contained in the Window Maker +repository The perfect Window Maker +patch +which gives you further details about patches to Window Maker.

    + +

    Patches not submitted according to the above guidelines will not be accepted.

    + +

    Last but not least, patches doing code cleanups are STRONGLY encouraged.

    + +

    Git repository for dockapps

    + +

    There is also a git repository containing a +few dockapps which apparently have no maintainers anymore. Patches for those +dockapps (or to include more apps) can also be sent to +wmaker-dev@googlegroups.com.

    + +

    Some sources of information

    + + + +
    +
    +
    +
    Window Maker: Development
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/dockapps/index.html b/dockapps/index.html new file mode 100644 index 0000000..cd4315b --- /dev/null +++ b/dockapps/index.html @@ -0,0 +1,10 @@ + + + + Window Maker: Dockapps + + + + Dockapps have moved to dockapps.net. + + diff --git a/docs/FAQ.html b/docs/FAQ.html new file mode 100644 index 0000000..cfbbef9 --- /dev/null +++ b/docs/FAQ.html @@ -0,0 +1,1864 @@ + + + + Window Maker: FAQ + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    FAQ

    + +

    Have questions about Window Maker? If so, look no further. Below is our +collection of Frequently Asked Questions and their corresponding answers. Many +of these have been adapted from the original FAQ +by Chris Green. Questions are routinely taken and added in from the mailing +lists and IRC forums.

    +
    +

    Table of Contents

    + +
    +
    +
    +

    +1 Introduction to Window Maker

    +
    +

    +1.1 What is Window Maker?

    +

    Window Maker is an X11 window manager originally designed to provide +integration support for the GNUstep Desktop Environment. In every way +possible, it reproduces the elegant look and feel of the NEXTSTEP[tm] user +interface. It is fast, feature rich, easy to configure, and easy to use. It is +also free software and part of the GNU Project, with contributions being made +by programmers from around the world

    +
    +
    +

    +1.2 Where can I get Window Maker?

    +

    Window Maker can be obtained from the official website, http://windowmaker.org/, +or from various mirror sites listed at http://windowmaker.org/mirrors.html

    +
    +
    +

    +1.3 Where are the mailing lists and archives?

    +

    All information regarding the Window Maker +mailing lists can be found at http://windowmaker.org/lists.html

    +
    +
    +

    +1.4 Where can I find more documentation?

    +

    Additional documentation can be found in the Window Maker source distribution, +or at http://windowmaker.org/documentation.html

    +
    +
    +

    +1.5 What is an appicon?

    +

    An appicon is the icon produced by an application 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 rxvt when testing, because many versions of rxvt do not +properly set their window attributes).

    + +

    For a more indepth discussion of how an appicon relates to Window Maker, see +question 1.10

    +
    +
    +

    +1.6 How can I get a question added to the FAQ?

    +

    For now, the best method is to E-mail your question to faq@windowmaker.org. We +are working on a web-based submission form to our FAQ system, which will enable +users to submit questions for review.

    +
    +
    +

    +1.7 How do I report bugs?

    + + +

    You can look at the BUGFORM file in the source distribution of Window Maker. +Alternatively, you can use the Window Maker Bug Tracker 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.windowmaker.org:/cvsroot"
    +cvs login
    +

    There is no password, so simply hit enter when prompted.

    +

    Then issue the following 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 -dP
    +

    inside the WindowMaker directory.

    +

    For more detailed CVS instructions, please visit +http://windowmaker.org/development-cvs.html

    +
    +
    +

    +1.9 Where can I find the Window Maker IRC channel?

    + +

    The official Window Maker IRC channel can be accessed by connecting to +irc.windowmaker.org on port 6667, and joining #WindowMaker

    +
    +
    +

    +1.10 What is the difference between appicons, mini-windows, and minimized applications?

    +

    Thanks to Jim Knoble for this answer:

    +

    Many window managers are capable of turning large windows into smaller icons +which represent the window yet don't take as much screen real estate. We're +all familiar with that model.

    +

    Window Maker has two kinds of these icons. One kind is created when an +application - technically, a window group - is started. It represents the +entire application and is called an appicon. Such icons are square tiles +containing only the picture which represents the application; they have no +titles.

    +

    The second kind of icon in Window Maker is created when a particular window +(possibly one belonging to an application displaying more than one window) is +miniaturized (which is the same action as minimizing or iconifying in +other window management models) using the miniaturization button on the +window's titlebar. These miniaturized windows are called miniwindows and can +normally be distinguished from appicons by their small titlebar at the top of +the tile.

    +
    +
    +

    +1.11 How do I make sense of Window Maker's version number scheme?

    +

    The numbering scheme is relatively simple, and is in the format of three +numbers separated by dots. The first number is the "major" revision number. +The second is the "minor" revision number. And finally, the third is the "patch +level" number.

    +

    To put this all into perspective, let's examine the version number "0.65.1". +This number signifies that there has not been a major revision release, that +its minor revision is newer than the previous one (0.64.x), and that it's on +the first patch level after the 0.65.0 release. This still might be confusing, +so go away with this in mind: numbers ending in .0 tend to be new feature +releases but less stable than .1, .2, .3 patch level releases, the latter of +which are used to fix bugs.

    +

    It is generally safe to go with the highest numbered patch release.

    +
    +
    +
    +
    +

    +2 Installing Window Maker

    +
    +

    +2.1 Why are no icons showing up after installing Window Maker?

    +

    As of WindowMaker version 0.15.0, the default setup includes .tiff icons which +require you to have compiled Window Maker with libtiff support. For assistance +on compiling libtiff, see the following question.

    +
    + +
    +

    +2.3 How do I switch CDE's window manager to use WindowMaker?

    +
    +

    +2.3.1 Method 1:

    +

    Peter Ilberg gives us this answer:

    +

    Install WM wherever you want it, mine is in /opt/WindowMaker-0.16.0 (eg. use +./configure --prefix=/opt/WindowMaker-0.16.0). Run the install script +wmaker.inst in your home directory.

    +

    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.

    +

    Make your .xsession/.xinitrc executable (VERY IMPORTANT, wmaker.inst did NOT do +this automatically for me) using eg.

    +
    chmod ugo+x .xsession
    +

    Your .xsession/.xinitrc should look something like this:

    +
    #!/bin/sh
    +
    +<some other init stuff that you want/need>
    +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". 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.

    +
    +
    +

    +2.3.2 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:

    +
    Dtsession*wmStartupCommand: <path to WindowMaker executable>
    +

    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 Window Maker heaven ;).

    +
    +
    +

    +2.3.3 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 Window Maker 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 Window Maker.

    +
    +
    +

    +2.3.4 Owen Stenseth adds:

    +

    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.

    +
    +
    +
    +

    +2.4 Do I need to rerun wmaker.inst with every new version of Window Maker?

    +

    Dan Pascu reveals the answer:

    +

    If this is necessary, it will be listed in the NEWS file included in the source +distribution. Since 0.15.x, the domain files have been changed in such a way +that re-running wmaker.inst is redundant. The user config files are by default +merged in with the global ones normally located in +/usr/local/share/WindowMaker/Defaults. So, even if new options are added, they +should be automatically added to the environment.

    +
    +
    +

    +2.5 Why am I only getting a root menu with xterm and exit items?

    +

    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. For example:

    +
    $ file `which cpp`
    +/usr/bin/cpp link to /usr/bin/cpp-2.95
    +

    Another possibility is your /usr/X11/lib/X11/xinit/xinitrc is a broken symlink. +Either create a new symlink, or do something like:

    +
    $ cp /usr/X11/lib/X11/xinit/xinitrc.fvwm2 \
    +   /usr/X11/lib/X11/xinit/xinitrc.wmaker
    +$ ln -sf /usr/X11/lib/X11/xinit/xinitrc.wmaker \
    +   /usr/X11/lib/X11/xinit/xinitrc
    +

    then just edit /usr/X11/lib/X11/xinit/xinitrc and replace the exec of 'fvwm2' +by '/usr/local/bin/wmaker' (should be somewhere towards the end of the file, +most probably the very last line).

    +

    Thanks to Tomas Szepe for the second part.

    +
    +
    +

    +2.6 How do I get Window Maker to use more than 16 colors on my SGI Indy Workstation?

    +

    Thanks to Peter H. Choufor 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.7 Using WindowMaker with Solaris 2.6 CDE

    +

    Thanks to Rob Funk for this answer:

    +

    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. This should work for any version. When you run wmaker.inst the +first time, allow it to make changes to the .xinitrc file. Mine looks 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 Window Maker +instead of OpenWindows. In order to choose Window Maker, you simply choose +"OpenWindows Desktop" in the "Options - Session" Menus And Choose "CDE Desktop" +if you want CDE.

    +

    The color schemes and settings for Window Maker are seperate from CDE. I tested +on a SPARC 10, but I assume Solaris x86 would work also.

    +

    (webmaster note: It works fine on Solaris x86)

    +
    +
    +

    +2.8 How do I install Window Maker on a Solaris box?

    +

    Here are some hints from John Kemp:

    +

    Installing Window Maker on a Solaris 2.6 box might require one or two little +hints. Here you are (this was on a system running xdm by the way, but similar +suggestions apply otherwise):

    +
      +
    1. +

      /usr/openwin/lib/X11/xdm/Xservers like this:

      +
      :0 local /usr/openwin/bin/X -dev /dev/fb defdepth 24 defclass TrueColor
      +
    2. +
    3. +

      Turn off shm in the WindowMaker configure:

      +
      $ ./configure --disable-shm
      +
    4. +
    5. +

      might have to modify your LD_LIBRARY_PATH:, or make "wmaker" a script that +does it for you (mv wmaker wmaker.exe):

      +
      LD_LIBRARY_PATH=/usr/local/lib:/usr/local/X11/lib:/usr/lib:/usr/openwin/lib
      +export LD_LIBRARY_PATH
      +/usr/local/bin/wmaker.exe $*
      +
    6. +
    +

    The real key is the "--disable-shm".

    +

    (webmaster note: Window Maker should work fine with SHM enabled, at least it +does under Solaris 8. Try the default first, and then use this if you run into +problems with it)

    +
    +
    +

    +2.9 How do I fix an error such as libwraster.so.1: cannot open shared object file?

    +

    If you have an error when running Window Maker such as

    +
    libwraster.so.1: cannot open shared object file
    +

    These are the instructions for Linux.

    +

    First, make sure that /usr/local/lib ( or whatever directory you installed +Window Maker to) is listed in your /etc/ld.so.conf ). You need to run ldconfig +so the new shared libraries will be loaded. After running ldconfig as root, the +linker should properly load the libraries. You need to run this every time you +update Window Maker.

    +

    Thanks to Joseph Czapiga, the BSD procedure for adding shared library +directories is:

    +
    ldconfig -m /usr/local/lib  (m means merge)
    +
    +
    +

    +2.10 How do I fix an error dealing with aclocal: configure.in: 15: macro 'AM_PROG_LIBTOOL' not found in library?

    +

    You need to install libtool. It also must be a libtool different from version +1.2b ( shipped with redhat 5.2 ). You can get libtool from ftp.gnu.org/pub/gnu +Make sure the autoconf and automake versions you have installed are at least:

    +
      +
    • autoconf 2.12

    • +
    • automake 1.3

    • +
    • libtool 1.2

    • +
    +

    From Blaine Horrocks:

    +

    You can also work around this problem on RedHat5.2 by copying the distributed +aclocal.m4 to acinclude.m4 before running configure for the first time. +Configure works fine and doing the make succeeds.

    +
    +
    +

    +2.11 When I run wmaker, it quits complaining about '__register_frame_info'

    +

    This is related to having compiled Window Maker on a system whose libraries +were compiled by egcs or gcc 2.8.0, and then using the binaries on a system +whose libraries were compiled by gcc 2.7.2.x

    +

    Try compiling Window Maker with the newer gcc or recompile your system +libraries with the older gcc. It's generally a bad idea to mix and match.

    +
    + +
    +

    +2.13 How do I start Window Maker after running wmaker.inst?

    +

    As of version 0.53.0, the wmaker.inst script will modify your X startup script +(.xinitrc or .Xclients or .Xsession) to do something thats (hopefully) +appropriate.

    +

    In order to run wmaker, a user needs to have an ~/.xinitrc file consisting of +something similar to

    +
    #!/bin/sh
    +exec wmaker
    +

    This will vary from system to system, but the existance of an .xinitrc file +will generally override the system defaults.

    +
    + + +
    +

    +2.16 How do I fix an error similar to "wrlib: could not allocate shared memory segment: invalid argument"

    +

    This relates to a shared memory problem on Solaris. Usually one can't see it - +but it is visible if X is started from command line (or fail-safe session for +that matter). In any of the cases, on the stderr you get an error message like +this:

    +
    "wrlib: could not allocate shared memory segment: invalid argument"
    +

    This one is generated by wrlib if Window Maker is compiled with shared-memory +usage enabled (which is the default). The explanation is that Solaris by +default comes with a shared memory segment size of maximum 1 M. What happends +is that if you have a really-really cool(tm) background, it is usually much +bigger than that 1 M segment of shared memory. To see your defaults relating +the IPC settings check the output of the "sysdef" command (look for IPC Shared +Memory). There you should see the maximum allocable size for a shared memory +segment. If it is less than 5 M you should really increase it by adding the +following line in your /etc/system file:

    +
    set shmsys:shminfo_shmmax=20971520
    +
      +
    • Make sure you don't already have this value set. If you do, simply increase +the value. In case you have a much bigger value, stick to what you have, +because you should have no problems with it.

    • +
    • The value allows a maximum segment size of 20 M, which really should be +enough for anyone. If not, try using a smaller background image!

    • +
    • Make sure you spell the line exactly as shown, otherwise at boot time the +kernel will complain of not finding such a module name and will not set a +thing about it!

    • +
    • Make sure you don't delete other lines or modify them "beyond recognition", +for evil things may happen at boot time.

    • +
    +

    After adding this to your /etc/system you need to reboot in order for the new +limit to take effect. Also, you may want to check the new limit just to make +sure it has been set.

    +

    Thanks to Bogdan Iamandei for this answer.

    +
    +
    +

    +2.17 How do I add Window Maker to the Solaris dtlogin screen?

    +

    The two files that determine alternate window managers are:

    +
    /usr/dt/config/C/Xresources.d/Xresources.*
    +/usr/dt/config/Xsession.*
    +

    If you look in there, you'll find Xresources.ow and Xsession.ow, respectively. +All you need are two files that set up Window Maker (or any other window +manager) in a similar fashion, calling them Xresources.wm and Xsession.wm (or +whichever extension you prefer).

    +

    Here is an example setup:

    +
    # **************************************************************************
    +#
    +# Window Maker config file
    +# Mike Bland <mbland@cmu.edu>
    +#
    +# /usr/dt/config/C/Xresources.d/Xresources.wm
    +#
    +# used by dtlogin
    +#
    +# **************************************************************************
    +
    +Dtlogin*altDtsIncrement:        True
    +
    +Dtlogin*altDtName:      Window Maker
    +Dtlogin*altDtKey:       /usr/local/bin/wmaker
    +Dtlogin*altDtStart:     /usr/dt/config/Xsession.wm
    +#Dtlogin*altDtLogo:     /usr/local/share/logos/WM_logo.xpm
    +

    Once I get a logo ready, I'll add it to the dtlogin screen by uncommenting the +last line.

    +

    And this example script:

    +
    #!/bin/ksh
    +# **************************************************************************
    +#
    +# Window Maker startup script
    +# Mike Bland <mbland@cmu.edu>
    +# /usr/dt/config/Xsession.wm
    +#
    +# used by dtlogin
    +#
    +# **************************************************************************
    +
    +. /usr/local/etc/.profile       # Sources the file containing necessary
    +                                # environment variables (especially
    +                                # LD_LIBRARY_PATH=/usr/local/lib:...);
    +                                # make sure it's executable.
    +
    +WINDOW_MANAGER=/usr/local/bin/wmaker
    +
    +export WINDOW_MANAGER
    +
    +/usr/local/bin/wmaker
    +
    +
    +

    +2.18 What happened to libPropList?

    +

    The libPropList dependency has been removed as of Window Maker version 0.70.0, +and is replaced by cleaner, more robust code in the WINGs toolkit. This new +code maintains existing proplist compatibility, so there are no visable changes +for users, and existing file formats will work as they did before.

    +

    For developers, there is a proplist-compat.h header that provides a mapping +between the old and new function names. See the comments in this file for +further instructions.

    +
    +
    +
    +
    +

    +3 Configuring Window Maker

    +
    +

    +3.1 What are those files inside my ~/GNUstep directory?

    +

    Here is a synopsis of the files in ~/GNUstep

    +
      +
    • ~/GNUstep/WindowMaker/WindowMaker is main config file. This file controls +options such as keybindings, fonts, pixmaps, and focus modes.

    • +
    • ~/GNUstep/WindowMaker/WMWindowAttributes controls the "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 is the file that is automatically generated and +contains the current dock settings. It is not recommended to edit this file +by hand.

    • +
    • ~/GNUstep/Defaults/WMRootMenu specifies what file to use as the root menu. In +Window Maker 0.19.0 and higher, this file should be replaced by plmenu from +~/GNUstep/Defaults/WindowMaker so that one can use WPrefs.app to edit the +menu.

    • +
    • ~/GNUstep/Library/WindowMaker/menu is used to change your root menu, if you +are using the old menu style.

    • +
    +
    +
    +

    +3.2 How do I enable the normal X sloppy focus mode?

    +

    If you are using WPrefs, you can choose the Window Focus Prefrences tab and +then select the Input Focus Mode Slider.

    +

    Scroll Down and choose Sloppy Focus Mode.

    +

    You may also use a text editor on ~/GNUstep/Defaults/WindowMaker and change +the following:

    +
    FocusMode = sloppy;
    +
    +
    +

    +3.3 How do I get my auto-arrange icons to work?

    +

    In WPrefs, choose the Icon Prefrences Tab and select the Auto Arrange Icons Checkbox. Or in ~/GNUstep/Defaults/WindowMaker set

    +
    AutoArrangeIcons=YES;
    +

    and the icons should now auto-arrange.

    +
    +
    +

    +3.4 How do I get my Meta-Tab to cycle through windows correctly?

    +

    To use WPrefs to modify these, choose the Ergonomic Prefrences tab and +check Raise window when switching focus with keyboard (Circulate Raise)

    +

    Or you can use a text editor to make sure that these settings are in your +~/GNUstep/Defaults/WindowMaker file:

    +
    CirculateRaise = YES;
    +RaiseDelay = 1;
    +

    As of 0.61.0, MS Window's Style application tabbing is supported by default.

    +
    +
    +

    +3.5 How do I get a tile background for my appicons (those things in the dock)?

    +

    These can all be adjusted by the Appearance Preferences tab in WPrefs.

    +

    Select the tile and then choose the edit texture dialog. Then you may choose +any of the different tile background options in the The old text editor method +is provided below for convience.

    +

    You need to change one line in your '~/GNUstep/Defaults/WindowMaker' file.

    +
    IconBack = (spixmap, tile.black.xpm, white);
    +

    The last parameter is the color that fills in any transparent parts of your +icon.

    +
    +
    +

    +3.6 How do you dock <insert program here> that doesn't have an appicon in the new version of WindowMaker?

    +

    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.

    +

    This should allow you do dock the program normally.

    +

    Dan Pascu adds:

    +

    Emulate Appicon does exactly the same as dockit. So if Emulate Appicon does not +work, dockit will not work either. For such apps you can do nothing. They are +badly coded (they do not set the instance.class hints). For these Attributes +are also not available, since attributes apply to an instance and/or class +hint.

    +

    Note: Dockit was previously distributed with Window Maker and was launched from +the top dock icon.

    +

    Elliott Potter adds:

    +

    There's another way to dock applications that misbehave ... I've only done this +with a couple of things (Adobe AcroRead is the only one I remember at the +moment).

    +

    If Attributes -> Advanced Options -> Emulate Application Icon doesn't work:

    +
      +
    • Dock another application to the clip, where you want your application to go. +I used gv, but anything you can dock will work.

    • +
    • Quit WindowMaker

    • +
    • +

      Edit ~/GNUstep/Defaults/WMState.

      +

      If you're docking to the clip, scroll down to the Workspaces section. +When you find whatever you docked, you'll see:

      +
      {
      +    Command = gv;
      +    Name = GV.gv;
      +    AutoLaunch = No;
      +    Forced = No;
      +    BuggyApplication = No;
      +    Position = "6,0"
      +    Omnipresent = No;
      +    DropCommand = "gv %d";
      +},
      +

      Edit it to use the info for your new application:

      +
      {
      +     Command = acroread;         # use the full pathname if you have to
      +     Name = acroread.acroread;
      +     AutoLaunch = No;
      +     Forced = No;
      +     BuggyApplication = No;
      +     Position = "6,0"
      +     Omnipresent = No;
      +     DropCommand = "acroread %s";
      +},
      +

      Then edit WMWindowAttributes, and add a line for your application's +icon...you can edit the line that was inserted, or make a new one - I +just make a new one:

      +
      acroread.acroread = {Icon = pdf.tiff;};
      +

      Then re-start WindowMaker, and your icon should be there! You can move it +around like any other docked app now, but the Attributes section still won't +work.

      +
    • +
    +
    +
    +

    +3.7 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 go to the attributes menu. Click on Window +Attributes and click the the Disable titlebar and Disable Resizebar options. +Click Save, and then click Apply then close the Attributes panel.

    +

    By Default, to get back to the attributes menu, use the key combination +Control-Esc.

    +
    +
    +

    +3.8 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 Window Maker domain database
    +     -D <domain>
    +             update <domain> database
    +     -c <cpc>
    +             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. 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 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 - <domain> is same as above, but will update the domain <domain> +instead of the default Window Maker domain.

    • +
    • -c <cpc> 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.

    • +
    +

    The following line is straight from your WindowMaker-0.15.x +~/GNUstep/Library/WindowMaker/menu file and should all be on one line.

    +

    "Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds +WITH wmsetbg -u -t

    +

    This should give you an idea on how to add other entries for different image +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

    +
    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):

    +
    xv -root -quit -rmodeX ~/background.jpg
    +

    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)

    +
    "More Backgrounds" OPEN_MENU /home/whoever/backgrounds xv -root -maxpect -quit
    +
    +
    +

    +3.9 Can I put pixmaps in my root menu and title bars?

    +

    Put the pixmaps in a directory that is located in your pixmap path set on +Search Path Configuration Tab.

    +

    Then switch Appearance Preferences tab and select what widget you would to +adjust under the Texture tab. Click edit. Chose an image texture format and +then search for the texture.

    +

    You can use a similar procedure for any type of menu editing.

    +

    You can use png, gif, ppm, tiff, jpeg and xpm images interchangeably in Window +Maker if you have compiled in support for those formats.

    +
    +
    +

    +3.10 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://largo.windowmaker.org/tips.php#titlebar_icons

    +
    +
    +

    +3.11 Why does Netscape have a black and white Icon when I minimize it?

    +

    Craig Maloney has this answer:

    +

    If you happen to --enable-openlook at compile time, Netscape (and +presumably other apps as well) believe they're running under OLVWM, and +minimise with monochrome icons. Once compiled without OpenLook support, +Netscape minimizes with the correct icon.

    +
    +
    +

    +3.12 How do I get superfluous bells and whistles working?

    +

    Open WPrefs and go under the Other Configurations tab. Under Animations and Sound, depress the Superfluous tab.

    +
    +

    Alternatively, you may add

    +
    +
    Superfluous=YES;
    +

    to your ~/GNUstep/Defaults/Windowmaker file.

    +
    +
    +

    +3.13 How do I get the classic NeXT(tm)-like style back?

    +

    Open WPrefs and go under the Other Configurations tab. Under Title Bar Style, select the classic look.

    +

    Or you can add

    +
    NewStyle=NO;
    +

    to your ~/GNUstep/Defaults/Windowmaker file.

    +
    +
    +

    +3.14 How do I get the window menu with only a two button mouse?

    +

    In WPrefs, under Mouse Prefrences, the mouse actions can be mapped to a +button of choice.

    +

    Jim Noble explains another way to do this:

    +

    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.

    +
    +
    +

    +3.15 How do I edit my root menu?

    +

    You can now use WPrefs.app ( its appicon looks like a heart rate meter with a +GNUStep icon backgroud ). Note that this will replace any oldstyle menus and +there is no way to convert the oldstyle menu to the new libproplist style menu.

    +

    For old style menus, edit the file ~/GNUstep/Library/WindowMaker/menu 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 menu
    +

    to force the modification time into the future.

    +
    +
    +

    +3.16 WPrefs disappeared from the Dock! How do I get it back?

    +

    Pascal Hofstee offers this answer:

    +

    You should just start it from a terminal by supplying it's FULL path-name, +which is usually the following: /usr/local/GNUstep/Apps/WPrefs.app/WPrefs.

    +

    At this point, a new appicon should be generated which can be placed back into +the Dock.

    +
    +
    +

    +3.17 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.

    +

    Another method is to edit ~/GNUstep/Defaults/WMWindowAttributes by hand and +use the AlwaysUserIcon=YES; option for the app. For example:

    +
    xmcd = {
    +      Icon = "Radio.xpm";
    +      AlwaysUserIcon=Yes;
    +};
    +
    +
    +

    +3.18 How do I turn off the workspace titles between workspaces?

    +

    In Window Maker 0.60.0, an option was added to turn this off.

    +

    By editing ~/GNUstep/Defaults/WindowMaker insert or modify the key +WorkspaceNameDisplayPosition = none; Other valid options for this include +center/top/bottom/topleft/topright/bottomleft/bottomright;

    +
    +
    +

    +3.19 How do I add dynamic items to my root menu?

    +

    A few programs are floating about, notably wkdemenu.pl that can produce output +from other menu styles. In order to get WindowMaker to launch the process +everytime you want to use the menu, use something like

    +
    ("External Menu", OPEN_MENU, "| bob.sh")
    +

    in a proplist style menu. You can tell if you have a proplist style menu if you +can edit it with WPrefs.

    +

    You can do this directly in WPrefs by going to the menu editor, adding an +"external menu", and then clicking the "ask guru button" and filling in the +process name.

    +

    Thanks to Igor P. Roboul

    +
    +
    +

    +3.20 How do I remove or hide appicons?

    +

    There are two options here, and you need to consider which one you prefer. Read +both of these before you decide.

    +

    First, if you do not want to use the clip or dock at all, you can launch wmaker +with with

    +
    $ wmaker --no-clip --no-dock
    +

    and then in ~/GNUstep/Defaults/WMWindowAttributes add

    +
    "*" = {NoAppIcon=Yes;};
    +

    The problem with this method is if you use the dock for dockapps, it renders +them with out an appicon to write to. An alternative method if you are willing +to let the clip be on your desktop is to right click on the clip > clip options +> auto attract. Double click the clip so that it is grayed and all appicons +will be hidden. Then you can hide the clip behind the dock so that it is out of +your way. This will allow appicons to work.

    +
    +
    +

    +3.21 I disabled my titlebar. How can I get it back?

    +

    Thanks to Jim Knoble for this answer

    +

    Set the focus to the window and then use the keystroke assigned to the titlebar +menu. If you're not sure what the keystroke is, you can find out using WPrefs: +in the keyboard section, select the Open window commands menu item in the +list of actions. The keystroke assigned to it ought to appear in the +Shortcut' area.

    +

    Typically it is Control-Esc or F10 in older version of WindowMaker.

    +
    +
    +

    +3.22 How do I remove ALT+Mouse1 from the action Window Maker grabs for an application?

    +

    Do [Button3Down] (for righthanded mouse users, [RightButtonDown]) on the +titlebar of the desired window. Choose Attributes.... In the Attributes +inspector, choose Advanced Options. Check Don't Bind Mouse Clicks. +Apply or Save as desired, then close the Attributes inspector.

    +

    The result is that [Alt+Button1] (which usually grabs a window to move it +around), [Alt+Button2] (which usually grabs a window to move it around without +changing the window stacking order), and [Alt+Button3] (which usually resizes a +window) all get passed to the application instead of performing their usual +action.

    +
    +
    +

    +3.23 How do I configure the Dock and Clip to use less space on a small screen?

    +

    This answer is current as of WindowMaker-0.61.1.

    +

    For the Clip, either:

    +
      +
    • Disable the Clip from WPrefs (panel number 7), or

    • +
    • Hide the Clip under the Dock (for example, in the upper righth and corner of +the screen).

    • +
    +

    The latter is probably more useful on desktops with limited space, since you +can still set the Clip to attract app-icons so they don't clutter your desktop.

    +

    For the Dock, try the following:

    +
      +
    1. Exit Window Maker.

    2. +
    3. Log in via a text console or using a different window manager.

    4. +
    5. Edit ~/GNUstep/Defaults/WMState using your favorite text editor +(for example, vi, emacs, or pico).

    6. +
    7. Find the Applications part of the Dock structure. Find the item with +Position = "0,0";. Change the Command item to the command you want the +top tile to launch. Change the Name item to the <instance>.<class> name +of the application you just made the Command item start (for example, if +Command is "xedit", then Name should be xedit.Xedit).

    8. +
    9. Save the WMState file.

    10. +
    11. Start an X session with Window Maker.

    12. +
    13. Check that the top tile starts the command you told it to. (You should still +also be able to move the Dock up and down using [LeftDrag] on the top tile.)

    14. +
    15. You can configure the tile (including autolaunch and the drop-command) in +the regular manner ([RightButtonDown] on the tile and choose Settings... +from the resulting menu).

    16. +
    +
    +
    +

    +3.24 Why do dashes not work as menu entries?

    +

    If you wish to use a - as part of a menu item name, you must enclose the +name in double quotes. This will only apply if you're editing the +~/GNUstep/Defaults/WMRootMenu file manually, as it is handled properly within +WPrefs.

    +

    This will work:

    +
    (ssh,
    +("us-gw", EXEC, "Eterm -e ssh us-gw"),
    +

    This will not:

    +
    (ssh,
    +(us-gw, EXEC, "Eterm -e ssh us-gw"),
    +

    Thanks to Martin Sillence for pointing this out.

    +
    +
    +
    +
    +

    +4 Using Window Maker

    +
    +

    +4.1 How do add new icons to the Dock?

    +

    First, launch an application. If an icon (henceforth called an appicon) +appears in the bottom left corner of the screen, left click and drag it over +near the Dock. You will see a slightly opaque square of where the Dock will +place the appicon. When you do, release the mouse button and the appicon should +now be in the Dock.

    +

    Next, right click on the desktop to bring up the menu. Select Workspace -> Save +Session to make this permanent.

    +
    +
    +

    +4.2 What is the difference between the Exit and Exit Session Option?

    +

    Another answer from Dan Pascu:

    +

    Exit will exit wmaker, but can leave other X apps running, provided that it was +not the last app launched in the .xinitrc (for instance, if you had exec +wmaker, followed by exec xterm, exiting wmaker using 'Exit' will leave the +xterm running so you could start another window manager, etc.) This is +accomplished because X will not shutdown unless all X apps are closed.

    +

    Exit session will exit wmaker, but will also close all running apps, thus the X +server will be closed too.

    +
    +
    +

    +4.3 How do I "dock" icons 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.

    +
    +
    +

    +4.4 Why do none of my key bindings (ie: Alt+#) work in Window Maker?

    +

    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 $(WindowMaker)/src/wconfig.h and +changing it to #define NUMLOCK_HACK.

    +

    With the release of 0.18.0, this hack is now working and hopefully no one will +have to ask this question again.

    +
    +
    +

    +4.5 How do I rename workspaces?

    +

    Right click to bring up the root menu. Go under the Workspaces menu item and +hold the control key down. Next, click on the workspace entry you would like to +rename, type the name, and press enter.

    +
    +
    +

    +4.6 How can I resize a window if the window is larger than my current desktop?

    +

    David Reviejo best summed up this answer:

    +

    Maybe you know: Alt+Left click and drag to move the window.

    +

    Try this: 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 can +change the move/resize mode by pressing the SHIFT key.

    +
    +
    +

    +4.7 How do I "undock" appicons?

    +

    If the program is not running, just drag the icon to the middle of your desktop +and watch it disappear. If the program is running, hold down Meta and drag the +icon off the dock.

    +

    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.

    +
    +
    +

    +4.8 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.

    + +

    When I set the root background with wmsetbg by hand it works, but when I do +that from the configuration files it doesnt! If you set the root background +with wmsetbg by hand, it will obviously find the image, since you have +explicitly specified it by hand. But if you simply put it in +~/GNUstep/Defaults/WindowMaker in some option like WorkspaceBack, it will +not find the image because Window Maker can't read your mind to figure where +you put the image. So, to fix it, you have to either place the full path for +the image in the texture specification or put the path for the directory you +put your background images in the PixmapPath option. You can also put all your +background images in places like ~/GNUstep/Library/WindowMaker/Backgrounds +or /usr/local/share/WindowMaker/Backgrounds.

    +

    David Green says that another possibility is that you have two copies of the +worker programs: wmsetbg (and possibly setstyle) and the wrong one is in the +path first.

    +
    +
    +

    +4.9 What is the purpose of being able to draw a box on the root menu with a left click?

    +

    Its purpose is two-fold.

    +

    First, it is used to select multiple windows on a desktop at a time. When these +windows are selected, they can be moved around on your desktop and will retain +their relative positions.

    +

    Second, once selected, they are persistent through desktop changes. So it is +useful for moving large numbers of windows between desktops.

    +

    You can also select windows with shift+click.

    +
    +
    +
    +
    +

    +5 Application Compatibility

    +
    +

    +5.1 How do I assign gimp an appicon?

    +

    You can enter the following line in WMWindowAttributes:

    +
    gimp={Icon="gimp.tiff";};
    +

    Window Maker now can assign Icons from within the windowmanager. To do so, +right click on the title bar of an app, click on the droplist->Icon and +WorkSpace entry, enter the icon file name (make sure this is in your pixmap +path), click update, apply, and then save.

    +
    +
    +

    +5.2 How do I get an appicon for XEmacs 20.3+?

    +

    Thanks to Michael Hafner for this answer.

    +

    You don't need to patch the XEmacs code, just run

    +
    ./configure --with-session=yes (in addition to any other options you use)
    +

    in your XEmacs 20.3+ sourcedir and rebuild it. Then XEmacs shows an appicon +when running and you can easily dock it.

    +
    +
    +

    +5.3 Where do I get the nifty clock program I always see on people's desktops?

    +

    It's called asclock. Once included with Window Maker, it now is available at +ftp://ftp.windowmaker.org/pub/contrib/srcs/apps/asclock.tgz.

    +

    asclock was written by Beat Christen and used to have its own website, which +seems to have disappeared. However, references to it exist all over the place, +and can be found by searching Google.

    +

    Beat Christen wrote this awhile back:

    +

    Please note that the asclock-gtk version 2.0 beta 4 (asclock-gtk-2.0b4.tar.gz) +does not have the -d switch yet and that the asclock-xlib-2.1b2.tar.gz does not +have the shaped asclock builtin.

    +

    A wonderful alternative to asclock is Jim Knoble's wmclock. It duplicates asclock and adds some much +needed improvements.

    +
    +
    +

    +5.4 How do you dock asclock?

    +

    It is highly recommended that you use the asclock mentioned previously in +question 5.3. The asclock that is typically included in AfterStep will not +properly dock with Window Maker. At this point, there are at least four or five +different versions of asclock floating about.

    +

    For older versions such as asclock-classic , use a command line similar to

    +
    asclock -shape -iconic -12 &
    +

    For newer versions such as asclock-xlib 2.0 and asclock-gtk use

    +
    asclock -shape -iconic -12 -d &
    +

    Drag it from the top right corner of the clock to the dock. Right click on the +icon and select autolaunch.

    +

    In order to make asclock launch every time you start Window Maker, right click +on the outer edge of the border for asclock until a menu appears. Select the +"Settings" item and then select the "Lauch this Program Automatically" option +then select the "OK" button.

    +

    If you get an error such as sh: /dev/console: Permission denied, login as root, +cd to /dev/ and run

    +
    ./MAKEDEV console
    +
    +
    +

    +5.5 Where can I get more dockapps?

    +

    The Window Maker team got tired of people E-mailing constantly asking where the +websites for obscure dockapps disappeared to. So we've created the ultimate +dockapps community website. Visit dockapps.net for +the latest, up-to-date links, information, and download for Window Maker and +related dockapps.

    +

    Another large index of dockapp links is available at +http://www.bensinclair.com/dockapp. The downside to this is that they're only +links, so if someone stops maintaining a dockapp, or their web hosting provider +cuts them off, you won't be able to get to it. Still, Ben Sinclair's site was +the first big "dockapp warehouse" site, so we give credit where credit is due. +:)

    +
    +
    +

    +5.6 How do I get an appicon for rxvt so I can dock it?

    + +

    The default rxvt that comes with most distributions 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.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

    +
    +
    +

    +5.7 How do I allow Alt+# to work in an rxvt/xterm session?

    +

    First, Launch a unique instance of rxvt or xterm. This can be done using the -N +option of rxvt.

    +
    rxvt -name foo -e irc
    +

    Then, go to the Attributes menu (right click on titlebar -> Attributes) / +Advanced Options and enable "Don't Bind Keyboard shortcuts". Click Save and +Apply and you should be able to run your session without the shortcuts.

    +
    +
    +

    +5.8 How do I get different icons for different rxvt's and xterms?

    +

    The hint is the -name option for xterm or rxvt. This will allow you to change +the exact WM_CLASS in the attributes menu and assign a unique icon.

    +
    rxvt -name foo -title Testing
    +

    Then Right click on the title bar to bring up the attributes menu, and you will +be able to edit the properties for foo.XTerm (ie: assign a unique icon).

    +
    +
    +

    +5.9 How do I launch multiple instances of XTerm from one appicon?

    +

    Thanks for the update by Sara C. Pickett:

    +

    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.

    +

    Then right-click on the docked appicon and select settings. Change the +Application Path with arguments section to

    +
    '/bin/sh -c "exec xterm &"'
    +
    +
    +

    +5.10 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
    +

    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 ;)

    +

    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.

    +

    If you can recompile Scilab, this came from a Scilab developer:

    +

    replace

    +
    size_hints.flags = USPosition | USSize | PMinSize;
    +

    with

    +
    size_hints.flags = /** USPosition |**/ USSize | PMinSize;
    +

    in routines/xsci/jpc_SGraph.c

    +
    +
    +

    +5.11 How do I get a transparent xterm/rxvt/xconsole?

    +

    You need a terminal emulator that has support for transparency, like Eterm, the +latest rxvt, wterm, aterm or gnome-terminal.

    +

    You can find these programs on http://www.freshmeat.net.

    +
    +
    +

    +5.12 How do I dock an arbitrary console application like mutt?

    +

    There are two key things to do if you want a program (such as mutt) to be able +to start in a terminal window from the Dock or the Clip:

    +
      +
    • +

      Make the terminal window start the program you want to run instead of a +shell. Both xterm and rxvt (and its descendants) are capable of doing this. +For example:

      +
      xterm -e mutt
      +rxvt -e mutt
      +gnome-terminal -e mutt
      +
    • +
    • +

      Convince Window Maker that the resulting terminal window is not a regular +terminal window, but rather some other program instance. Both xterm and rxvt +are also capable of doing this. Make sure that -e is the last command +option. For example:

      +
      xterm -name muttTerm -e mutt
      +rxvt -name muttTerm -e mutt
      +gnome-terminal --name=muttTerm -e mutt
      +

      This causes the instance of the terminal window that you start to have an +<instance-name>.<class-name> pair of muttTerm.XTerm (usually rxvt's +class is also XTerm; don't know about its descendants, such as wterm and +Eterm).

      +

      Do not use spaces or periods in the instance name. For example, these are +BAD instance names:

      +
      xterm -name mutt.term -e mutt
      +rxvt -name 'mutt term' -e mutt
      +

      Window Maker will not like you if you use them.

      +

      With a different instance name, you can now do the following:

      +
        +
      • Dock the resulting appicon in the dock, or clip it to the Clip.

      • +
      • Assign a different icon and different window properties to the special' +terminal window running your program (make sure you choose the exact +``muttTerm.XTerm` window specification in the Attributes editor).

      • +
      • Specify different resource settings for muttTerm in your ~/.Xdefaults file +(e.g., different default foreground and background colors).

      • +
      +
    • +
    +

    There are a few other non-key things you can do to complete the process:

    +
      +
    • +

      Tell the terminal window to display a more meaningful or prettier title and +icon title than what gets put there due to -e. For example:

      +
      rxvt -title 'Mail (mutt)' -n 'Mail' -name muttTerm -e mutt
      +

      Xterm works the same way.

      +
    • +
    • +

      These are getting to be a lot of command-line options. Make a wrapper script +to use so you don't have to remember them all:

      +
      mkdir ~/bin
      +cat >~/bin/muttTerm <<EOF
      +#!/bin/sh
      +rxvt -title 'Mail (mutt)' -n 'Mail' -name muttTerm -e mutt
      +EOF
      +chmod +x ~/bin/muttTerm
      +

      Now you can do the same thing as that really long command in [3] above using +the simple:

      +
      ~/bin/muttTerm
      +

      If you put ~/bin in your PATH, you can use the even simpler:

      +
      muttTerm
      +
    • +
    • +

      If you want to be sly, you can change the docked muttTerm to use your new +wrapper script instead of the really long command; then, when you want to +change anything in the really long command except for the instance name, you +can just change the wrapper script, and it's done. Here's the procedure:

      +
        +
      • [RightButtonDown] on the muttTerm dock tile

      • +
      • Choose Settings...

      • +
      • Replace the text in the Application path and arguments field with the following:

      • +
      +
      muttTerm
      +
        +
      • +

        Choose OK

        +

        Note that Window Maker needs to know that ~/bin is on your PATH for this to +work; you may need to exit your X session and start it again.

        +

        To change the instance name of the terminal window (e.g., from muttTerm +to mailTerm or blah or terminalWindowRunningMutt), you need to +do the following

        +
      • +
      • Change your muttTerm script

      • +
      • Undock your old muttTerm

      • +
      • Run your muttTerm script

      • +
      • Dock the resulting terminal window

      • +
      • Do the stuff in first 4 subpoint above again.

      • +
      +
    • +
    +

    Good luck.

    +

    Thanks to Jim Knoble for this answer.

    +
    +
    +

    +5.13 How do I get an appicon for Netscape?

    +

    If you are not using one of the latest Navigators, you can

    +
      +
    1. Right click on the title bar

    2. +
    3. Click Attributes

    4. +
    5. Select Advanced Options from the pull down menu

    6. +
    7. Select Emulate Application Icon

    8. +
    9. Click Save

    10. +
    +

    and older netscapes should now produce an application icon.

    +

    If you are using a newer rpm from Redhat Linux, try running

    +
    grep irix `which netscape`
    +

    This seems to have been introduced in their 4.7 update. Comment out +irix-session management restart netscape. Alternatively, you may run either

    +
    /usr/lib/netscape/netscape-communicator
    +

    or

    +
    /usr/lib/netscape/netscape-navigator
    +

    depending on which rpms you have installed.

    +
    +
    +

    +5.14 How can I dock an application from a remote machine using ssh?

    +

    This answer asumes that you have already set up RSA authentication using +ssh-keygen. To be able to launch applications without being prompted for +the password, you can use ssh-agent and ssh-add as follows.

    +

    With the addition to ~/.xsession of

    +
    eval `ssh-agent`
    +ssh-add /dev/null
    +

    just before

    +
    exec wmaker
    +

    Then ssh will no longer prompt for the RSA-key passphrase. The /dev/null +argument to ssh-add causes it to use the ssh-askpass graphical dialog.

    +

    The following procedure shows how to dock a remote xterm using ssh. This +procedure should work well for any well-behaved X11 application, including most +Dock applets.

    +
      +
    1. +

      From a terminal window, start an ssh session with xterm as the command:

      +
      ssh -a -C -X remote.example.net "xterm -name blah"
      +

      (The '-a' switch turns off agent forwarding, for security reasins and the +'-X' switch turns on X11 forwarding, required for the remote xterm to run. +The -C option turns on compression, very useful for things such as X)

      +
    2. +
    3. When the remote xterm appears, find the appicon. If it's not already in the +Clip, drag it there.

    4. +
    5. +

      [RightButtonDown] on the appicon and choose 'Settings...' from the menu. +Note that the 'Application path and arguments' field contains only:

      +
      xterm -name blah
      +

      Change that to:

      +
      ssh -a -C -X remote.example.net "xterm -name blah"
      +

      The backslashes and double quotes are critical. Change the contents of +'Command for files dropped with DND' in the same fashion, putting '%d' +inside the double quotes.

      +

      If you wish, change the icon so that you can recognize the tile easily. +Press 'OK'.

      +
    6. +
    7. [RightButtonDown] on the appicon again and choose 'Keep Icon(s)'.

    8. +
    9. Exit the remote xterm. The new Clip tile should remain, with the three dots +at the lower lefthand corner to indicate the app is no longer running.

    10. +
    11. [DoubleClick] on the new Clip tile. You should get the remote xterm again +after a short while, depending on the speed of your network and of the +remote machine.

    12. +
    13. You may either leave the remote application in the Clip, or drag it to the +Dock.

    14. +
    +
    +

    Note

    +

    You should be wary of docking something like wminet or wmnet in the +manner, since you may create a feedback loop by causing additional network +traffic, which the program monitors, causing yet more network traffic...

    +
    +
    +
    +

    +5.15 How do you make an omnipresent window not take focus whenever switching workspaces?

    +

    Typically, on applications like xmms, they are set to omnipresent so they will +appear on every workspace. This causes the app to often get the focus +unintentionally when switching workspaces.

    +

    To remedy this,

    +
      +
    1. Bring up the Attributes menu. You can do this by [Right Clicking] on the +title bar and seletcing Attributes. Alternatively, you may hit +'Control+ESC' at the same time to bring up the title bar menu on apps that +do not have a title bar.

    2. +
    3. In the Window Attributes menu, select Skip Window List

    4. +
    5. Push Save and then hit the close dialog window icon in the upper right +corner of the window frame.

    6. +
    +

    Now the window will not take focus when switching workspaces.

    +
    +

    Note

    +

    this will also make the window non-focusable via keyboard window switching. +The only way to shift focus to the window is via the mouse.

    +
    +
    +
    +
    +
    +

    +6 Themes and Dockapps

    +
    +

    +6.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 an archive to distribute freely among +friends, fellow users and/or the whole net in general. :)

    +

    See the theme-HOWTO for an +in-depth walk-through on making a Theme archive.

    +
    +
    +

    +6.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 +~/GNUstep/Library/WindowMaker/ directory for your own personal use.

    +

    Use your favorite variation of the following:

    +
    gzip -dc "Theme.tar.gz" | tar xvf -
    +

    Note that directory may differ on different systems

    +
    +
    +

    +6.3 Why do my themes not load the background?

    +

    Likely you have not compiled Window Maker with support for the background image +format, usually JPEG.

    +

    You can check this by the following command

    +
    ldd `which wmaker`
    + +

    If libjpeg is not listed, you will need to install libjpeg that is available +from ftp.windowmaker.org

    +
    +
    +

    +6.4 How do I make a Theme?

    +

    Please see the theme-HOWTO for +details on making both new and old style themes (and the differences between +the two), here is a short summary on making old style themes. 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.

    +

    To make a Theme.tar.gz, these are the steps I take:

    +
      +
    1. Optionally create a README for your theme in WindowMaker/, call it +something like "ThemeName.txt"

    2. +
    3. +

      Use the following command to add the Theme files to your .tar file.

      +
      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 +nder 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.

      +
    4. +
    5. +

      Then gzip your .tar file to make your ThemeName.tar.gz file with this +command:

      +
      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

      +
      gzip -9 ThemeName.tar
      +
    6. +
    7. Now give it to your friends!

    8. +
    +
    +
    +

    +6.5 I untarred a theme in ~/GNUstep/Library/WindowMaker like the README says,but it doesnt show up in the menu!

    +

    Make sure the OPEN_MENU command for the Themes entry in your menu has the path for your personal themes directory included in it. To be sure, add

    +
    #define USER_THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes
    +

    in your wmmacros file.

    +
    +
    +
    +
    +

    +7 Miscellaneous Questions

    +
    +

    +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 Meta+Number combination will switch between desktops. The 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 the edge of the desktop onto the next +workspace, or right click on its title bar, select 'Move To', and click the +workspace you want it to be moved to.

    +

    However, Window Maker does support KDE and GNOME protocols, including their +workspace management, so you may use their pager in conjunction with Window +Maker in these. Note that in order for this to work, you must enable support +when you configure Window Maker (using the --enable-kde and --enable-gnome +configure options).

    +

    Note also that the Blackbox pager application will work with Window Maker.

    +
    +
    +

    +7.2 How do I use getstyle and setstyle?

    +

    To capture the current Window Maker style, use the command

    +
    getstyle > current.style
    +

    To replace the current style, use the command

    +
    setstyle filename.style
    +
    +
    +

    +7.3 Why was libPropList removed from the distribution?

    +

    Alfredo Kojima writes:

    +

    libPropList was removed from Window Maker because other programs also use it, +such as GNOME. If libPropList is distributed with wmaker, it would cause +problems with whatever version of libPropList you already had installed.

    +

    Now, there is no more GNOME libproplist and Window Maker libproplist. There is +only libPropList which is worked on as a single community effort.

    +
    +
    +

    +7.4 Why don't you distribute normal diff or 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 a) most systems do not have +xdelta installed and b) xdelta is picky and requires the files 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 a) it is more complicated +and error prone to require the user to manually move the files to the correct +places b) 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 and c) 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 or KDE support?

    +

    Support for GNOME and KDE hints has been included since 0.50.0.

    +

    Note that you must enable this support at compile time with the proper +arguments to configure (--enable-kde and --enable-gnome).

    +
    +
    +

    +7.6 How can I produce a backtrace when Window Maker keeps crashing?

    +

    Thanks to Paul Seelig for this answer:

    +

    You can use the GNU debugger "gdb" to get exact information about how and where +wmaker crashed. Sending this information to the developers is the most +convenient way to help in debugging.

    +

    The wmaker binary needs to be compiled with debugging turned on ("./configure +--with-debug etc.") for this to work.

    +

    Exit wmaker and start a failsafe X session with an open xterm.

    +

    First type the command "script" to log the following session into a file +commonly called "~/typescript". Then enter "gdb wmaker" at the shellprompt:

    +
    [shell prompt]~ > script
    +Script started, output file is typescript
    +[shell prompt]~ > gdb wmaker
    +GNU gdb 4.17.m68k.objc.threads.hwwp.fpu.gnat
    +Copyright 1998 Free Software Foundation, Inc.
    +GDB is free software, covered by the GNU General Public License, and you are
    +welcome to change it and/or distribute copies of it under certain conditions.
    +Type "show copying" to see the conditions.
    +There is absolutely no warranty for GDB.  Type "show warranty" for details.
    +This GDB was configured as "i486-pc-linux-gnu"...
    +(gdb)
    +

    At the gdb prompt simply type "run" to start the WMaker session:

    +
    (gdb) run
    +Starting program: /usr/bin/X11/wmaker
    +

    Try to reproduce the error which has provoked the crash before and if you +succeed the session will simply freeze and you will see something similiar to +following prompt:

    +
    Program received signal SIGSEGV, Segmentation fault.
    +0x809ea0c in WMGetFirstInBag (bag=0x0, item=0x811e170) at bag.c:84
    +84          for (i = 0; i < bag->count; i++) {
    +(gdb)
    +

    Now you just type "bt" for "backtrace" and gdb will show you where the crash +happened:

    +
    (gdb) bt
    +#0  0x809ea0c in WMGetFirstInBag (bag=0x0, item=0x811e170) at bag.c:84
    +#1  0x807c542 in wSessionSaveState (scr=0x80c28e8) at session.c:299
    +#2  0x807bd88 in wScreenSaveState (scr=0x80c28e8) at screen.c:1089
    +#3  0x807cf54 in Shutdown (mode=WSExitMode) at shutdown.c:111
    +#4  0x8078101 in exitCommand (menu=0x80f7230, entry=0x80fdb38)
    +at rootmenu.c:193
    +#5  0x8078403 in wRootMenuPerformShortcut (event=0xbffff360) at rootmenu.c:401
    +#6  0x80630f7 in handleKeyPress (event=0xbffff360) at event.c:1492
    +#7  0x8061c86 in DispatchEvent (event=0xbffff360) at event.c:232
    +#8  0x8093092 in WMHandleEvent (event=0xbffff360) at wevent.c:585
    +#9  0x8061dae in EventLoop () at event.c:322
    +#10 0x806b238 in main (argc=1, argv=0xbffff404) at main.c:594
    +(gdb)
    +

    To quit the debugger just type "quit" and say "y":

    +
    (gdb) quit
    +The program is running.  Exit anyway? (y or n) y
    +[shell prompt]~ >
    +

    To quit the script session type "exit" again:

    +
    [shell prompt]~ > exit
    +exit
    +Script done, output file is typescript
    +[shell prompt]~ >
    +

    Send the resulting "~/typescript" together with a concise explanation about how +to reproduce the bug (please use the included BUGFORM for instruction) to the +developers.

    +
    +
    +
    +
    +

    +8 Troubleshooting Tips

    +

    No questions are currently available for this chapter.

    +
    +
    +
    +

    +9 Programming for Window Maker

    +
    +

    +9.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.

    +

    Also you must make a call to XSetCommand(dpy, leader, argv, argc);

    +

    Take a look at WindowMaker-0.12.3/test/test.c that is an example for writing +such an app (which also have an app menu).

    +
    +
    +

    +9.2 How do I get my tcl/tk application to produce an appicon?

    +

    Oliver Graf writes:

    +

    The main window (normally this is called '.' [dot] in tk) should use the +following lines:

    +
    wm command . [concat $argv0 $argv]
    +wm group . .
    +

    All child windows attached to the same app-icon should use:

    +
    toplevel .child
    +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.

    +
    +
    +

    +9.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. You can find out +more information in our WINGs development section.

    +
    +
    +

    +9.4 Where can I get more information about WINGs?

    +

    Nic Berstein has created a WINGs development 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: wings-request@postilion.org.

    +
    +
    +
    + +
    +
    +
    +
    Window Maker: FAQ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/FAQ.rst b/docs/FAQ.rst new file mode 100644 index 0000000..90dca9b --- /dev/null +++ b/docs/FAQ.rst @@ -0,0 +1,2313 @@ + + + + Window Maker: FAQ + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + FAQ +=== + +Have questions about Window Maker? If so, look no further. Below is our +collection of Frequently Asked Questions and their corresponding answers. Many +of these have been adapted from the `original FAQ +`_ +by Chris Green. Questions are routinely taken and added in from the mailing +lists and IRC forums. + +.. sectnum:: +.. contents:: Table of Contents + :backlinks: none + +---- + +Introduction to Window Maker +---------------------------- + +What is Window Maker? +..................... + +Window Maker is an X11 window manager originally designed to provide +integration support for the GNUstep Desktop Environment. In every way +possible, it reproduces the elegant look and feel of the NEXTSTEP[tm] user +interface. It is fast, feature rich, easy to configure, and easy to use. It is +also free software and part of the GNU Project, with contributions being made +by programmers from around the world + +Where can I get Window Maker? +............................. + +Window Maker can be obtained from the official website, http://windowmaker.org/, +or from various mirror sites listed at http://windowmaker.org/mirrors.html + +Where are the mailing lists and archives? +......................................... + +All information regarding the Window Maker +mailing lists can be found at http://windowmaker.org/lists.html + +Where can I find more documentation? +.................................... + +Additional documentation can be found in the Window Maker source distribution, +or at http://windowmaker.org/documentation.html + +What is an appicon? +................... + +An appicon is the icon produced by an application 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 rxvt when testing, because many versions of rxvt do not +properly set their window attributes). + +.. TODO (fix link) + +For a more indepth discussion of how an appicon relates to Window Maker, see +question 1.10 + +How can I get a question added to the FAQ? +.......................................... + +For now, the best method is to E-mail your question to faq@windowmaker.org. We +are working on a web-based submission form to our FAQ system, which will enable +users to submit questions for review. + +How do I report bugs? +..................... + +.. TODO link to the bugform? +.. TODO wrong url for bugtracker (we don;t have any!) + +You can look at the BUGFORM file in the source distribution of Window Maker. +Alternatively, you can use the Window Maker Bug Tracker at +http://windowmaker.org/cgi-bin/bugs + +Is there an anomymous cvs server? +................................. + +Yes there is. To check out from cvs, first + +.. code:: console + :class: highlight + + export CVSROOT=":pserver:anoncvs@cvs.windowmaker.org:/cvsroot" + cvs login + +There is no password, so simply hit enter when prompted. + +Then issue the following command ("wm" is the name of the module): + +.. code:: console + :class: highlight + + cvs -z3 checkout -d WindowMaker wm + +To update your source tree, cd to the WindowMaker directory and type + +.. code:: console + :class: highlight + + cvs -z3 update -dP + +inside the WindowMaker directory. + +For more detailed CVS instructions, please visit +http://windowmaker.org/development-cvs.html + +Where can I find the Window Maker IRC channel? +.............................................. + +.. TODO change irc server to freenode + +The official Window Maker IRC channel can be accessed by connecting to +irc.windowmaker.org on port 6667, and joining #WindowMaker + +What is the difference between appicons, mini-windows, and minimized applications? +.................................................................................. + +Thanks to Jim Knoble for this answer: + +Many window managers are capable of turning large windows into smaller *icons* +which represent the window yet don't take as much screen real estate. We're +all familiar with that model. + +Window Maker has two kinds of these icons. One kind is created when an +application - technically, a window group - is started. It represents the +entire application and is called an *appicon*. Such icons are square tiles +containing only the picture which represents the application; they have no +titles. + +The second kind of icon in Window Maker is created when a particular window +(possibly one belonging to an application displaying more than one window) is +*miniaturized* (which is the same action as *minimizing* or *iconifying* in +other window management models) using the miniaturization button on the +window's titlebar. These miniaturized windows are called *miniwindows* and can +normally be distinguished from appicons by their small titlebar at the top of +the tile. + +How do I make sense of Window Maker's version number scheme? +............................................................ + +The numbering scheme is relatively simple, and is in the format of three +numbers separated by dots. The first number is the "major" revision number. +The second is the "minor" revision number. And finally, the third is the "patch +level" number. + +To put this all into perspective, let's examine the version number "0.65.1". +This number signifies that there has not been a major revision release, that +its minor revision is newer than the previous one (0.64.x), and that it's on +the first patch level after the 0.65.0 release. This still might be confusing, +so go away with this in mind: numbers ending in .0 tend to be new feature +releases but less stable than .1, .2, .3 patch level releases, the latter of +which are used to fix bugs. + +It is generally safe to go with the highest numbered patch release. + +---- + + +Installing Window Maker +----------------------- + +Why are no icons showing up after installing Window Maker? +.......................................................... + +As of WindowMaker version 0.15.0, the default setup includes .tiff icons which +require you to have compiled Window Maker with libtiff support. For assistance +on compiling libtiff, see the following question. + +How do I make Window Maker link against libtiff? +................................................ + +Many UNIX operating systems have difficulty finding third party libraries by +default. Unfortunately, there are too many of these to include instructions for +them all. + +In general, you will want to ensure the latest version of libtiff is installed +(see ftp://www.libtiff.org). Typically on non-Linux systems, libtiff will be +located under /usr/local, with includes and libs in those respective +sub-directories. + + +Often, it will be necessary to add /usr/local/lib to the system's +LD_LIBRARY_PATH environment variable (especially so on Solaris, but see 'man +ld' for details on your platform). Furthermore, it is possible to supply +special flags to the configure script to help it find where the libraries are. +An example is given below: + +.. code:: console + :class: highlight + + ./configure --with-libs-from="-L/usr/local/lib" \ + --with-incs-from="-I/usr/local/include" + +Also, you will want to make sure you're using GNU make (gmake) for the Window +Maker compile. + +How do I switch CDE's window manager to use WindowMaker? +........................................................ + +Method 1: +''''''''' + +Peter Ilberg gives us this answer: + +Install WM wherever you want it, mine is in /opt/WindowMaker-0.16.0 (eg. use +./configure --prefix=/opt/WindowMaker-0.16.0). Run the install script +wmaker.inst in your home directory. + +Add the following two lines to .dtprofile in your home directory: + +.. code:: console + :class: highlight + + 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. + +Make your .xsession/.xinitrc executable (VERY IMPORTANT, wmaker.inst did NOT do +this automatically for me) using eg. + +.. code:: console + :class: highlight + + chmod ugo+x .xsession + +Your .xsession/.xinitrc should look something like this: + +.. code:: bash + :class: highlight + + #!/bin/sh + + + 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". 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. + +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: + +.. code:: console + :class: highlight + + 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 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 Window Maker 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 Window Maker. + +Owen Stenseth adds: +''''''''''''''''''' + +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: + +.. code:: + :class: highlight + + "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. + +Do I need to rerun wmaker.inst with every new version of Window Maker? +...................................................................... + +Dan Pascu reveals the answer: + +If this is necessary, it will be listed in the NEWS file included in the source +distribution. Since 0.15.x, the domain files have been changed in such a way +that re-running wmaker.inst is redundant. The user config files are by default +merged in with the global ones normally located in +/usr/local/share/WindowMaker/Defaults. So, even if new options are added, they +should be automatically added to the environment. + +Why am I only getting a root menu with xterm and exit items? +............................................................ + +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. For example: + +.. code:: shell-session + :class: highlight + + $ file `which cpp` + /usr/bin/cpp link to /usr/bin/cpp-2.95 + +Another possibility is your /usr/X11/lib/X11/xinit/xinitrc is a broken symlink. +Either create a new symlink, or do something like: + +.. code:: shell-session + :class: highlight + + $ cp /usr/X11/lib/X11/xinit/xinitrc.fvwm2 \ + /usr/X11/lib/X11/xinit/xinitrc.wmaker + $ ln -sf /usr/X11/lib/X11/xinit/xinitrc.wmaker \ + /usr/X11/lib/X11/xinit/xinitrc + +then just edit /usr/X11/lib/X11/xinit/xinitrc and replace the exec of 'fvwm2' +by '/usr/local/bin/wmaker' (should be somewhere towards the end of the file, +most probably the very last line). + +Thanks to Tomas Szepe for the second part. + +How do I get Window Maker to use more than 16 colors on my SGI Indy Workstation? +................................................................................ + +Thanks to Peter H. Choufor 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: + +.. code:: + :class: highlight + + :0 secure /usr/bin/X11/X -bs -c -class TrueColor -depth 24 + +Using WindowMaker with Solaris 2.6 CDE +...................................... + +Thanks to Rob Funk for this answer: + +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. This should work for any version. When you run wmaker.inst the +first time, allow it to make changes to the .xinitrc file. Mine looks like +this: + +.. code:: sh + :class: highlight + + #!/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 Window Maker +instead of OpenWindows. In order to choose Window Maker, you simply choose +"OpenWindows Desktop" in the "Options - Session" Menus And Choose "CDE Desktop" +if you want CDE. + +The color schemes and settings for Window Maker are seperate from CDE. I tested +on a SPARC 10, but I assume Solaris x86 would work also. + +(webmaster note: It works fine on Solaris x86) + +How do I install Window Maker on a Solaris box? +............................................... + +Here are some hints from John Kemp: + +Installing Window Maker on a Solaris 2.6 box might require one or two little +hints. Here you are (this was on a system running xdm by the way, but similar +suggestions apply otherwise): + +#. /usr/openwin/lib/X11/xdm/Xservers like this: + + .. code:: + :class: highlight + + :0 local /usr/openwin/bin/X -dev /dev/fb defdepth 24 defclass TrueColor + +#. Turn off shm in the WindowMaker configure: + + .. code:: shell-session + :class: highlight + + $ ./configure --disable-shm + +#. might have to modify your LD_LIBRARY_PATH:, or make "wmaker" a script that + does it for you (mv wmaker wmaker.exe): + + .. code:: sh + :class: highlight + + LD_LIBRARY_PATH=/usr/local/lib:/usr/local/X11/lib:/usr/lib:/usr/openwin/lib + export LD_LIBRARY_PATH + /usr/local/bin/wmaker.exe $* + +The real key is the "--disable-shm". + +(webmaster note: Window Maker should work fine with SHM enabled, at least it +does under Solaris 8. Try the default first, and then use this if you run into +problems with it) + +How do I fix an error such as libwraster.so.1: cannot open shared object file? +.............................................................................. + +If you have an error when running Window Maker such as + +.. code:: shell-session + :class: highlight + + libwraster.so.1: cannot open shared object file + +These are the instructions for Linux. + +First, make sure that /usr/local/lib ( or whatever directory you installed +Window Maker to) is listed in your /etc/ld.so.conf ). You need to run ldconfig +so the new shared libraries will be loaded. After running ldconfig as root, the +linker should properly load the libraries. You need to run this every time you +update Window Maker. + +Thanks to Joseph Czapiga, the BSD procedure for adding shared library +directories is: + +.. code:: shell-session + :class: highlight + + ldconfig -m /usr/local/lib (m means merge) + +How do I fix an error dealing with aclocal: configure.in: 15: macro 'AM_PROG_LIBTOOL' not found in library? +........................................................................................................... + +You need to install libtool. It also must be a libtool different from version +1.2b ( shipped with redhat 5.2 ). You can get libtool from ftp.gnu.org/pub/gnu +Make sure the autoconf and automake versions you have installed are at least: + +- autoconf 2.12 +- automake 1.3 +- libtool 1.2 + +From Blaine Horrocks: + +*You can also work around this problem on RedHat5.2 by copying the distributed +aclocal.m4 to acinclude.m4 before running configure for the first time. +Configure works fine and doing the make succeeds.* + +When I run wmaker, it quits complaining about '__register_frame_info' +..................................................................... + +This is related to having compiled Window Maker on a system whose libraries +were compiled by egcs or gcc 2.8.0, and then using the binaries on a system +whose libraries were compiled by gcc 2.7.2.x + +Try compiling Window Maker with the newer gcc or recompile your system +libraries with the older gcc. It's generally a bad idea to mix and match. + +How do I make libjpeg link against Window Maker? +................................................ + +The newest jpeg libs are availible at http://www.ijg.org + +How many of you have seen that darned "lib reports 62 caller expects 61" type +of error? Here are some answers that will possibly help you out. + +First things first. As always, make sure there are not older copies of libjpeg +floating around on your system. ]Some distributions by default come 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: + +.. code:: shell-session + :class: highlight + + ln -s /usr/local/lib/libjpeg.so.6.0.2 libjpeg.so.1 + +Note that you should use your system's version of ldconfig to properly manage +your library cache (or other appropriate mechanism). + +On Linux, this would mean having /usr/local/lib in /etc/ld.so.conf and then +running ldconfig. + +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. + +The fix is actually rather simple. Along with adding a libjpeg.so.6 symlink +like so (just in case): + +.. code:: shell-session + :class: highlight + + ln -s libjpeg.so.6.0.2 libjpeg.so.6 + +where you installed your new lib, you simply need to recompile your app too +link it against the new library. + +Also, make sure to use GNU make for the Window Maker compile. + +How do I start Window Maker after running wmaker.inst? +...................................................... + +As of version 0.53.0, the wmaker.inst script will modify your X startup script +(.xinitrc or .Xclients or .Xsession) to do something thats (hopefully) +appropriate. + +In order to run wmaker, a user needs to have an ~/.xinitrc file consisting of +something similar to + +.. code:: sh + :class: highlight + + #!/bin/sh + exec wmaker + +This will vary from system to system, but the existance of an .xinitrc file +will generally override the system defaults. + +How do I make libpng link against Window Maker? +............................................... + +The newest png libs are availible at http://www.libpng.org/pub/png/libpng.html + +You should also get the newest zlib libs from http://www.gzip.org + +Generally, the same rules apply here as with libjpeg. Make sure there are no +older versions of the necessary libs floating around on your system, then try +to configure and make again. + +Also, make sure to use GNU make (gmake) for the Window Maker compile. + +How do I make giflib or libungif to link against Window Maker? +.............................................................. + +The newest versions of both these libraries are available at +http://prtr-13.ucsc.edu/~badger/software/ + + +Users have had a few problems with giflib... 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. One solution is to simply copy it +from the libgif source directory to the local system include directory. +(/usr/local/include/ on many systems). + +Also, make sure to use GNU make (gmake) for the Window Maker compile. + +How do I fix an error similar to "wrlib: could not allocate shared memory segment: invalid argument" +.................................................................................................... + +This relates to a shared memory problem on Solaris. Usually one can't see it - +but it is visible if X is started from command line (or fail-safe session for +that matter). In any of the cases, on the stderr you get an error message like +this: + +.. code:: console + :class: highlight + + "wrlib: could not allocate shared memory segment: invalid argument" + +This one is generated by wrlib if Window Maker is compiled with shared-memory +usage enabled (which is the default). The explanation is that Solaris by +default comes with a shared memory segment size of maximum 1 M. What happends +is that if you have a really-really cool(tm) background, it is usually much +bigger than that 1 M segment of shared memory. To see your defaults relating +the IPC settings check the output of the "sysdef" command (look for IPC Shared +Memory). There you should see the maximum allocable size for a shared memory +segment. If it is less than 5 M you should really increase it by adding the +following line in your /etc/system file: + +.. code:: + :class: highlight + + set shmsys:shminfo_shmmax=20971520 + +- Make sure you don't already have this value set. If you do, simply increase + the value. In case you have a much bigger value, stick to what you have, + because you should have no problems with it. +- The value allows a maximum segment size of 20 M, which really should be + enough for anyone. If not, try using a smaller background image! +- Make sure you spell the line *exactly* as shown, otherwise at boot time the + kernel will complain of not finding such a module name and will not set a + thing about it! +- Make sure you don't delete other lines or modify them "beyond recognition", + for evil things may happen at boot time. + +After adding this to your /etc/system you need to reboot in order for the new +limit to take effect. Also, you may want to check the new limit just to make +sure it has been set. + +Thanks to Bogdan Iamandei for this answer. + +How do I add Window Maker to the Solaris dtlogin screen? +........................................................ + +The two files that determine alternate window managers are: + +.. code:: + :class: highlight + + /usr/dt/config/C/Xresources.d/Xresources.* + /usr/dt/config/Xsession.* + +If you look in there, you'll find Xresources.ow and Xsession.ow, respectively. +All you need are two files that set up Window Maker (or any other window +manager) in a similar fashion, calling them Xresources.wm and Xsession.wm (or +whichever extension you prefer). + +Here is an example setup: + +.. code:: resource + :class: highlight + + # ************************************************************************** + # + # Window Maker config file + # Mike Bland + # + # /usr/dt/config/C/Xresources.d/Xresources.wm + # + # used by dtlogin + # + # ************************************************************************** + + Dtlogin*altDtsIncrement: True + + Dtlogin*altDtName: Window Maker + Dtlogin*altDtKey: /usr/local/bin/wmaker + Dtlogin*altDtStart: /usr/dt/config/Xsession.wm + #Dtlogin*altDtLogo: /usr/local/share/logos/WM_logo.xpm + +Once I get a logo ready, I'll add it to the dtlogin screen by uncommenting the +last line. + +And this example script: + +.. code:: ksh + :class: highlight + + #!/bin/ksh + # ************************************************************************** + # + # Window Maker startup script + # Mike Bland + # /usr/dt/config/Xsession.wm + # + # used by dtlogin + # + # ************************************************************************** + + . /usr/local/etc/.profile # Sources the file containing necessary + # environment variables (especially + # LD_LIBRARY_PATH=/usr/local/lib:...); + # make sure it's executable. + + WINDOW_MANAGER=/usr/local/bin/wmaker + + export WINDOW_MANAGER + + /usr/local/bin/wmaker + +What happened to libPropList? +............................. + +The libPropList dependency has been removed as of Window Maker version 0.70.0, +and is replaced by cleaner, more robust code in the WINGs toolkit. This new +code maintains existing proplist compatibility, so there are no visable changes +for users, and existing file formats will work as they did before. + +For developers, there is a proplist-compat.h header that provides a mapping +between the old and new function names. See the comments in this file for +further instructions. + +---- + +Configuring Window Maker +------------------------ + +What are those files inside my ~/GNUstep directory? +................................................... + +Here is a synopsis of the files in ~/GNUstep + +* ~/GNUstep/WindowMaker/WindowMaker is main config file. This file controls + options such as keybindings, fonts, pixmaps, and focus modes. +* ~/GNUstep/WindowMaker/WMWindowAttributes controls the "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 is the file that is automatically generated and + contains the current dock settings. It is not recommended to edit this file + by hand. +* ~/GNUstep/Defaults/WMRootMenu specifies what file to use as the root menu. In + Window Maker 0.19.0 and higher, this file should be replaced by plmenu from + ~/GNUstep/Defaults/WindowMaker so that one can use WPrefs.app to edit the + menu. +* ~/GNUstep/Library/WindowMaker/menu is used to change your root menu, if you + are using the old menu style. + +How do I enable the normal X sloppy focus mode? +............................................... + +If you are using WPrefs, you can choose the ``Window Focus Prefrences`` tab and +then select the ``Input Focus Mode`` Slider. + +Scroll Down and choose ``Sloppy`` Focus Mode. + +You may also use a text editor on ``~/GNUstep/Defaults/WindowMaker`` and change +the following: + +.. code:: + :class: highlight + + FocusMode = sloppy; + +How do I get my auto-arrange icons to work? +........................................... + +In WPrefs, choose the ``Icon Prefrences Tab`` and select the ``Auto Arrange +Icons`` Checkbox. Or in ``~/GNUstep/Defaults/WindowMaker`` set + +.. code:: + :class: highlight + + AutoArrangeIcons=YES; + +and the icons should now auto-arrange. + +How do I get my Meta-Tab to cycle through windows correctly? +............................................................ + +To use WPrefs to modify these, choose the ``Ergonomic Prefrences`` tab and +check ``Raise window when switching focus with keyboard (Circulate Raise)`` + +Or you can use a text editor to make sure that these settings are in your +``~/GNUstep/Defaults/WindowMaker`` file: + +.. code:: + :class: highlight + + CirculateRaise = YES; + RaiseDelay = 1; + +As of 0.61.0, MS Window's Style application tabbing is supported by default. + +How do I get a tile background for my appicons (those things in the dock)? +.......................................................................... + +These can all be adjusted by the ``Appearance Preferences`` tab in WPrefs. + +Select the tile and then choose the edit texture dialog. Then you may choose +any of the different tile background options in the The old text editor method +is provided below for convience. + +You need to change one line in your '~/GNUstep/Defaults/WindowMaker' file. + +.. code:: + :class: highlight + + IconBack = (spixmap, tile.black.xpm, white); + +The last parameter is the color that fills in any transparent parts of your +icon. + +How do you dock that doesn't have an appicon in the new version of WindowMaker? +..................................................................................................... + +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. + +This should allow you do dock the program normally. + +Dan Pascu adds: + +Emulate Appicon does exactly the same as dockit. So if Emulate Appicon does not +work, dockit will not work either. For such apps you can do nothing. They are +badly coded (they do not set the instance.class hints). For these Attributes +are also not available, since attributes apply to an instance and/or class +hint. + +Note: Dockit was previously distributed with Window Maker and was launched from +the top dock icon. + +Elliott Potter adds: + +There's another way to dock applications that misbehave ... I've only done this +with a couple of things (Adobe AcroRead is the only one I remember at the +moment). + +If Attributes -> Advanced Options -> Emulate Application Icon doesn't work: + +- Dock another application to the clip, where you want your application to go. + I used gv, but anything you can dock will work. +- Quit WindowMaker +- Edit ~/GNUstep/Defaults/WMState. + + If you're docking to the clip, scroll down to the Workspaces section. + When you find whatever you docked, you'll see: + + .. code:: + :class: highlight + + { + Command = gv; + Name = GV.gv; + AutoLaunch = No; + Forced = No; + BuggyApplication = No; + Position = "6,0" + Omnipresent = No; + DropCommand = "gv %d"; + }, + + Edit it to use the info for your new application: + + .. code:: + :class: highlight + + { + Command = acroread; # use the full pathname if you have to + Name = acroread.acroread; + AutoLaunch = No; + Forced = No; + BuggyApplication = No; + Position = "6,0" + Omnipresent = No; + DropCommand = "acroread %s"; + }, + + Then edit WMWindowAttributes, and add a line for your application's + icon...you can edit the line that was inserted, or make a new one - I + just make a new one: + + .. code:: + :class: highlight + + acroread.acroread = {Icon = pdf.tiff;}; + + Then re-start WindowMaker, and your icon should be there! You can move it + around like any other docked app now, but the Attributes section still won't + work. + +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 go to the attributes menu. Click on Window +Attributes and click the the Disable titlebar and Disable Resizebar options. +Click Save, and then click Apply then close the Attributes panel. + +By Default, to get back to the attributes menu, use the key combination +Control-Esc. + +How do I set a pixmap background? +................................. + +Here is the in depth explanation straight from the NEWS file: + +wmsetbg now accepts the following options: + +.. TODO wow! how old this thing is! + +.. code:: + :class: highlight + + usage: wmsetbg [-options] image + options: + -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. 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 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. +- ``-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. + +The following line is straight from your WindowMaker-0.15.x +~/GNUstep/Library/WindowMaker/menu file and should all be on one line. + +"Images" OPEN_MENU BACKGROUNDS_DIR ~/GNUstep/Library/WindowMaker/Backgrounds +WITH wmsetbg -u -t + +This should give you an idea on how to add other entries for different image +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 + + +.. code:: sh + :class: highlight + + xv -root -quit -maxpect ~/background.jpg + +or + +.. code:: sh + :class: highlight + + 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): + +.. code:: sh + :class: highlight + + xv -root -quit -rmodeX ~/background.jpg + +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) + +.. code:: sh + :class: highlight + + "More Backgrounds" OPEN_MENU /home/whoever/backgrounds xv -root -maxpect -quit + +Can I put pixmaps in my root menu and title bars? +................................................. + +Put the pixmaps in a directory that is located in your pixmap path set on +``Search Path Configuration`` Tab. + +Then switch ``Appearance Preferences`` tab and select what widget you would to +adjust under the ``Texture`` tab. Click edit. Chose an image texture format and +then search for the texture. + +You can use a similar procedure for any type of menu editing. + +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? +............................................................................. + +This involves a minor source tweak. Instructions are available at +http://largo.windowmaker.org/tips.php#titlebar_icons + +Why does Netscape have a black and white Icon when I minimize it? +................................................................. + +Craig Maloney has this answer: + +If you happen to ``--enable-openlook`` at compile time, Netscape (and +presumably other apps as well) believe they're running under OLVWM, and +minimise with monochrome icons. Once compiled without OpenLook support, +Netscape minimizes with the correct icon. + +How do I get superfluous bells and whistles working? +.................................................... + +Open WPrefs and go under the ``Other Configurations`` tab. Under ``Animations +and Sound``, depress the Superfluous tab. + + Alternatively, you may add + +.. code:: + :class: highlight + + Superfluous=YES; + +to your ~/GNUstep/Defaults/Windowmaker file. + +How do I get the classic NeXT(tm)-like style back? +.................................................. + +Open WPrefs and go under the ``Other Configurations`` tab. Under ``Title Bar +Style``, select the classic look. + +Or you can add + +.. code:: + :class: highlight + + NewStyle=NO; + +to your ~/GNUstep/Defaults/Windowmaker file. + +How do I get the window menu with only a two button mouse? +.......................................................... + +In WPrefs, under ``Mouse Prefrences``, the mouse actions can be mapped to a +button of choice. + +Jim Noble explains another way to do this: + +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. + +.. code:: + :class: highlight + + ApplicationMenuMouseButton = Left; + +and + +.. code:: + :class: highlight + + 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. + +How do I edit my root menu? +........................... + +You can now use WPrefs.app ( its appicon looks like a heart rate meter with a +GNUStep icon backgroud ). Note that this will replace any oldstyle menus and +there is no way to convert the oldstyle menu to the new libproplist style menu. + +For old style menus, edit the file ``~/GNUstep/Library/WindowMaker/menu`` 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 + +.. code:: shell-session + :class: highlight + + $ touch menu + +to force the modification time into the future. + +WPrefs disappeared from the Dock! How do I get it back? +....................................................... + +Pascal Hofstee offers this answer: + +You should just start it from a terminal by supplying it's FULL path-name, +which is usually the following: ``/usr/local/GNUstep/Apps/WPrefs.app/WPrefs``. + +At this point, a new appicon should be generated which can be placed back into +the Dock. + +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. + +Another method is to edit ``~/GNUstep/Defaults/WMWindowAttributes`` by hand and +use the ``AlwaysUserIcon=YES;`` option for the app. For example: + +.. code:: + :class: highlight + + xmcd = { + Icon = "Radio.xpm"; + AlwaysUserIcon=Yes; + }; + +How do I turn off the workspace titles between workspaces? +.......................................................... + +In Window Maker 0.60.0, an option was added to turn this off. + +By editing ``~/GNUstep/Defaults/WindowMaker`` insert or modify the key +``WorkspaceNameDisplayPosition = none;`` Other valid options for this include +``center``/``top``/``bottom``/``topleft``/``topright``/``bottomleft``/``bottomright``; + +How do I add dynamic items to my root menu? +........................................... + +A few programs are floating about, notably wkdemenu.pl that can produce output +from other menu styles. In order to get WindowMaker to launch the process +everytime you want to use the menu, use something like + +.. code:: + :class: highlight + + ("External Menu", OPEN_MENU, "| bob.sh") + +in a proplist style menu. You can tell if you have a proplist style menu if you +can edit it with WPrefs. + +You can do this directly in WPrefs by going to the menu editor, adding an +"external menu", and then clicking the "ask guru button" and filling in the +process name. + +Thanks to Igor P. Roboul + +How do I remove or hide appicons? +................................. + +There are two options here, and you need to consider which one you prefer. Read +both of these before you decide. + +First, if you do not want to use the clip or dock at all, you can launch wmaker +with with + +.. code:: shell-session + :class: highlight + + $ wmaker --no-clip --no-dock + +and then in ``~/GNUstep/Defaults/WMWindowAttributes`` add + +.. code:: + :class: highlight + + "*" = {NoAppIcon=Yes;}; + +The problem with this method is if you use the dock for dockapps, it renders +them with out an appicon to write to. An alternative method if you are willing +to let the clip be on your desktop is to right click on the clip > clip options +> auto attract. Double click the clip so that it is grayed and all appicons +will be hidden. Then you can hide the clip behind the dock so that it is out of +your way. This will allow appicons to work. + +I disabled my titlebar. How can I get it back? +.............................................. + +Thanks to Jim Knoble for this answer + +Set the focus to the window and then use the keystroke assigned to the titlebar +menu. If you're not sure what the keystroke is, you can find out using WPrefs: +in the keyboard section, select the *Open window commands menu* item in the +list of actions. The keystroke assigned to it ought to appear in the +*Shortcut' area*. + +Typically it is Control-Esc or F10 in older version of WindowMaker. + +How do I remove ALT+Mouse1 from the action Window Maker grabs for an application? +................................................................................. + +Do [Button3Down] (for righthanded mouse users, [RightButtonDown]) on the +titlebar of the desired window. Choose ``Attributes...``. In the Attributes +inspector, choose ``Advanced Options``. Check ``Don't Bind Mouse Clicks``. +Apply or Save as desired, then close the Attributes inspector. + +The result is that [Alt+Button1] (which usually grabs a window to move it +around), [Alt+Button2] (which usually grabs a window to move it around without +changing the window stacking order), and [Alt+Button3] (which usually resizes a +window) all get passed to the application instead of performing their usual +action. + +How do I configure the Dock and Clip to use less space on a small screen? +......................................................................... + +This answer is current as of WindowMaker-0.61.1. + +For the Clip, either: + +- Disable the Clip from WPrefs (panel number 7), or +- Hide the Clip under the Dock (for example, in the upper righth and corner of + the screen). + +The latter is probably more useful on desktops with limited space, since you +can still set the Clip to attract app-icons so they don't clutter your desktop. + +For the Dock, try the following: + +#. Exit Window Maker. +#. Log in via a text console or using a different window manager. +#. Edit ~/GNUstep/Defaults/WMState using your favorite text editor + (for example, vi, emacs, or pico). + +#. Find the *Applications* part of the *Dock* structure. Find the item with + *Position = "0,0";*. Change the *Command* item to the command you want the + top tile to launch. Change the *Name* item to the *.* name + of the application you just made the Command item start (for example, if + *Command* is *"xedit"*, then *Name* should be *xedit.Xedit*). +#. Save the WMState file. +#. Start an X session with Window Maker. +#. Check that the top tile starts the command you told it to. (You should still + also be able to move the Dock up and down using [LeftDrag] on the top tile.) +#. You can configure the tile (including autolaunch and the drop-command) in + the regular manner ([RightButtonDown] on the tile and choose *Settings...* + from the resulting menu). + +Why do dashes not work as menu entries? +....................................... + +If you wish to use a ``-`` as part of a menu item name, you must enclose the +name in double quotes. This will only apply if you're editing the +~/GNUstep/Defaults/WMRootMenu file manually, as it is handled properly within +WPrefs. + +This will work: + +.. code:: + :class: highlight + + (ssh, + ("us-gw", EXEC, "Eterm -e ssh us-gw"), + +This will not: + +.. code:: + :class: highlight + + (ssh, + (us-gw, EXEC, "Eterm -e ssh us-gw"), + +Thanks to Martin Sillence for pointing this out. + +---- + +Using Window Maker +------------------ + +How do add new icons to the Dock? +................................. + +First, launch an application. If an icon (henceforth called an ``appicon``) +appears in the bottom left corner of the screen, left click and drag it over +near the Dock. You will see a slightly opaque square of where the Dock will +place the appicon. When you do, release the mouse button and the appicon should +now be in the Dock. + +Next, right click on the desktop to bring up the menu. Select Workspace -> Save +Session to make this permanent. + +What is the difference between the Exit and Exit Session Option? +................................................................ + +Another answer from Dan Pascu: + +Exit will exit wmaker, but can leave other X apps running, provided that it was +not the last app launched in the .xinitrc (for instance, if you had exec +wmaker, followed by exec xterm, exiting wmaker using 'Exit' will leave the +xterm running so you could start another window manager, etc.) This is +accomplished because X will not shutdown unless all X apps are closed. + +Exit session will exit wmaker, but will also close all running apps, thus the X +server will be closed too. + + +How do I "dock" icons 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. + +Why do none of my key bindings (ie: Alt+#) work in Window Maker? +................................................................ + +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 $(WindowMaker)/src/wconfig.h and +changing it to ``#define NUMLOCK_HACK``. + +With the release of 0.18.0, this hack is now working and hopefully no one will +have to ask this question again. + +How do I rename workspaces? +........................... + +Right click to bring up the root menu. Go under the Workspaces menu item and +hold the control key down. Next, click on the workspace entry you would like to +rename, type the name, and press enter. + +How can I resize a window if the window is larger than my current desktop? +.......................................................................... + +David Reviejo best summed up this answer: + +Maybe you know: Alt+Left click and drag to move the window. + +Try this: 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 can +change the move/resize mode by pressing the SHIFT key. + +How do I "undock" appicons? +........................... + +If the program is not running, just drag the icon to the middle of your desktop +and watch it disappear. If the program is running, hold down Meta and drag the +icon off the dock. + +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. + +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 + +When I set the root background with wmsetbg by hand it works, but when I do +that from the configuration files it doesnt! If you set the root background +with wmsetbg by hand, it will obviously find the image, since you have +explicitly specified it by hand. But if you simply put it in +``~/GNUstep/Defaults/WindowMaker`` in some option like WorkspaceBack, it will +not find the image because Window Maker can't read your mind to figure where +you put the image. So, to fix it, you have to either place the full path for +the image in the texture specification or put the path for the directory you +put your background images in the PixmapPath option. You can also put all your +background images in places like ``~/GNUstep/Library/WindowMaker/Backgrounds`` +or ``/usr/local/share/WindowMaker/Backgrounds``. + +David Green says that another possibility is that you have two copies of the +worker programs: wmsetbg (and possibly setstyle) and the wrong one is in the +path first. + +What is the purpose of being able to draw a box on the root menu with a left click? +................................................................................... + +Its purpose is two-fold. + +First, it is used to select multiple windows on a desktop at a time. When these +windows are selected, they can be moved around on your desktop and will retain +their relative positions. + +Second, once selected, they are persistent through desktop changes. So it is +useful for moving large numbers of windows between desktops. + +You can also select windows with shift+click. + +---- + +Application Compatibility +------------------------- + +How do I assign gimp an appicon? +................................ + +You can enter the following line in WMWindowAttributes: + +.. code:: + :class: highlight + + gimp={Icon="gimp.tiff";}; + +Window Maker now can assign Icons from within the windowmanager. To do so, +right click on the title bar of an app, click on the droplist->Icon and +WorkSpace entry, enter the icon file name (make sure this is in your pixmap +path), click update, apply, and then save. + +How do I get an appicon for XEmacs 20.3+? +......................................... + +Thanks to Michael Hafner for this answer. + +You don't need to patch the XEmacs code, just run + +.. code:: shell-session + :class: highlight + + ./configure --with-session=yes (in addition to any other options you use) + +in your XEmacs 20.3+ sourcedir and rebuild it. Then XEmacs shows an appicon +when running and you can easily dock it. + +Where do I get the nifty clock program I always see on people's desktops? +......................................................................... + +It's called asclock. Once included with Window Maker, it now is available at +ftp://ftp.windowmaker.org/pub/contrib/srcs/apps/asclock.tgz. + +asclock was written by Beat Christen and used to have its own website, which +seems to have disappeared. However, references to it exist all over the place, +and can be found by searching `Google +`_. + +Beat Christen wrote this awhile back: + +Please note that the asclock-gtk version 2.0 beta 4 (asclock-gtk-2.0b4.tar.gz) +does not have the -d switch yet and that the asclock-xlib-2.1b2.tar.gz does not +have the shaped asclock builtin. + +A wonderful alternative to asclock is Jim Knoble's `wmclock +`_. It duplicates asclock and adds some much +needed improvements. + +How do you dock asclock? +........................ + +It is highly recommended that you use the asclock mentioned previously in +question 5.3. The asclock that is typically included in AfterStep will not +properly dock with Window Maker. At this point, there are at least four or five +different versions of asclock floating about. + +For older versions such as asclock-classic , use a command line similar to + +.. code:: shell-session + :class: highlight + + asclock -shape -iconic -12 & + +For newer versions such as asclock-xlib 2.0 and asclock-gtk use + +.. code:: shell-session + :class: highlight + + asclock -shape -iconic -12 -d & + +Drag it from the top right corner of the clock to the dock. Right click on the +icon and select autolaunch. + +In order to make asclock launch every time you start Window Maker, right click +on the outer edge of the border for asclock until a menu appears. Select the +"Settings" item and then select the "Lauch this Program Automatically" option +then select the "OK" button. + +If you get an error such as sh: /dev/console: Permission denied, login as root, +cd to /dev/ and run + +.. code:: shell-session + :class: highlight + + ./MAKEDEV console + +Where can I get more dockapps? +.............................. + +The Window Maker team got tired of people E-mailing constantly asking where the +websites for obscure dockapps disappeared to. So we've created the ultimate +dockapps community website. Visit `dockapps.net `_ for +the latest, up-to-date links, information, and download for Window Maker and +related dockapps. + +Another large index of dockapp links is available at +http://www.bensinclair.com/dockapp. The downside to this is that they're only +links, so if someone stops maintaining a dockapp, or their web hosting provider +cuts them off, you won't be able to get to it. Still, Ben Sinclair's site was +the first big "dockapp warehouse" site, so we give credit where credit is due. +:) + +How do I get an appicon for rxvt so I can dock it? +.................................................. + +.. TODO check out urls and legitimacy of the question + +The default rxvt that comes with most distributions 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.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 + +How do I allow Alt+# to work in an rxvt/xterm session? +...................................................... + +First, Launch a unique instance of rxvt or xterm. This can be done using the -N +option of rxvt. + +.. code:: shell-session + :class: highlight + + rxvt -name foo -e irc + +Then, go to the Attributes menu (right click on titlebar -> Attributes) / +Advanced Options and enable "Don't Bind Keyboard shortcuts". Click Save and +Apply and you should be able to run your session without the shortcuts. + +How do I get different icons for different rxvt's and xterms? +............................................................. + +The hint is the -name option for xterm or rxvt. This will allow you to change +the exact WM_CLASS in the attributes menu and assign a unique icon. + +.. code:: shell-session + :class: highlight + + rxvt -name foo -title Testing + +Then Right click on the title bar to bring up the attributes menu, and you will +be able to edit the properties for foo.XTerm (ie: assign a unique icon). + +How do I launch multiple instances of XTerm from one appicon? +............................................................. + +Thanks for the update by Sara C. Pickett: + +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. + +Then right-click on the docked appicon and select settings. Change the +Application Path with arguments section to + +.. code:: shell-session + :class: highlight + + '/bin/sh -c "exec xterm &"' + +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): + +.. code:: + :class: highlight + + user specified location: 136679205, 1074468360 + user specified size: 400 by 300 + program specified minimum size: 400 by 300 + +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 ;) + +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. + +If you can recompile Scilab, this came from a Scilab developer: + +replace + +.. code:: C + :class: highlight + + size_hints.flags = USPosition | USSize | PMinSize; + +with + +.. code:: C + :class: highlight + + size_hints.flags = /** USPosition |**/ USSize | PMinSize; + +in routines/xsci/jpc_SGraph.c + +How do I get a transparent xterm/rxvt/xconsole? +............................................... + +You need a terminal emulator that has support for transparency, like Eterm, the +latest rxvt, wterm, aterm or gnome-terminal. + +You can find these programs on http://www.freshmeat.net. + +How do I dock an arbitrary console application like mutt? +......................................................... + +There are two key things to do if you want a program (such as mutt) to be able +to start in a terminal window from the Dock or the Clip: + +- Make the terminal window start the program you want to run instead of a + shell. Both xterm and rxvt (and its descendants) are capable of doing this. + For example: + + .. code:: shell-session + :class: highlight + + xterm -e mutt + rxvt -e mutt + gnome-terminal -e mutt + +- Convince Window Maker that the resulting terminal window is not a regular + terminal window, but rather some other program instance. Both xterm and rxvt + are also capable of doing this. Make sure that -e is the last command + option. For example: + + .. code:: shell-session + :class: highlight + + xterm -name muttTerm -e mutt + rxvt -name muttTerm -e mutt + gnome-terminal --name=muttTerm -e mutt + + This causes the instance of the terminal window that you start to have an + . pair of ``muttTerm.XTerm`` (usually rxvt's + class is also XTerm; don't know about its descendants, such as wterm and + Eterm). + + Do not use spaces or periods in the instance name. For example, these are + BAD instance names: + + .. code:: shell-session + :class: highlight + + xterm -name mutt.term -e mutt + rxvt -name 'mutt term' -e mutt + + Window Maker will not like you if you use them. + + With a different instance name, you can now do the following: + + - Dock the resulting appicon in the dock, or clip it to the Clip. + - Assign a different icon and different window properties to the `special' + terminal window running your program (make sure you choose the exact + ``muttTerm.XTerm`` window specification in the Attributes editor). + - Specify different resource settings for muttTerm in your ~/.Xdefaults file + (e.g., different default foreground and background colors). + +There are a few other non-key things you can do to complete the process: + +- Tell the terminal window to display a more meaningful or prettier title and + icon title than what gets put there due to ``-e``. For example: + + .. code:: shell-session + :class: highlight + + rxvt -title 'Mail (mutt)' -n 'Mail' -name muttTerm -e mutt + + Xterm works the same way. + +- These are getting to be a lot of command-line options. Make a wrapper script + to use so you don't have to remember them all: + + .. code:: shell-session + :class: highlight + + mkdir ~/bin + cat >~/bin/muttTerm <`_ for an +in-depth walk-through on making a Theme archive. + +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 +~/GNUstep/Library/WindowMaker/ directory for your own personal use. + +Use your favorite variation of the following: + +.. code:: shell-session + :class: highlight + + gzip -dc "Theme.tar.gz" | tar xvf - + +Note that directory may differ on different systems + +Why do my themes not load the background? +......................................... + +Likely you have not compiled Window Maker with support for the background image +format, usually JPEG. + +You can check this by the following command + +.. code:: shell-session + :class: highlight + + ldd `which wmaker` + +.. TODO: check url + +If libjpeg is not listed, you will need to install libjpeg that is available +from ftp.windowmaker.org + +How do I make a Theme? +...................... + +Please see the `theme-HOWTO `_ for +details on making both new and old style themes (and the differences between +the two), here is a short summary on making old style themes. 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. + +To make a Theme.tar.gz, these are the steps I take: + +#. Optionally create a README for your theme in WindowMaker/, call it + something like "ThemeName.txt" + +#. Use the following command to add the Theme files to your .tar file. + + .. code:: shell-session + :class: highlight + + 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 + nder 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. + +#. Then gzip your .tar file to make your ThemeName.tar.gz file with this + command: + + .. code:: shell-session + :class: highlight + + 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 + + .. code:: shell-session + :class: highlight + + gzip -9 ThemeName.tar + +#. Now give it to your friends! + +I untarred a theme in ~/GNUstep/Library/WindowMaker like the README says,but it doesnt show up in the menu! +........................................................................................................... + +Make sure the OPEN_MENU command for the Themes entry in your menu has the path for your personal themes directory included in it. To be sure, add + +.. code:: + :class: highlight + + #define USER_THEMES_DIR ~/GNUstep/Library/WindowMaker/Themes + +in your wmmacros file. + +---- + +Miscellaneous Questions +----------------------- + +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 Meta+Number combination will switch between desktops. The 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 the edge of the desktop onto the next +workspace, or right click on its title bar, select 'Move To', and click the +workspace you want it to be moved to. + +However, Window Maker does support KDE and GNOME protocols, including their +workspace management, so you may use their pager in conjunction with Window +Maker in these. Note that in order for this to work, you must enable support +when you configure Window Maker (using the --enable-kde and --enable-gnome +configure options). + +Note also that the Blackbox pager application will work with Window Maker. + +How do I use getstyle and setstyle? +................................... + +To capture the current Window Maker style, use the command + +.. code:: shell-session + :class: highlight + + getstyle > current.style + +To replace the current style, use the command + +.. code:: shell-session + :class: highlight + + setstyle filename.style + +Why was libPropList removed from the distribution? +.................................................. + +Alfredo Kojima writes: + +libPropList was removed from Window Maker because other programs also use it, +such as GNOME. If libPropList is distributed with wmaker, it would cause +problems with whatever version of libPropList you already had installed. + +Now, there is no more GNOME libproplist and Window Maker libproplist. There is +only libPropList which is worked on as a single community effort. + +Why don't you distribute normal diff or 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 a) most systems do not have +xdelta installed and b) xdelta is picky and requires the files 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 a) it is more complicated +and error prone to require the user to manually move the files to the correct +places b) 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 and c) 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. + +Will you add GNOME or KDE support? +.................................. + +Support for GNOME and KDE hints has been included since 0.50.0. + +Note that you must enable this support at compile time with the proper +arguments to configure (--enable-kde and --enable-gnome). + +How can I produce a backtrace when Window Maker keeps crashing? +............................................................... + +Thanks to Paul Seelig for this answer: + +You can use the GNU debugger "gdb" to get exact information about how and where +wmaker crashed. Sending this information to the developers is the most +convenient way to help in debugging. + +The wmaker binary needs to be compiled with debugging turned on ("./configure +--with-debug etc.") for this to work. + +Exit wmaker and start a failsafe X session with an open xterm. + +First type the command "script" to log the following session into a file +commonly called "~/typescript". Then enter "gdb wmaker" at the shellprompt: + +.. code:: shell-session + :class: highlight + + [shell prompt]~ > script + Script started, output file is typescript + [shell prompt]~ > gdb wmaker + GNU gdb 4.17.m68k.objc.threads.hwwp.fpu.gnat + Copyright 1998 Free Software Foundation, Inc. + GDB is free software, covered by the GNU General Public License, and you are + welcome to change it and/or distribute copies of it under certain conditions. + Type "show copying" to see the conditions. + There is absolutely no warranty for GDB. Type "show warranty" for details. + This GDB was configured as "i486-pc-linux-gnu"... + (gdb) + +At the gdb prompt simply type "run" to start the WMaker session: + +.. code:: + :class: highlight + + (gdb) run + Starting program: /usr/bin/X11/wmaker + +Try to reproduce the error which has provoked the crash before and if you +succeed the session will simply freeze and you will see something similiar to +following prompt: + +.. code:: + :class: highlight + + Program received signal SIGSEGV, Segmentation fault. + 0x809ea0c in WMGetFirstInBag (bag=0x0, item=0x811e170) at bag.c:84 + 84 for (i = 0; i < bag->count; i++) { + (gdb) + +Now you just type "bt" for "backtrace" and gdb will show you where the crash +happened: + +.. code:: + :class: highlight + + (gdb) bt + #0 0x809ea0c in WMGetFirstInBag (bag=0x0, item=0x811e170) at bag.c:84 + #1 0x807c542 in wSessionSaveState (scr=0x80c28e8) at session.c:299 + #2 0x807bd88 in wScreenSaveState (scr=0x80c28e8) at screen.c:1089 + #3 0x807cf54 in Shutdown (mode=WSExitMode) at shutdown.c:111 + #4 0x8078101 in exitCommand (menu=0x80f7230, entry=0x80fdb38) + at rootmenu.c:193 + #5 0x8078403 in wRootMenuPerformShortcut (event=0xbffff360) at rootmenu.c:401 + #6 0x80630f7 in handleKeyPress (event=0xbffff360) at event.c:1492 + #7 0x8061c86 in DispatchEvent (event=0xbffff360) at event.c:232 + #8 0x8093092 in WMHandleEvent (event=0xbffff360) at wevent.c:585 + #9 0x8061dae in EventLoop () at event.c:322 + #10 0x806b238 in main (argc=1, argv=0xbffff404) at main.c:594 + (gdb) + +To quit the debugger just type "quit" and say "y": + +.. code:: + :class: highlight + + (gdb) quit + The program is running. Exit anyway? (y or n) y + [shell prompt]~ > + +To quit the script session type "exit" again: + +.. code:: shell-session + :class: highlight + + [shell prompt]~ > exit + exit + Script done, output file is typescript + [shell prompt]~ > + +Send the resulting "~/typescript" together with a concise explanation about how +to reproduce the bug (please use the included BUGFORM for instruction) to the +`developers `_. + +---- + +Troubleshooting Tips +-------------------- + +No questions are currently available for this chapter. + +---- + +Programming for Window Maker +---------------------------- + +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. + +Also you must make a call to XSetCommand(dpy, leader, argv, argc); + +Take a look at WindowMaker-0.12.3/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? +......................................................... + +Oliver Graf writes: + +The main window (normally this is called '.' [dot] in tk) should use the +following lines: + +.. code:: + :class: highlight + + wm command . [concat $argv0 $argv] + wm group . . + +All child windows attached to the same app-icon should use: + +.. code:: + :class: highlight + + toplevel .child + 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. + +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. You can find out +more information in our `WINGs development `_ section. + +Where can I get more information about WINGs? +............................................. + +Nic Berstein has created a WINGs development 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: `wings-request@postilion.org +`_. + +
    +
    +
    +
    Window Maker: FAQ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap1.html b/docs/chap1.html new file mode 100644 index 0000000..401adfe --- /dev/null +++ b/docs/chap1.html @@ -0,0 +1,120 @@ + + + + Window Maker: User Guide - Introduction + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Introduction

    + +

    This manual describes the usage and configuration of the Window Maker window +manager. It is intended for both users who never used the X Window System and +for users who have experience with other window managers.

    +

    How to Read this guide If you never have used a X window manager, you should +read all of this guide, as it contains detailed instructions for new users.

    +

    Text in sans serif font, indicate instructions you must follow to accomplish a +given task. If you're out of time (or patience), you should at least read text +in these parts.

    +

    You can ignore the text in Extra Bindings boxes while you're getting familiar +with Window Maker. Once you've got familiar with it, you can read the text in +these boxes to learn more ways to accomplish tasks.

    +
    +

    What is a window manager?

    +

    If you come from the Windows or MacOS world, you might be confused about all +these things like window managers, X windows etc.

    +

    In the Unix world, the task of providing a graphical user interface (GUI) is +normally divided by 3 different components:

    +

    the window server; the window manager and the user interface toolkit. The +window server is standard and is usually the X Window System or some vendor +provided compatible version of it. The X Window System, or X for short, is a +window server. It's function is to provide a portable and high-level access to +devices like keyboard, mouse and video display. It allows applications to show +graphical information on the display through rectangular areas called windows.

    +

    Most user interface objects, like buttons, menus and scrollers are made of +windows. The top level windows displayed by applications are named windows as +well. These objects are not provided by the window server. These must be made +by the application program or by the user interface toolkit.

    +

    For more information, read the manual page for X(1) and the documentation for +Xlib.

    +

    The primary function of the window manager is to control the layout of top +level windows on screen. Window Maker is a window manager. It provides a +titlebar and a resizebar to change window layout, application menus to launch +applications and execute special commands, application icons, miniwindows and +an application dock. They will be explained in more detail in the following +chapters.

    +

    The user interface toolkit is a library or collection of libraries that provide +an API for application developers to program the interfaces for their +applications. Toolkits generally provide controls like buttons, menus, +radio-buttons etc to be used for program interaction. There are currently many +of these toolkits available for X. Motif, OpenLook, and Athena are examples of +toolkits.

    +

    All other features normally found in other operating systems, like file +managers, are implemented as separate programs and are not directly related to +the window manager.

    +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Introduction
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap1.rst b/docs/chap1.rst new file mode 100644 index 0000000..3680a4e --- /dev/null +++ b/docs/chap1.rst @@ -0,0 +1,129 @@ + + + + Window Maker: User Guide - Introduction + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Introduction +============ + +This manual describes the usage and configuration of the Window Maker window +manager. It is intended for both users who never used the X Window System and +for users who have experience with other window managers. + +How to Read this guide If you never have used a X window manager, you should +read all of this guide, as it contains detailed instructions for new users. + +Text in sans serif font, indicate instructions you must follow to accomplish a +given task. If you're out of time (or patience), you should at least read text +in these parts. + +You can ignore the text in Extra Bindings boxes while you're getting familiar +with Window Maker. Once you've got familiar with it, you can read the text in +these boxes to learn more ways to accomplish tasks. + +What is a window manager? +------------------------- + +If you come from the Windows or MacOS world, you might be confused about all +these things like window managers, X windows etc. + +In the Unix world, the task of providing a graphical user interface (GUI) is +normally divided by 3 different components: + +the window server; the window manager and the user interface toolkit. The +window server is standard and is usually the X Window System or some vendor +provided compatible version of it. The X Window System, or X for short, is a +window server. It's function is to provide a portable and high-level access to +devices like keyboard, mouse and video display. It allows applications to show +graphical information on the display through rectangular areas called windows. + +Most user interface objects, like buttons, menus and scrollers are made of +windows. The top level windows displayed by applications are named windows as +well. These objects are not provided by the window server. These must be made +by the application program or by the user interface toolkit. + +For more information, read the manual page for X(1) and the documentation for +Xlib. + +The primary function of the window manager is to control the layout of top +level windows on screen. Window Maker is a window manager. It provides a +titlebar and a resizebar to change window layout, application menus to launch +applications and execute special commands, application icons, miniwindows and +an application dock. They will be explained in more detail in the following +chapters. + +The user interface toolkit is a library or collection of libraries that provide +an API for application developers to program the interfaces for their +applications. Toolkits generally provide controls like buttons, menus, +radio-buttons etc to be used for program interaction. There are currently many +of these toolkits available for X. Motif, OpenLook, and Athena are examples of +toolkits. + +All other features normally found in other operating systems, like file +managers, are implemented as separate programs and are not directly related to +the window manager. + +
    +
    +
    +
    Window Maker: User Guide - Introduction
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap2.html b/docs/chap2.html new file mode 100644 index 0000000..207ee4a --- /dev/null +++ b/docs/chap2.html @@ -0,0 +1,578 @@ + + + + Window Maker: User Guide - Windows + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Windows

    + +
    +

    Anatomy of a Window

    +

    Generally an application will have the following layout:

    +
    +Anatomy of a Window +
    +
    +
    Titlebar
    +
    +

    The titlebar presents the name of the application, document or window. It's +color indicates the keyboard focus state and type of the window. You can use +it to move, activate, raise, lower and access the window commands menu.

    +
    +
    Miniaturize button
    +
    +

    You can click on the miniaturize button to miniaturize/iconify a window or +click it with the Meta key pressed to hide the application.

    +
    +
    Close Button
    +
    +

    The close button can be used to close a window or kill the application, if +the application can't understand the close message.

    +
    +
    Resizebar
    +
    +

    You use the resizebar to (surprise!) resize a window.

    +
    +
    Client Area
    +
    +

    The client area is where the application show it's information. If the +window if inactive, you can click on it to activate it.

    +
    +
    +
    +
    +

    Working With Windows

    +
    +

    Focusing a Window

    +

    Windows can be in two states: focused, or unfocused. The focused window +(also called the key or active window) has a black titlebar and is the window +that receives keyboard input, ie: where you can type text. Usually it's the +window where you work on. Only one window may be focused at a time. Unfocused +windows have a light gray titlebar. Some applications have a special type of +window, called dialog windows transient windows or panels. When these windows +are active, the window that owns them (the main window) get a dark gray +titlebar. As soon as the dialog window is closed, the focus is returned to the +owner window.

    +

    The image below shows an active Open File panel and it's owner window.

    +
    +Focused, Unfocused, and Parent Window +
    +

    There are three styles of window focusing:

    +

    Click-to-Focus, or manual focus mode. In click-to-focus mode, you +explicitly choose the window that should be focused. This is the default mode.

    +

    Focus-Follow-Mouse, or auto-focus mode. In this mode, the focused window is +chosen based on the position of the mouse pointer. The window below the mouse +pointer is always the focused window.

    +

    Sloppy-Focus, or semi-auto-focus mode. This is similar to the +focus-follow-mouse mode, but if you move the pointer from a window to the root +window, the window will not loose focus.

    +

    You can choose between these modes with the FocusMode option.

    +

    To focus a window in Click-To-Focus mode:

    +
      +
    • Click on the titlebar, resizebar or in the client area of the window with the +left or right mouse button.

    • +
    +

    OR

    +
      +
    • Click on the titlebar with the middle mouse button. This will focus the +window without bringing it to the front.

    • +
    +

    OR

    +
      +
    • Open the window list menu and select the window to focus.

    • +
    +

    When you click in the client area of an inactive window to set the focus, the +click is normally processed by the application. If you find this behaviour a +little confusing, you can make the application ignore this click by using the +IgnoreFocusClick option.

    +

    To focus a window in Focus-Follow-Mouse mode:

    +
      +
    • Move the pointer over the window you want to focus.

    • +
    +
    +
    +

    Reordering Overlapping Windows

    +

    Windows can overlap other windows, making some windows be over or in front of +others.

    +

    To bring a window to the front:

    +
      +
    • Click on the titlebar or resizebar of the desired window with the left mouse +button.

    • +
    +

    OR

    +
      +
    • Select the desired window from the Window List menu.

    • +
    +

    Dialog/transient windows are always placed over their owner windows, unless the +OnTopTransients option is disabled. Some windows have a special attribute +that allow them be permanently over normal windows. You can make specific +windows have this attribute use the AlwaysOnTop window option or set it in +the Window Inspector panel.

    +

    Extra Bindings

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +

    Action

    Effect

    Meta-Click on the window titlebar, +with the left mouse button

    Sends the window to the +back.

    Meta-Click on the Client Area of +the window with the left mouse +button.

    Brings the window to the front and +focuses it.

    Hold the Meta key and press the Up +Arrow key

    Brings the current focused window to +the front.

    Hold the Meta key and press the +Down Arrow key

    Sends the current focused window to +the back.

    +
    +
    +

    Moving a Window

    +

    To move the window around the screen, drag the window through it's titlebar +with the left mouse button pressed. This will also bring the window to the +front and focus the window.

    +

    To move a window:

    +
      +
    • Click on the titlebar of the window you want to move with the left mouse +button and drag it with the button pressed.

    • +
    +

    While you move the window, a little box will appear in the screen, indicating +the current window position in pixels, relative to the top left corner of the +screen. You can change the location of this position box by hitting the Shift +key during the move operation.

    +

    In some rare occasions, it is possible for a window to be placed off screen. +This can happen with some buggy applications. To bring a window back to the +visible screen area, select the window in the Window List menu. You can prevent +windows from doing that with the DontMoveOff window attribute.

    +

    Extra Bindings

    + ++++ + + + + + + + + + + + + + + + + + + + + +

    Action

    Effect

    Drag the titlebar with the middle +mouse button

    Move the window without changing it's +stacking order.

    Drag the titlebar while holding the +Control key

    Move the window without focusing it.

    Drag the client area or resizebar +while holding the Meta key

    Move the window.

    +
    +
    +

    Resizing a Window

    +

    The size of a window can be adjusted by dragging the resizebar.

    +
    +A Resizebar +
    +

    Depending on the place you click to drag the resizebar, the resize operation is +constrained to a direction.

    +

    To resize a window:

    +
      +
    • To change the window's height, click in the middle region of the resizebar +and drag it vertically.

    • +
    • To change the window's width, click in either end regions of the resizebar +and drag it horizontally.

    • +
    • To change both height and width at the same time, click in either end regions +of the resizebar and drag it diagonally.

    • +
    +

    Extra Bindings

    + ++++ + + + + + + + + + + + + + + + + + + + + +

    Action

    Effect

    Drag the window in the client area +with the Right mouse button, while +holding the Meta key

    Resizes the window.

    Drag the resizebar with the middle +mouse button

    Resize the window without bringing +it to the front

    Drag the resizebar while holding +the Control key

    Resize the window without focusing +it.

    +
    +
    +

    Miniaturizing a Window

    +

    If you want to temporarily get rid of a window, you can miniaturize it.

    +
    +A Titlebar +
    +

    When miniaturizing a window, it will shrink into a miniwindow with a icon and a +title that is placed at the bottom of the screen.

    +
    +A Mini-window +

    A mini-window

    +
    +

    You can move the miniwindow around the screen by dragging it. Unlike +application icons, miniwindows cannot be docked.

    +

    To restore a window from it's miniwindow, double click the miniwindow. The +window will be restored in the current workspace, with the same position, size +and contents as it had before miniaturization.

    +

    To miniaturize a window:

    +
      +
    • Click on the miniaturize button

    • +
    +

    OR

    +
      +
    • Use the keyboard shortcut assigned to this action, Meta+m in the default +configuration.

    • +
    +

    You can also restore all miniaturized and hidden windows of a given application +by double clicking in it's application icon with the middle mouse button.

    +
    +
    +

    Shading a Window

    +

    If you want to temporarily get rid of a window, an option for it's +miniaturization is to shade it. When you shade a window, the window rolls up +to it's titlebar. You can do almost everything you do with a normal window with +shaded windows, like miniaturizing or closing it.

    +

    To shade a window:

    +
      +
    • Double Click on the titlebar of the window.

    • +
    +
    +A Shaded window +
    +
    +
    +

    Closing a Window

    +

    After finishing work in a window, you can close it to completely get rid of it. +When you close a window, it is removed from the screen and can no longer be +restored. So, before closing a window, be sure you have saved any work you were +doing on it.

    +
    +A Titlebar with a close button +
    +

    Some windows will have a close button with some dots around it. These windows +can't be closed normally and the only way to get rid of them is by exiting the +application. You should try exiting from inside the application (through it's +menus or buttons) when possible. Otherwise you can force WindowMaker to +kill the application.

    +

    To force the closure of a window (by killing the application):

    +
      +
    • Hold the Control key and click on the close button.

    • +
    +

    OR

    +
      +
    • Double click the close button.

    • +
    +

    It is also possible to kill applications that can be normally closed by +clicking the close button while holding the Control key.

    +
    +
    +

    Maximizing a Window

    +

    If you want to resize a window to occupy the whole screen, you can maximize the +window. When you unmaximize it, the window will be restored to the same +position and size it was before maximized.

    +

    To maximize a window:

    +
      +
    • Hold the Control key and double click on the window titlebar to resize the +window's height to full screen.

    • +
    +

    OR

    +
      +
    • Hold the Shift key and double click on the window titlebar to resize the +window's width to full screen.

    • +
    +

    OR

    +
      +
    • Hold both the Control and Shift keys and double click on the window titlebar +to resize both window's height and width to full screen.

    • +
    +

    To restore the size of a maximized window:

    +
      +
    • Hold the Control OR Shift key and double click on the window titlebar.

    • +
    +

    You can select whether the window should be maximized to the whole screen or if +the position of the Dock should be accounted for by setting the WinDock +option.

    +
    +
    +

    The Window Commands Menu

    +

    Clicking on the titlebar of a window with the right mouse button will open a +menu containing commands that will apply to that window. The menu can also be +opened through the keyboard with the Control+Escape key, by default.

    +
    +
    (Un)Maximize
    +
    +

    Will either maximize the window horizontally and vertically, or, if the +window is already maximized, restore the window to the size it was prior to +being maximized.

    +
    +
    Miniaturize
    +
    +

    Will miniaturize the window.

    +
    +
    (Un)Shade
    +
    +

    Will shade the window, or unshade it if it is already shaded.

    +
    +
    Hide
    +
    +

    Will hide all the windows of the application

    +
    +
    Hide Others
    +
    +

    Will hide all current applications except the current one

    +
    +
    Move To
    +
    +

    Allows you to move the window to a different workspace

    +
    +
    Attributes...
    +
    +

    Opens the Window Attributes Inspector (see section 2.3 <#2.3>)

    +
    +
    Close
    +
    +

    Will close the window

    +
    +
    Kill
    +
    +

    Will kill the application. Use this option only if the application does not +provide means to close it normally, or in extreme cases.

    +
    +
    +
    +
    +
    +

    The Window Attributes Inspector

    +
    +

    Window Specification

    +

    This panel Allows you to specify the WM_CLASS that WindowMaker should use to +identify the window whose attributes you are setting.

    +
    +Window Attributes Inspector: Window Specification +
    +
    +
    +

    Window Attributes

    +

    This panel lets you set the attributes for the selected window.

    +
    +Window Attributes Inspector: Window Attributes +
    +
    +
    Disable titlebar
    +
    +

    Causes the titlebar for the selected window not to be displayed

    +
    +
    Disable resizebar
    +
    +

    Causes the resizebar for the selected window not to be displayed

    +
    +
    Disable close button
    +
    +

    Causes the close button for the selected window not to be displayed

    +
    +
    Disable miniaturize button
    +
    +

    Causes the miniaturize button for the selected window not to be displayed

    +
    +
    Keep on Top
    +
    +

    Causes the selected window to stay on top of all other windows

    +
    +
    Omnipresent
    +
    +

    Causes the selected window to be displayed in all workspaces

    +
    +
    Start miniaturized
    +
    +

    Causes the selected window to start miniaturized

    +
    +
    Skip window list
    +
    +

    Causes the select window to be skipped when cycling through the window list.

    +
    +
    +
    +
    +

    Advanced Options

    +
    +Window Attributes Inspector: Advanced Options +
    +
    +
    Ignore HideOthers
    +
    +

    Causes the selected window to remain visible when HideOthers is selected +from the Window Commands Menu

    +
    +
    Don't bind keyboard shortcuts
    +
    +

    Causes the selected window to receive ALL keyboard events

    +
    +
    Don't bind mouse clicks
    +
    +

    Causes the selected window to receive all mouse-click events

    +
    +
    Keep Inside Screen
    +
    +

    Causes the selected window not to be able to place itself off the screen

    +
    +
    Don't let it take focus
    +
    +

    Causes the selected window not to be able to take input focus

    +
    +
    Don't Save Session
    +
    +

    Causes the state of the selected window not to be saved when a session is +saved. (either when quitting WindowMaker, or when done manually.)

    +
    +
    Emulate Application Icon
    +
    +

    Emulates an Application Icon for "broken" applications

    +
    +
    +
    +
    +

    Icon and Initial Workspace

    +

    This panel allows you to browse for, and update the mini-window +image for the selected window, as well as setting the initial workspace.

    +
    +Window Attributes Inspector: Icon and Initia Workspace +
    +
    +
    +

    Application Specific

    +

    Attributes specific to the selected application

    +
    +Window Attributes Inspector: Icon and Initia Workspace +
    +
    +
    Start hidden
    +
    +

    Starts the selected application in a hidden state

    +
    +
    No application icon
    +
    +

    Disables the application icon for the selected application

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Windows
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap2.rst b/docs/chap2.rst new file mode 100644 index 0000000..97555e7 --- /dev/null +++ b/docs/chap2.rst @@ -0,0 +1,539 @@ + + + + Window Maker: User Guide - Windows + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Windows +======= + +Anatomy of a Window +------------------- + +Generally an application will have the following layout: + +.. figure:: guide/images/anatomy.gif + :figclass: borderless + :alt: Anatomy of a Window + +Titlebar + The titlebar presents the name of the application, document or window. It's + color indicates the keyboard focus state and type of the window. You can use + it to move, activate, raise, lower and access the window commands menu. + +Miniaturize button + You can click on the miniaturize button to miniaturize/iconify a window or + click it with the **Meta** key pressed to hide the application. + +Close Button + The close button can be used to close a window or kill the application, if + the application can't understand the close message. + +Resizebar + You use the resizebar to (surprise!) resize a window. + +Client Area + The client area is where the application show it's information. If the + window if inactive, you can click on it to activate it. + + +Working With Windows +-------------------- + +Focusing a Window +~~~~~~~~~~~~~~~~~ + +Windows can be in two states: *focused*, or *unfocused.* The focused window +(also called the key or active window) has a black titlebar and is the window +that receives keyboard input, ie: where you can type text. Usually it's the +window where you work on. Only one window may be focused at a time. Unfocused +windows have a light gray titlebar. Some applications have a special type of +window, called dialog windows transient windows or panels. When these windows +are active, the window that owns them (the main window) get a dark gray +titlebar. As soon as the dialog window is closed, the focus is returned to the +owner window. + +The image below shows an active Open File panel and it's owner window. + +.. figure:: guide/images/focus.gif + :figclass: borderless + :alt: Focused, Unfocused, and Parent Window + +There are three styles of window focusing: + +**Click-to-Focus**, or manual focus mode. In click-to-focus mode, you +explicitly choose the window that should be focused. This is the default mode. + +**Focus-Follow-Mouse**, or auto-focus mode. In this mode, the focused window is +chosen based on the position of the mouse pointer. The window below the mouse +pointer is always the focused window. + +**Sloppy-Focus**, or semi-auto-focus mode. This is similar to the +focus-follow-mouse mode, but if you move the pointer from a window to the root +window, the window will not loose focus. + +You can choose between these modes with the *FocusMode* option. + +To focus a window in **Click-To-Focus** mode: + +- Click on the titlebar, resizebar or in the client area of the window with the + left or right mouse button. + +OR + +- Click on the titlebar with the middle mouse button. This will focus the + window without bringing it to the front. + +OR + +- Open the window list menu and select the window to focus. + +When you click in the client area of an inactive window to set the focus, the +click is normally processed by the application. If you find this behaviour a +little confusing, you can make the application ignore this click by using the +*IgnoreFocusClick* option. + +To focus a window in **Focus-Follow-Mouse** mode: + +- Move the pointer over the window you want to focus. + + +Reordering Overlapping Windows +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Windows can overlap other windows, making some windows be over or in front of +others. + +To bring a window to the front: + +- Click on the titlebar or resizebar of the desired window with the left mouse + button. + +OR + +- Select the desired window from the Window List menu. + +Dialog/transient windows are always placed over their owner windows, unless the +*OnTopTransients* option is disabled. Some windows have a special attribute +that allow them be permanently over normal windows. You can make specific +windows have this attribute use the *AlwaysOnTop* window option or set it in +the Window Inspector panel. + +**Extra Bindings** + ++------------------------------------+--------------------------------------+ +| Action | Effect | ++====================================+======================================+ +| Meta-Click on the window titlebar, | Sends the window to the | +| with the left mouse button | back. | ++------------------------------------+--------------------------------------+ +| Meta-Click on the Client Area of | Brings the window to the front and | +| the window with the left mouse | focuses it. | +| button. | | ++------------------------------------+--------------------------------------+ +| Hold the Meta key and press the Up | Brings the current focused window to | +| Arrow key | the front. | ++------------------------------------+--------------------------------------+ +| Hold the Meta key and press the | Sends the current focused window to | +| Down Arrow key | the back. | ++------------------------------------+--------------------------------------+ + + +Moving a Window +~~~~~~~~~~~~~~~ + +To move the window around the screen, drag the window through it's titlebar +with the left mouse button pressed. This will also bring the window to the +front and focus the window. + +To move a window: + +- Click on the titlebar of the window you want to move with the left mouse + button and drag it with the button pressed. + +While you move the window, a little box will appear in the screen, indicating +the current window position in pixels, relative to the top left corner of the +screen. You can change the location of this position box by hitting the Shift +key during the move operation. + +In some rare occasions, it is possible for a window to be placed off screen. +This can happen with some buggy applications. To bring a window back to the +visible screen area, select the window in the Window List menu. You can prevent +windows from doing that with the *DontMoveOff* window attribute. + +**Extra Bindings** + ++-------------------------------------+---------------------------------------+ +| Action | Effect | ++=====================================+=======================================+ +| Drag the titlebar with the middle | Move the window without changing it's | +| mouse button | stacking order. | ++-------------------------------------+---------------------------------------+ +| Drag the titlebar while holding the | Move the window without focusing it. | +| Control key | | ++-------------------------------------+---------------------------------------+ +| Drag the client area or resizebar | Move the window. | +| while holding the Meta key | | ++-------------------------------------+---------------------------------------+ + + +Resizing a Window +~~~~~~~~~~~~~~~~~ + +The size of a window can be adjusted by dragging the resizebar. + +.. figure:: guide/images/resizebar.gif + :figclass: borderless + :alt: A Resizebar + +Depending on the place you click to drag the resizebar, the resize operation is +constrained to a direction. + +To resize a window: + +- To change the window's height, click in the middle region of the resizebar + and drag it vertically. +- To change the window's width, click in either end regions of the resizebar + and drag it horizontally. +- To change both height and width at the same time, click in either end regions + of the resizebar and drag it diagonally. + +**Extra Bindings** + ++------------------------------------+------------------------------------+ +| Action | Effect | ++====================================+====================================+ +| Drag the window in the client area | Resizes the window. | +| with the Right mouse button, while | | +| holding the Meta key | | ++------------------------------------+------------------------------------+ +| Drag the resizebar with the middle | Resize the window without bringing | +| mouse button | it to the front | ++------------------------------------+------------------------------------+ +| Drag the resizebar while holding | Resize the window without focusing | +| the Control key | it. | ++------------------------------------+------------------------------------+ + + +Miniaturizing a Window +~~~~~~~~~~~~~~~~~~~~~~ + +If you want to temporarily get rid of a window, you can miniaturize it. + +.. figure:: guide/images/title.gif + :figclass: borderless + :alt: A Titlebar + +When miniaturizing a window, it will shrink into a miniwindow with a icon and a +title that is placed at the bottom of the screen. + +.. figure:: guide/images/mini.gif + :figclass: borderless + :alt: A Mini-window + + A mini-window + +You can move the miniwindow around the screen by dragging it. Unlike +application icons, miniwindows cannot be docked. + +To restore a window from it's miniwindow, double click the miniwindow. The +window will be restored in the current workspace, with the same position, size +and contents as it had before miniaturization. + +To miniaturize a window: + +- Click on the miniaturize button + +OR + +- Use the keyboard shortcut assigned to this action, Meta+m in the default + configuration. + +You can also restore all miniaturized and hidden windows of a given application +by double clicking in it's application icon with the middle mouse button. + + +Shading a Window +~~~~~~~~~~~~~~~~ + +If you want to temporarily get rid of a window, an option for it's +miniaturization is to *shade* it. When you shade a window, the window rolls up +to it's titlebar. You can do almost everything you do with a normal window with +shaded windows, like miniaturizing or closing it. + +To shade a window: + +- Double Click on the titlebar of the window. + +.. figure:: guide/images/shade.gif + :figclass: borderless + :alt: A Shaded window + + +Closing a Window +~~~~~~~~~~~~~~~~~ + +After finishing work in a window, you can close it to completely get rid of it. +When you close a window, it is removed from the screen and can no longer be +restored. So, before closing a window, be sure you have saved any work you were +doing on it. + +.. figure:: guide/images/imagtitle2.gif + :figclass: borderless + :alt: A Titlebar with a close button + +Some windows will have a close button with some dots around it. These windows +can't be closed normally and the only way to get rid of them is by exiting the +application. You should try exiting from inside the application (through it's +menus or buttons) when possible. Otherwise you can force WindowMaker to +``kill`` the application. + +To force the closure of a window (by killing the application): + +- Hold the Control key and click on the close button. + +OR + +- Double click the close button. + +It is also possible to kill applications that can be normally closed by +clicking the close button while holding the Control key. + + +Maximizing a Window +~~~~~~~~~~~~~~~~~~~ + +If you want to resize a window to occupy the whole screen, you can maximize the +window. When you unmaximize it, the window will be restored to the same +position and size it was before maximized. + +To maximize a window: + +- Hold the Control key and double click on the window titlebar to resize the + window's height to full screen. + +OR + +- Hold the Shift key and double click on the window titlebar to resize the + window's width to full screen. + +OR + +- Hold both the Control and Shift keys and double click on the window titlebar + to resize both window's height and width to full screen. + +To restore the size of a maximized window: + +- Hold the Control OR Shift key and double click on the window titlebar. + +You can select whether the window should be maximized to the whole screen or if +the position of the Dock should be accounted for by setting the *WinDock* +option. + + +The Window Commands Menu +~~~~~~~~~~~~~~~~~~~~~~~~ + +Clicking on the titlebar of a window with the right mouse button will open a +menu containing commands that will apply to that window. The menu can also be +opened through the keyboard with the Control+Escape key, by default. + +(Un)Maximize + Will either maximize the window horizontally and vertically, or, if the + window is already maximized, restore the window to the size it was prior to + being maximized. + +Miniaturize + Will miniaturize the window. + +(Un)Shade + Will shade the window, or unshade it if it is already shaded. + +Hide + Will hide all the windows of the application + +Hide Others + Will hide all current applications except the current one + +Move To + Allows you to move the window to a different workspace + +Attributes... + Opens the Window Attributes Inspector (see section `2.3 <#2.3>`) + +Close + Will close the window + +Kill + Will kill the application. Use this option only if the application does not + provide means to close it normally, or in extreme cases. + + +The Window Attributes Inspector +------------------------------- + +Window Specification +~~~~~~~~~~~~~~~~~~~~ + +This panel Allows you to specify the WM_CLASS that WindowMaker should use to +identify the window whose attributes you are setting. + +.. figure:: guide/images/wiaspec.gif + :figclass: borderless + :alt: Window Attributes Inspector: Window Specification + + +Window Attributes +~~~~~~~~~~~~~~~~~~ + +This panel lets you set the attributes for the selected window. + +.. figure:: guide/images/wiaattrib.gif + :figclass: borderless + :alt: Window Attributes Inspector: Window Attributes + +Disable titlebar + Causes the titlebar for the selected window not to be displayed + +Disable resizebar + Causes the resizebar for the selected window not to be displayed + +Disable close button + Causes the close button for the selected window not to be displayed + +Disable miniaturize button + Causes the miniaturize button for the selected window not to be displayed + +Keep on Top + Causes the selected window to stay on top of all other windows + +Omnipresent + Causes the selected window to be displayed in all workspaces + +Start miniaturized + Causes the selected window to start miniaturized + +Skip window list + Causes the select window to be skipped when cycling through the window list. + + +Advanced Options +~~~~~~~~~~~~~~~~ + +.. figure:: guide/images/wiaadvanced.gif + :figclass: borderless + :alt: Window Attributes Inspector: Advanced Options + +Ignore HideOthers + Causes the selected window to remain visible when **HideOthers** is selected + from the `Window Commands Menu <#2.2.9>`_ + +Don't bind keyboard shortcuts + Causes the selected window to receive ALL keyboard events + +Don't bind mouse clicks + Causes the selected window to receive all mouse-click events + +Keep Inside Screen + Causes the selected window not to be able to place itself off the screen + +Don't let it take focus + Causes the selected window not to be able to take input focus + +Don't Save Session + Causes the state of the selected window not to be saved when a session is + saved. (either when quitting WindowMaker, or when done manually.) + +Emulate Application Icon + Emulates an Application Icon for "broken" applications + + +Icon and Initial Workspace +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This panel allows you to **browse** for, and **update** the **mini-window +image** for the selected window, as well as setting the **initial workspace**. + +.. figure:: guide/images/wiaiandiw.gif + :figclass: borderless + :alt: Window Attributes Inspector: Icon and Initia Workspace + + +Application Specific +~~~~~~~~~~~~~~~~~~~~ + +Attributes specific to the selected application + +.. figure:: guide/images/wiaappspec.gif + :figclass: borderless + :alt: Window Attributes Inspector: Icon and Initia Workspace + +Start hidden + Starts the selected application in a hidden state + +No application icon + Disables the application icon for the selected application + +
    +
    +
    +
    Window Maker: User Guide - Windows
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap3.html b/docs/chap3.html new file mode 100644 index 0000000..b7ca738 --- /dev/null +++ b/docs/chap3.html @@ -0,0 +1,370 @@ + + + + Window Maker: User Guide - Workspace + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    The Workspace

    + +
    +

    Working with Menus

    +

    Menus provide a list of commands that you can execute.

    +
    +An Example Menu +
    +

    To execute a command listed in a menu, click in the corresponding item. The +item will blink telling that the command is going to be executed.

    +

    Grayed commands are disabled and cannot be executed at that moment. If you +click on them nothing will happen.

    +

    Some menu entries have a little triangular indicator at the right. Selecting +these entries will open a submenu, with a new list of commands.

    +

    You can use the keyboard to traverse and execute commands in some of the menus. +First you must hit the key used to open the menu - like F12 for the root menu - +to enable keyboard traversal of it. Then you can use the Up and Down arrow keys +to change the current selected item and the Left and Right arrow keys to jump +between submenus and parent menus. To execute the current selected item press +Return. To close the menu or stop menu traversal, press Escape. Additionally, +pressing the first letter for an menu item, will jump the current selection to +that item.

    +

    You can make frequently used menus "stick" to the workspace by dragging the +titlebar of the menu. This will make a close button appear in the menu +titlebar. If you want to close the menu, just click in that button.

    +

    Menus are normally placed on top of other windows and cannot be obscured by +them. If you want the menus to be able to be obscured by lowering them, double +click the menu titlebar while holding the Meta key. Repeat this to make the +menus not obscurable again.

    +
    +

    The Root Window Menu

    +

    The Root Window Menu or Applications Menu has items that allow you to +quickly launch applications and do some workspace management.

    +

    To open this menu, click on the workspace (root window) with the 3rd mouse +button or hit the key bound to it (F12 by default).

    +

    The contents of the applications menu can be configured to hold the +applications installed on your system. To learn how to configure it, read the +section on application menu configuration.

    +
    +
    +

    The Window List Menu

    +

    Clicking in the workspace with the middle mouse button will open a menu listing +all windows that currently exist, with the workspace in which the window is +located to its right. The current focused window is marked by a diamond sign +next to its name. Clicking in an entry in this menu will focus the window, +raise it, and change to the workspace where it is located.

    +
    +
    +
    +

    Working with Applications

    +

    In WindowMaker the instance of a running application is represented by an +application icon. Do not confuse it with the icons (miniwindows in WindowMaker) +displayed by other window managers when a window is iconified. Application +icons and miniwindows can be differentiated in that miniwindows have titlebars, +application icons do not.

    +

    WindowMaker identifies a group of windows as belonging to a single instance of +an application through some standard hints that the application sets in its +windows. Unfortunately, not all applications that exist set these hints, +preventing some application-specific features from working. These hints are +WM.CLASS, WM.COMMAND, and WM.CLIENT.LEADER or the group leader in +WM.HINTS.

    +

    Note: The information about applications contained in this section only applies +to versions of WindowMaker built without the --enable-single-icon compile time +option. This option is unsupported and behaviour when it's enabled will not be +covered in this text.

    +
    +

    Hiding an Application

    +

    If you want to close and application but intend to use it later you can hide +it. When you hide an application all windows and miniwindows that belong to +that application will be removed from the screen and hidden into its +application icon.

    +

    To hide an application:

    +
      +
    • Click the miniaturize button of any of the windows that belong to the +application while holding the Control key.

    • +
    +

    OR

    +
      +
    • Press the keyboard shortcut assigned to it, which is Meta+h in the default +configuration.

    • +
    +

    OR

    +
      +
    • User the hide command in the window commands menu brought up when the window titlebar +is clicked with the right mouse button.

    • +
    +

    OR

    +
      +
    • Use the (Un)Hide command in the application icon commands menu brought up +when the application icon is clicked with the right mouse button.

    • +
    +

    To unhide an application

    +
      +
    • Double click the application icon with the left mouse button.

    • +
    +

    OR

    +
      +
    • Use the (Un)Hide command in the application icon commands menu brought up +when the application icon is clicked with the right mouse button.

    • +
    +

    When you unhide an application, all it's windows and miniwindows will brought +back, and you will be taken to the last workspace in which you worked with that +application.

    +

    Extra Bindings

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + +

    Action

    Effect

    Double-click the application icon +while holding the Meta key

    Unhide the clicked application, +and hide all other applications +that are present in the current +workspace.

    Double-click the application icon +while holding the Shift key

    Unhide the clicked application in +the current workspace

    Double-click the application icon +with the middle mouse button

    Unhide the clicked application and +deminiaturize all its windows.

    Double-click the window titlebar +with the right mouse button while +holding the Meta key.

    Hide all applications in the +current workspace except for the +clicked one.

    +

    There are two other commands in the applications menu related to application +hiding:

    +
    +
    Hide others
    +
    +

    Hide all applications in the current workspace, except for the currently +active one.

    +
    +
    Show All
    +
    +

    Unhide all applications that were hidden from the current workspace

    +
    +
    +
    +
    +

    The Application Icon Menu

    +

    A menu with commands that will apply to the application can be brought up by +clicking the application icon with the right mouse button.

    +

    The commands available in this menu are:

    +
    +
    Unhide Here
    +
    +

    Unhides the application in the current workspace.

    +
    +
    (Un)Hide
    +
    +

    Hides the application. Unless the application is already hidden, in which +case it will unhide the application and take you to its workspace.

    +
    +
    Set Icon...
    +
    +

    Opens the icon image selection panel for the application icon.

    +
    +
    Kill
    +
    +

    Will kill the application.

    +
    +
    +
    +
    +

    The Application Dock

    +

    The application dock is a place where you can store frequently used +applications for easy and fast access. It is located, by default, on the right +side of the screen.

    +

    You can click the top icon (the one with the GNUstep logo) and drag it downward +to remove most of the dock from view. You can also drag it sideways to move +the entire dock from side of the screen to the other.

    +

    A menu similar to the application icon menu is +brought up when you click a docked icon with the right mouse button.

    +

    To make the dock float over windows (not be coverable by windows), either +double-click the top dock icon while holding the Meta key, or select the +"Floating Dock" option in the dock menu.

    +
    +

    Starting a docked application

    +

    To start an application that is docked, double-click its icon. The icon will be +briefly highlighted and the application will start.

    +

    While an application is not running an ellipsis is present in the lower +left-hand corner of the icon. This ellipsis will disappear when the application +is started and reappear when the application is exited.

    +

    While the application is running the docked icon will behave just like a +normal, undocked application icon, except for some extra actions specific to +the dock.

    +

    To start a docked application:

    +
      +
    • Double-click the application icon with the left mouse button.

    • +
    +

    OR

    +
      +
    • Use the "Launch" command in the dock menu for the icon. If the application is +already running it will start another instance.

    • +
    +

    OR

    +
      +
    • Hold the Control key while double-clicking the icon to start another instance +of the application.

    • +
    +

    If a new instance of an already running application is started it will get a +new application icon.

    +
    +
    +

    Customizing the dock

    +

    To add new applications to the dock, you can click an application icon and drag +it onto the dock. When a ghost image of the icon appears you can release the +mouse button and the icon will be docked.

    +

    To reorder the docked applications, drag an icon to an empty slot and move the +icons around as you want.

    +

    To remove a docked application, drag it from the dock and release the mouse +button when the ghost image disappears. To remove the icon of an application +that is running, hold the Meta key while dragging it.

    +
    +
    +

    Configuring the docked application

    +

    To change the settings of a docked application, select the "Settings..." item +in the dock menu for that icon. A settings panel for that icon will appear.

    +
    +Docked Application Settings Panel +
    +

    In the Application path and arguments field, the path for the application and +its arguments can be changed. Note that you can't change the application that +is represented in the icon or change anything that would cause the application +name to be changed. For example, if the icon is for xterm you can't change +the field's value to ghostview; or if the icon is for xterm -name vi, +you can't change it to xterm -name pine. Also note that you cannot use +shell commands, such as output redirectors. (>, >>; etc.)

    +
    +
    +
    +
    +

    Working with Workspaces

    +
    +

    The Workspaces Menu

    +

    The Workspaces Menu allows you to create, switch, destroy and rename +workspaces.

    +

    It has the following items:

    +
    +
    New
    +
    +

    Creates a new workspace and automatically switches to it

    +
    +
    Destroy Last
    +
    +

    Destroys the last workspace unless it is occupied

    +
    +
    Workspaces
    +
    +

    Each workspace has a corresponding item in the Workspaces menu. Clicking in +one of these entries will switch from the current workspace to the selected +workspace.

    +
    +
    +

    The current active workspace is indicated by a small indicator at the left of +the workspace item.

    +
    +Workspace Menu +
    +

    To change the name of a workspace you must first "stick" the menu. Then Control +click in the item corresponding to the workspace you want to rename. The item +will turn into a editable text field where you can edit the workspace name. To +finish editing the workspace name, press Return; to cancel it, press Escape.

    +

    There is a limit of 16 characters on the length of the workspace name.

    +

    An example Workspace menu being edited:

    +
    +Workspace Menu: Editing a Workspace name +
    +
    +
    +

    The workspace clip

    + +

    [This section was unavailable in the original, and thus is not here]

    +
    +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Workspace
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap3.rst b/docs/chap3.rst new file mode 100644 index 0000000..b7c953a --- /dev/null +++ b/docs/chap3.rst @@ -0,0 +1,387 @@ + + + + Window Maker: User Guide - Workspace + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + The Workspace +============= + +Working with Menus +------------------ + +Menus provide a list of commands that you can execute. + +.. figure:: guide/images/menu.gif + :figclass: borderless + :alt: An Example Menu + +To execute a command listed in a menu, click in the corresponding item. The +item will blink telling that the command is going to be executed. + +Grayed commands are disabled and cannot be executed at that moment. If you +click on them nothing will happen. + +Some menu entries have a little triangular indicator at the right. Selecting +these entries will open a submenu, with a new list of commands. + +You can use the keyboard to traverse and execute commands in some of the menus. +First you must hit the key used to open the menu - like F12 for the root menu - +to enable keyboard traversal of it. Then you can use the Up and Down arrow keys +to change the current selected item and the Left and Right arrow keys to jump +between submenus and parent menus. To execute the current selected item press +Return. To close the menu or stop menu traversal, press Escape. Additionally, +pressing the first letter for an menu item, will jump the current selection to +that item. + +You can make frequently used menus "stick" to the workspace by dragging the +titlebar of the menu. This will make a close button appear in the menu +titlebar. If you want to close the menu, just click in that button. + +Menus are normally placed on top of other windows and cannot be obscured by +them. If you want the menus to be able to be obscured by lowering them, double +click the menu titlebar while holding the Meta key. Repeat this to make the +menus not obscurable again. + + +The Root Window Menu +~~~~~~~~~~~~~~~~~~~~ + +The *Root Window Menu* or *Applications Menu* has items that allow you to +quickly launch applications and do some workspace management. + +To open this menu, click on the workspace (root window) with the 3rd mouse +button or hit the key bound to it (F12 by default). + +The contents of the applications menu can be configured to hold the +applications installed on your system. To learn how to configure it, read the +section on application menu configuration. + + +The Window List Menu +~~~~~~~~~~~~~~~~~~~~ + +Clicking in the workspace with the middle mouse button will open a menu listing +all windows that currently exist, with the workspace in which the window is +located to its right. The current focused window is marked by a diamond sign +next to its name. Clicking in an entry in this menu will focus the window, +raise it, and change to the workspace where it is located. + + +Working with Applications +------------------------- + +In WindowMaker the instance of a running application is represented by an +application icon. Do not confuse it with the icons (miniwindows in WindowMaker) +displayed by other window managers when a window is iconified. Application +icons and miniwindows can be differentiated in that miniwindows have titlebars, +application icons do not. + +WindowMaker identifies a group of windows as belonging to a single instance of +an application through some standard hints that the application sets in its +windows. Unfortunately, not all applications that exist set these hints, +preventing some application-specific features from working. These hints are +**WM.CLASS**, **WM.COMMAND**, and **WM.CLIENT.LEADER** or the group leader in +**WM.HINTS**. + +Note: The information about applications contained in this section only applies +to versions of WindowMaker built without the --enable-single-icon compile time +option. This option is unsupported and behaviour when it's enabled will not be +covered in this text. + + +Hiding an Application +~~~~~~~~~~~~~~~~~~~~~ + +If you want to close and application but intend to use it later you can *hide* +it. When you hide an application all windows and miniwindows that belong to +that application will be removed from the screen and hidden into its +application icon. + +To hide an application: + +- Click the miniaturize button of any of the windows that belong to the + application while holding the Control key. + +OR + +- Press the keyboard shortcut assigned to it, which is Meta+h in the default + configuration. + +OR + +- User the hide command in the `window commands menu + `_ brought up when the window titlebar + is clicked with the right mouse button. + +OR + +- Use the (Un)Hide command in the application icon commands menu brought up + when the application icon is clicked with the right mouse button. + +To unhide an application + +- Double click the application icon with the left mouse button. + +OR + +- Use the (Un)Hide command in the application icon commands menu brought up + when the application icon is clicked with the right mouse button. + +When you unhide an application, all it's windows and miniwindows will brought +back, and you will be taken to the last workspace in which you worked with that +application. + +**Extra Bindings** + ++-----------------------------------+------------------------------------+ +| Action | Effect | ++===================================+====================================+ +| Double-click the application icon | Unhide the clicked application, | +| while holding the Meta key | and hide all other applications | +| | that are present in the current | +| | workspace. | ++-----------------------------------+------------------------------------+ +| Double-click the application icon | Unhide the clicked application in | +| while holding the Shift key | the current workspace | ++-----------------------------------+------------------------------------+ +| Double-click the application icon | Unhide the clicked application and | +| with the middle mouse button | deminiaturize all its windows. | ++-----------------------------------+------------------------------------+ +| Double-click the window titlebar | Hide all applications in the | +| with the right mouse button while | current workspace except for the | +| holding the Meta key. | clicked one. | ++-----------------------------------+------------------------------------+ + + +There are two other commands in the applications menu related to application +hiding: + +Hide others + Hide all applications in the current workspace, except for the currently + active one. + +Show All + Unhide all applications that were hidden from the current workspace + + +The Application Icon Menu +~~~~~~~~~~~~~~~~~~~~~~~~~ + +A menu with commands that will apply to the application can be brought up by +clicking the application icon with the right mouse button. + +The commands available in this menu are: + +Unhide Here + Unhides the application in the current workspace. + +(Un)Hide + Hides the application. Unless the application is already hidden, in which + case it will unhide the application and take you to its workspace. + +Set Icon... + Opens the icon image selection panel for the application icon. + +Kill + Will kill the application. + + +The Application Dock +~~~~~~~~~~~~~~~~~~~~ + +The application dock is a place where you can store frequently used +applications for easy and fast access. It is located, by default, on the right +side of the screen. + +You can click the top icon (the one with the GNUstep logo) and drag it downward +to remove most of the dock from view. You can also drag it sideways to move +the entire dock from side of the screen to the other. + +A menu similar to the `application icon menu <#the-application-icon-menu>`_ is +brought up when you click a docked icon with the right mouse button. + +To make the dock *float* over windows (not be coverable by windows), either +double-click the top dock icon while holding the Meta key, or select the +"Floating Dock" option in the dock menu. + + +Starting a docked application +............................. + +To start an application that is docked, double-click its icon. The icon will be +briefly highlighted and the application will start. + +While an application is not running an ellipsis is present in the lower +left-hand corner of the icon. This ellipsis will disappear when the application +is started and reappear when the application is exited. + +While the application is running the docked icon will behave just like a +normal, undocked application icon, except for some extra actions specific to +the dock. + +To start a docked application: + +- Double-click the application icon with the left mouse button. + +OR + +- Use the "Launch" command in the dock menu for the icon. If the application is + already running it will start another instance. + +OR + +- Hold the Control key while double-clicking the icon to start another instance + of the application. + +If a new instance of an already running application is started it will get a +new application icon. + + +Customizing the dock +.................... + +To add new applications to the dock, you can click an application icon and drag +it onto the dock. When a ghost image of the icon appears you can release the +mouse button and the icon will be docked. + +To reorder the docked applications, drag an icon to an empty slot and move the +icons around as you want. + +To remove a docked application, drag it from the dock and release the mouse +button when the ghost image disappears. To remove the icon of an application +that is running, hold the Meta key while dragging it. + + +Configuring the docked application +.................................. + +To change the settings of a docked application, select the "Settings..." item +in the dock menu for that icon. A settings panel for that icon will appear. + +.. figure:: guide/images/dockapppanel.gif + :figclass: borderless + :alt: Docked Application Settings Panel + +In the *Application path and arguments* field, the path for the application and +its arguments can be changed. Note that you can't change the application that +is represented in the icon or change anything that would cause the application +name to be changed. For example, if the icon is for ``xterm`` you can't change +the field's value to **ghostview**; or if the icon is for ``xterm -name vi``, +you can't change it to ``xterm -name pine``. Also note that you cannot use +shell commands, such as output redirectors. (``>``, ``>>``; etc.) + + +Working with Workspaces +----------------------- + +The Workspaces Menu +~~~~~~~~~~~~~~~~~~~~ + +The *Workspaces Menu* allows you to create, switch, destroy and rename +workspaces. + +It has the following items: + +New + Creates a new workspace and automatically switches to it + +Destroy Last + Destroys the last workspace unless it is occupied + +Workspaces + Each workspace has a corresponding item in the Workspaces menu. Clicking in + one of these entries will switch from the current workspace to the selected + workspace. + +The current active workspace is indicated by a small indicator at the left of +the workspace item. + +.. figure:: guide/images/wsmenu.gif + :figclass: borderless + :alt: Workspace Menu + +To change the name of a workspace you must first "stick" the menu. Then Control +click in the item corresponding to the workspace you want to rename. The item +will turn into a editable text field where you can edit the workspace name. To +finish editing the workspace name, press Return; to cancel it, press Escape. + +There is a limit of 16 characters on the length of the workspace name. + +An example Workspace menu being edited: + +.. figure:: guide/images/wsmenued.gif + :figclass: borderless + :alt: Workspace Menu: Editing a Workspace name + + +The workspace clip +~~~~~~~~~~~~~~~~~~~ + +.. WTF is that?? + +[This section was unavailable in the original, and thus is not here] + +
    +
    +
    +
    Window Maker: User Guide - Workspace
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap4.html b/docs/chap4.html new file mode 100644 index 0000000..b242630 --- /dev/null +++ b/docs/chap4.html @@ -0,0 +1,1271 @@ + + + + Window Maker: User Guide - Configuration + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Configuring Window Maker

    + + +
    +

    The Defaults System

    +

    WindowMaker uses a defaults database for storing various information, like +configurations and other data that must be kept between sessions (like the list +of applications of a saved session). The defaults database is stored as +property lists in the $(HOME)/GNUstep/Defaults directory. Each file in the +$(HOME)/GNUstep/Defaults directory contains data that belongs to a specific +domain.

    +

    Any application can use the defaults database to store its information. +Generally an application will have one or more domains that belong to it.

    +
    +

    Property list File Format

    +

    The syntax of the property list is simple, but, if you need to change it +manually you must take care not to leave any syntax errors.

    +

    The EBNF for the property list is the following:

    +

    Description of the syntax of a property list in the Bacchus Naur Form (BNF)

    +
    <object>      ::= <string> | <data> | <array> | <dictionary>
    +<string>      ::= text with non-alphanumeric characters | alphanumeric text
    +<array>       ::= `(' [ <object> { `,' <object> }* ] `)'
    +<dictionary>  ::= `{' [ <keyval_pair> { `,' <keyval_pair> }* ] `}'
    +<keyval_pair> ::= <string> `=' <object> `;'
    +

    Example property list file

    +
    {
    +    "*" = {
    +        Icon = "defaultAppIcon.xpm";
    +    };
    +    "xterm.XTerm" = {
    +        Icon = "xterm.xpm";
    +    };
    +    xconsole = {
    +        Omnipresent = YES;
    +        NoTitlebar = YES;
    +        KeepOnTop = NO;
    +    };
    +}
    +

    The property list above is a dictionary with 3 dictionaries inside. The first +is keyed by "*", the second by "XTerm.xterm" and the last by "xconsole".

    +

    Note that all strings that have non-alphabetic or numeric characters (like a +dot "." or the asterisk "*" are enclosed by double quotes. Strings with only +alphanumeric characters may or may not be enclosed in double quotes, as they +will not make any difference.

    +

    Here is another example:

    +
    {
    +    FTitleBack = ( hgradient, gray, "#112233" );
    +}
    +

    The property list in the example above contains an array with 3 elements with a +key named "FTitleBack".

    +

    Except for cases like file names and paths, all value strings are case +insensitive, i.e.: YES = Yes = yes = yEs.

    +
    +
    +

    Value Types

    +

    Here is a description of some of the types of values that an option might have:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Type

    Value

    boolean

    YES or NO

    integer

    any integer number, usually limited +by a range that will be indicated

    positive integer

    any integer number greater than or +equal to zero (0) a

    speed

    UltraFast, Fast, Medium, Slow, or VerySlow

    mouse button

    Left, Middle, Right, Button1, Button2, +Button3, Button4, or Button5

    +
    +
    +

    Preferences

    +

    General preference options are stored in the WindowMaker domain; i.e. the +$(HOME)/GNUstep/Defaults/WindowMaker file.

    +

    Changes in preference options will automatically affect the current WindowMaker +session, without a restart. Some options, however, require a restart of +WindowMaker before they take effect. Such options are marked with a * .

    +

    Note that values marked as Default are values that are assumed if the option +is not specified, instead of factory default values that are set in the +preference file.

    + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Option

    Value

    Description

    PixmapPath

    list of directories +separated by ":" +(default: depends +on the system)

    A list of directories where pixmaps +can be found. The pixmaps for things +like icons, are searched in these +paths in order of appearance.

    *NoDithering

    boolean +(default: NO)

    Disable internal dithering of +images. Not recommended for displays +with less than 8 bits per pixel.

    *ColormapSize

    integer number > 1 +(default: 4)

    Number of colors for each of the +red, green and blue components to be +used for the dithering colormap. +This value must be greater than 1 +and smaller than 6 for 8bpp +displays. It only makes sense on +PseudoColor displays. This option +has not effect on TrueColor +displays. Larger values result in +better appearance, but leaves less +colors for other applications.

    *ModifierKey

    modifier key name +(default: Mod1)

    The key to use as the modifier being +referred as Meta in this manual, +like Meta dragging a window to move +it. Valid values are Alt, Meta, +Super, Hyper, Mod1, Mod2, Mod3, +Mod4, Mod5.

    UseSaveUnders

    boolean +(default: NO)

    Use saveunders in WindowMaker +windows. This can improve +performance but increases memory +usage. It also can cause problems +with refreshing in some +applications.

    DisableClip

    boolean +(default: NO)

    Will remove the application Clip +from the workspace.

    DisableDock

    boolean +(default: NO)

    Will remove the application Dock +from the workspace

    Superfluous

    boolean +(default: NO)

    Enable extra animations and other +cosmetic things that might increase +peak memory and CPU usage.

    SaveSessionOnExit

    boolean +(default: NO)

    Automatically save the state of the +session when exiting WindowMaker.

    *IconSize

    integer > 4 +(default: 64)

    The size of application icons and +miniwindows.

    OpaqueMove

    boolean +(default: NO)

    Whether the whole window should be +moved while dragging it, or, if only +it's frame should be dragged.

    FocusMode

    Manual or +ClickToFocus, Auto +or +FocusFollowsMouse, +SemiAuto or Sloppy +(default: +ClickToFocus)

    The mode of input focus setting. +Refer to section Focusing a Window

    IgnoreFocusClick

    boolean +(default: NO)

    Whether the mouse click use to focus +a window should be ignore or treated +normally.

    AutoFocus

    boolean +(default: NO)

    Whether newly created windows should +receive input focus. Do not confuse +with FocusMode=Auto.

    RaiseDelay

    integer number +(default: 0)

    How many tenths of a second to wait +before raising a window in Auto or +Semi-Auto focus mode. 0 disables +this feature.

    DoubleClickTime

    integer number +(default: 250)

    If two mouse clicks occur in this +interval of time, it will be +considered a double click.

    ColorMapMode

    Manual or +ClickToFocus, +Auto or +FocusFollowsMouse +(default: auto)

    The mode of colormap setting. In +Manual or ClickToFocus mode, the +colormap is set to the one belonging +to the current focused window. In +Auto or FocusFollowsMouse mode, +the colormap is set to the one +belonging to the window under the +pointer.

    CirculateRaise

    boolean +(default: NO)

    Whether the window should be raised +when circulating. (focus the next or +previous window through the +keyboard)

    OnTopTransients

    boolean +(default: NO)

    Whether transient windows should +always be placed over their owners

    WindowPlacement

    auto, cascade, +manual, or +random +(default: cascade)

    Sets placement mode for new windows. +Auto places the window +automatically in the first open +space found in the workspace. +Cascade places the window in +incrementing positions starting from +the the top-left corner of the +workspace. Manual allows you to +place the window interactively with +the mouse. Random paces the window +randomly in the workspace.

    WindowPlaceOrigin

    (X,Y) where X +and Y are integer +numbers +(default: (0,0))

    Sets the offset, from the top-left +corner of the screen, to place +windows. In non-manual +WindowPlacement modes windows will +not be placed above or to the left +of this point.

    AutoArrangeIcons

    boolean +(default: NO)

    Whether icons should be +automatically arranged

    ResizeDisplay

    center, corner, +floating, or +line +(default: corner)

    Selects the type or position of the +box that shows the window size when +a window is being resized. center +places the box in the center of the +workspace, corner places it in the +top-left corner of the workspace, +floating places it in the center +of the window being resized and +line draws the current window size +over the workspace, like in a +technical drawing.

    MoveDisplay

    center, corner +or floating +(default: corner)

    Selects the type or position of the +box that shows the window position +when a window is being moved. The +value meanings are the same as for +the ResizeDisplay option.

    AlignSubmenus

    boolean +(default: NO)

    Whether submenus should be aligned +vertically with their parent menus.

    WrapMenus

    boolean +(default: NO)

    Whether submenus should be placed to +the right of their parent menus when +they don't fit the screen. Note that +menus placed off the screen can be +scrolled.

    ScrollableMenus

    boolean +(default: NO)

    Whether menus that are not fully +inside the screen should +automatically scroll when the +pointer is over them and near the +border of the screen.

    MenuScrollSpeed

    speed +(default: medium)

    The scrolling speed of menus.

    DontLinkWorkspaces

    boolean +(default: NO)

    Do not automatically switch to the +next or previous workspace when a +window is dragged to the edge of the +screen.

    NoWindowUnderDock

    boolean +(default: NO)

    When maximizing windows, limit their +sizes so that they will not be +covered by the dock.

    NoWindowOverIcons

    boolean +(default: NO)

    When maximizing windows, limit their +sizes so that they will cover +miniwindows and application icons.

    StickyIcons

    boolean +(default: NO)

    Whether miniwindows should be +present in all workspaces.

    CycleWorkspaces

    boolean +(default: NO)

    Set to YES if you want windows that +are dragged past the last workspace +to be moved to the first workspace, +and vice-versa.

    AdvanceToNewWorkspace

    boolean +(default: NO)

    Whether windows dragged past the +last workspace should create a new +workspace.

    DisableAnimations

    boolean +(default: NO)

    Whether animations, like the one +done during minimization, should be +disabled.

    IconSlideSpeed

    speed +(default: medium)

    The speed of icons when they are +being slid across the workspace.

    ShadeSpeed

    speed +(default: medium)

    The speed of the shading animation.

    DisableSound

    boolean +(default: NO)

    Whether sound support in WindowMaker +should be disabled

    *DisableWSMouseActions

    boolean +(default: NO)

    Whether actions in the workspace +triggered by mouse-clicks should be +disabled. This allows the use of +file and desktop managers that place +icons on the root window (such as +KDE).

    SelectWindowMouseButton

    mouse button +(default: left)

    The mouse button that activates +selection of multiple windows in the +workspace.

    WindowListMouseButton

    mouse button +(default: middle)

    The mouse button that opens the +window list menu in the workspace.

    ApplicationMenuMouseButton

    mouse button +(default: right)

    The mouse button that opens the +applications menu in the workspace.

    +
    +
    +

    Appearance Options

    +

    Fonts are specified in the X Logical Font Description format. You can cut and +paste these names from programs like xfontsel.

    +

    Colors are specified as color names in the standard X format. This can be any +color name shown by the showrgb program (like black, white or gray) or a +color value in the #rrggbb format, where rr, gg and bb is the intensity of the +color component (like #ff0000 for pure red or #000080 for medium blue). Note +that color names in the #rrggbb format must be enclosed with double quotes.

    +

    Textures are specified as an array, where the first element specifies the +texture type followed by a variable number of arguments.

    +

    Valid texture types are:

    +
    +
    (solid, color)
    +
    +

    the texture is a simple solid color.

    +
    +
    (dgradient, color1, color2)
    +
    +

    the texture is a diagonal gradient rendered from the top-left corner to the +bottom-right corner. The first argument (color1) is the color for the +top-left corner and the second (color2) is for the bottom-right corner.

    +
    +
    (hgradient, color1, color2)
    +
    +

    the texture is a horizontal gradient rendered from the left edge to the +right edge. The first argument (color1) is the color for the left edge and +the second (color2) is for the right edge.

    +
    +
    (vgradient, color1, color2)
    +
    +

    the texture is a vertical gradient rendered from the top edge to the bottom +edge. The first argument (color1) is the color for the top edge and the +second (color2) is for the bottom edge.

    +
    +
    (mdgradient, color1, color2,...,color*n*)
    +
    +

    this is equivalent to drgadient, but you can specify more than two colors

    +
    +
    (mhgradient, color1, color2,...,color*n*)
    +
    +

    this is equivalent to hrgadient, but you can specify more than two colors

    +
    +
    (mvgradient, color1, color2,...,color<i>n</i>)
    +
    +

    this is equivalent to vrgadient, but you can specify more than two colors

    +
    +
    +

    Examples:

    +
    +Solid Color +

    (solid, gray)

    +
    +
    +Diagoonal Gradient +

    (dgradient, gray80, gray20)

    +
    +
    +Horizontal Gradient +

    (hgradient, gray80, gray20)

    +
    +
    +Vertical Gradient +

    (vgradient, gray80, gray20)

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Option

    Value

    Description

    *NewStyle

    boolean +(default: NO)

    Selects between N*XTSTEP style buttons +in the titlebar and a newer style of +buttons.

    WidgetColor

    (solid, color) +where color is a +color name +(default: +(solid, grey))

    Chooses the color to be used in +titlebar buttons if NewStyle=No;

    WorkspaceBack

    a texture or +none +(default: none)

    Default texture for the workspace +background. Note the dgradient and +mdgradient textures can take a lot +of time to be rendered.

    IconBack

    texture +(default: +(solid, grey))

    Texture for the background of icons +and miniwindows.

    FTitleBack

    texture +(default: +(solid, black))

    Texture for the focused window +titlebar.

    PTitleBack

    texture +(default: +(solid, "#616161"))

    Texture for the titlebar of the parent +window of the currently focused +transient window

    UTitleBack

    texture +(default: +(solid, gray))

    Texture for unfocused window +titlebars.

    MenuTitleBack

    texture +(default: +(solid, black))

    Texture for menu titlebars.

    MenuTextBack

    texture +(default: +(solid, gray))

    Texture for menu items

    FTitleColor

    color +(default: white)

    The color of the text in the focused +window titlebar.

    PTitleColor

    color +(default: white)

    Color for the text in the titlebar of +the parent window of the currently +focused transient.

    UTitleColor

    color +(default: black)

    The color for the text in the titlebar +of unfocused windows.

    MenuTitleColor

    color +(default: white)

    Color for the text in menu titlebars

    MenuTextColor

    color +(default: black)

    Color for the text in menu items

    HighlightColor

    color +(default: white)

    Color for the highlighted item in +menus.

    HighlightTextColor

    color +(default: black)

    Color for the highlighted item text in +menus.

    MenuDisabledColor

    color +(default: "#616161")

    Color for the text of disabled menu +items.

    ClipTitleColor

    color +(default: black)

    Color for the text in the clip.

    CClipTitleColor

    color +(default: "#454045")

    Color for the text in the collapsed +clip.

    WindowTitleFont

    font (default: +Helvetica bold 12)

    Font for the text in window +titlebars.

    MenuTitleFont

    font (default: +Helvetica bold 12)

    Font for the text in menu titlebars)

    MenuTextFont

    font (default: +Helvetica medium 12)

    Font for the text in menu items

    IconTitleFont

    font (default: +Helvetica medium 8)

    Font for the text in miniwindow +titlebars.

    ClipTitleFont

    font (default: +Helvetica bold 10)

    Font for the text in the clip.

    Displayfont

    font (default: +Helvetica medium 12)

    Font for the text information in +windows, like the size of windows +during resize.

    TitleJustify

    center, left, +or right +(default: center)

    Justification of the text in window +titlebars.

    +
    +
    +

    Keyboard Bindings

    +

    Keyboard shortcut specifications are in the form:

    +
    [<modifier key names> + ] <key name>
    +

    Where modifier key names specify an optional modifier key, like Meta or +Shift. Any number of modifier keys might be specified. The key name is the +actual key that will trigger the action bound to the option.

    +

    Examples:

    +
    +
    [F10]
    +
    +

    Means the F10 key.

    +
    +
    Meta+TAB
    +
    +

    Means the TAB key with the Meta modifier key pressed at the same time.

    +
    +
    Meta+Shift+TAB
    +
    +

    Means the TAB key with the Meta and Shift modifier keys pressed at the same +time.

    +
    +
    +

    Key names can be found at /usr/X11R6/include/X11/keysymdef.h The XK_ prefixes +must be ignored (if key name is XK_Return use Return).

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Option

    Default Value

    Description

    RootMenuKey

    None

    Opens the root window menu +at the current position of the +mouse pointer.

    WindowListKey

    None

    Opens the window list menu +menu at the current position of the +mouse pointer.

    WindowMenuKey

    None

    Opens the window commands menu +for the currently focused window.

    MiniaturizeKey

    None

    Miniaturizes the currently focused +window.

    HideKey

    None

    Hides the currently active +application.

    CloseKey

    None

    Closes the current focused window

    MaximizeKey

    None

    Maxmizes the currently focused window.

    VMaximizeKey

    None

    Vertically Maximizes the currently +focused window.

    RaiseKey

    Meta+Up

    Raises the currently focused window.

    LowerKey

    Meta+Down

    Lowers the currently focused window.

    RaiseLowerKey

    None

    Raises the window under the pointer, +or lowers it if it is already raised.

    ShadeKey

    None

    Shades the currently focused window.

    SelectKey

    None

    Selects current focused window.

    FocusNextKey

    None

    Switch focus to next window.

    FocusPrevKey

    None

    Switch focus to previous window.

    NextWorkspaceKey

    None

    Switches to next workspace.

    PrevWorkspaceKey

    None

    Switches to previous workspace.

    NextWorkspaceLayerKey

    None

    Switches to the next group of 10 +workspaces.

    PrevWorkspaceLayerKey

    None

    Switches to the previous group of +10 workspaces.

    Workspace1Key

    None

    Switches to workspace 1.

    Workspace2Key

    None

    Switches to workspace 2, creating +it if it does not exist.

    Workspace3Key

    None

    Switches to workspace 3, creating +it if it does not exist.

    Workspace4Key

    None

    Switches to workspace 4, creating +it if it does not exist.

    Workspace5Key

    None

    Switches to workspace 5, creating +it if it does not exist.

    Workspace6Key

    None

    Switches to workspace 6, creating +it if it does not exist.

    Workspace7Key

    None

    Switches to workspace 7, creating +it if it does not exist.

    Workspace8Key

    None

    Switches to workspace 8, creating +it if it does not exist.

    Workspace9Key

    None

    Switches to workspace 9, creating +it if it does not exist.

    Workspace10Key

    None

    Switches to workspace 10, creating +it if it does not exist.

    ClipLowerKey

    None

    Lowers the clip.

    ClipRaiseLowerKEy

    None

    Raises the clip, or lowers it if +it is already raised.

    +
    +
    +

    Window Attributes

    +

    Window attributes are stored in the $(HOME)/GNUstep/Defaults/WMWindowAttributes +file.

    +

    The contents of this file is a dictionary of attribute dictionaries keyed by +window names. Like this:

    +
    {
    +        "*" = {
    +                Icon = "defaultAppIcon.xpm";
    +        };
    +        "xterm.XTerm" = {
    +                Icon = "xterm.xpm";
    +        };
    +        xconsole = {
    +                Omnipresent = YES;
    +                NoTitlebar = YES;
    +                KeepOnTop = NO;
    +        };
    +}
    +

    Window names are in the form 1 :

    +
      +
    • <window instance name>.<window class name>

    • +
    +

    OR

    +
      +
    • <window instance name>

    • +
    +

    OR

    +
      +
    • <window class name>

    • +
    +

    Placing an asterisk as the window name means that the values set for that key +are to be used as default values for all windows. So, since xconsole does not +specify an Icon attribute, it will use the default value, which in the above +example is defaultAppIcon.xpm.

    +

    Options:

    +

    The default is NO for all options

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Option

    Value

    Description

    Icon

    pixmap file name

    Assigns a pixmap image to be +used as the icon for that window.

    NoTitleBar

    boolean

    Disables the titlebar in the +window.

    NoResizeBar

    boolean

    Disables the resizebar in the +window.

    NoMiniaturizeButton

    boolean

    Remove the miniaturize +button.

    NoCloseButton

    boolean

    Remove the close button.

    NoHideOthers

    boolean

    Do not hide the window, or the +application to which the window +belongs when a Hide Others +command is issued.

    NoMouseBindings

    boolean

    Do not grab mouse buttons in that +window. This means that actions +like a Meta-click on the window +will be caught by the application +instead of WindowMaker.

    NoKeyBindings

    boolean

    Do not grab keys in that window. +This means that keystrokes that +would normally be intercepted by +WindowMaker (because they are +bound to some action), like +Meta+Up, will be passed to the +application.

    NoAppIcon

    boolean

    Do not create application icon for +the window. This is useful for some +applications that incorrectly get +more than one application icon.

    KeepOnTop

    boolean

    Always keep the window over other +normal windows.

    Omnipresent

    boolean

    Make the window be present in all +workspaces, AKA sticky window.

    SkipWindowList

    boolean

    Do not list the window in the +window list menu

    KeepInsideScreen

    boolean

    Always keep the window inside the +visible are of the screen.

    Unfocusable

    boolean

    Do not let the window be focused.

    StartWorkspace

    Workspace number +or name

    Make the window always be initially +shown in the indicated workspace.

    +
    +
    +

    Applications Menu

    +

    The applications menu (AKA: Root Menu) can be defined in one of two distinct +ways:

    +
      +
    • In the form of an array in property list format, in +$(HOME)/GNUstep/Defaults/WMRootMenu

    • +
    • In the form of a text file, whose location is present in +$(HOME)/GNUstep/Defaults/WMRootMenu

    • +
    +
    +
    +
    1
    +
    +

    You can get the values for these information by running the xprop +utility on the desired window. When you do that, it will show the following +line, among other things:

    +
    WM_CLASS(STRING) = "xterm", "XTerm"
    +

    The first string (xterm) is the window instance name and the second (XTerm) +the window class name.

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Configuration
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap4.rst b/docs/chap4.rst new file mode 100644 index 0000000..ad03382 --- /dev/null +++ b/docs/chap4.rst @@ -0,0 +1,843 @@ + + + + Window Maker: User Guide - Configuration + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Configuring Window Maker +======================== + +.. contents:: + :backlinks: none + :local: + +The Defaults System +------------------- + +WindowMaker uses a defaults database for storing various information, like +configurations and other data that must be kept between sessions (like the list +of applications of a saved session). The defaults database is stored as +*property lists* in the $(HOME)/GNUstep/Defaults directory. Each file in the +$(HOME)/GNUstep/Defaults directory contains data that belongs to a specific +*domain*. + +Any application can use the defaults database to store its information. +Generally an application will have one or more *domains* that belong to it. + +Property list File Format +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The syntax of the property list is simple, but, if you need to change it +manually you must take care not to leave any syntax errors. + +The EBNF for the property list is the following: + +**Description of the syntax of a property list in the Bacchus Naur Form (BNF)** + +.. code:: + :class: highlight + + ::= | | | + ::= text with non-alphanumeric characters | alphanumeric text + ::= `(' [ { `,' }* ] `)' + ::= `{' [ { `,' }* ] `}' + ::= `=' `;' + + +**Example property list file** + +.. code:: + :class: highlight + + { + "*" = { + Icon = "defaultAppIcon.xpm"; + }; + "xterm.XTerm" = { + Icon = "xterm.xpm"; + }; + xconsole = { + Omnipresent = YES; + NoTitlebar = YES; + KeepOnTop = NO; + }; + } + +The property list above is a dictionary with 3 dictionaries inside. The first +is keyed by "*", the second by "XTerm.xterm" and the last by "xconsole". + +Note that all strings that have non-alphabetic or numeric characters (like a +dot "." or the asterisk "*" are enclosed by double quotes. Strings with only +alphanumeric characters may or may not be enclosed in double quotes, as they +will not make any difference. + +Here is another example: + +.. code:: + :class: highlight + + { + FTitleBack = ( hgradient, gray, "#112233" ); + } + + +The property list in the example above contains an array with 3 elements with a +key named "FTitleBack". + +Except for cases like file names and paths, all value strings are case +insensitive, i.e.: YES = Yes = yes = yEs. + + +Value Types +~~~~~~~~~~~ + +Here is a description of some of the types of values that an option might have: + ++------------------+--------------------------------------------+ +| Type | Value | ++==================+============================================+ +| boolean | YES or NO | ++------------------+--------------------------------------------+ +| integer | any integer number, usually limited | +| | by a range that will be indicated | ++------------------+--------------------------------------------+ +| positive integer | any integer number greater than or | +| | equal to zero (0) a | ++------------------+--------------------------------------------+ +| speed | UltraFast, Fast, Medium, Slow, or VerySlow | ++------------------+--------------------------------------------+ +| mouse button | Left, Middle, Right, Button1, Button2, | +| | Button3, Button4, or Button5 | ++------------------+--------------------------------------------+ + + +Preferences +~~~~~~~~~~~ + +General preference options are stored in the *WindowMaker* domain; i.e. the +$(HOME)/GNUstep/Defaults/WindowMaker file. + +Changes in preference options will automatically affect the current WindowMaker +session, without a restart. Some options, however, require a restart of +WindowMaker before they take effect. Such options are marked with a * . + +Note that values marked as *Default* are values that are assumed if the option +is not specified, instead of *factory default* values that are set in the +preference file. + +.. TODO there is no point for describing all of the options. There is a lot of + them added, some of the changed and possibly removed. Let's treat them as + the advanced configuration and point to the right sources, where one can + easily figure out which options take which values + ++----------------------------+---------------------+--------------------------------------+ +| Option | Value | Description | ++============================+=====================+======================================+ +| PixmapPath | list of directories | A list of directories where pixmaps | +| | separated by ":" | can be found. The pixmaps for things | +| | (default: depends | like icons, are searched in these | +| | on the system) | paths in order of appearance. | ++----------------------------+---------------------+--------------------------------------+ +| `*NoDithering` | boolean | Disable internal dithering of | +| | (default: NO) | images. Not recommended for displays | +| | | with less than 8 bits per pixel. | ++----------------------------+---------------------+--------------------------------------+ +| `*ColormapSize` | integer number > 1 | Number of colors for each of the | +| | (default: 4) | red, green and blue components to be | +| | | used for the dithering colormap. | +| | | This value must be greater than 1 | +| | | and smaller than 6 for 8bpp | +| | | displays. It only makes sense on | +| | | PseudoColor displays. This option | +| | | has not effect on TrueColor | +| | | displays. Larger values result in | +| | | better appearance, but leaves less | +| | | colors for other applications. | ++----------------------------+---------------------+--------------------------------------+ +| `*ModifierKey` | modifier key name | The key to use as the modifier being | +| | (default: Mod1) | referred as Meta in this manual, | +| | | like Meta dragging a window to move | +| | | it. Valid values are Alt, Meta, | +| | | Super, Hyper, Mod1, Mod2, Mod3, | +| | | Mod4, Mod5. | ++----------------------------+---------------------+--------------------------------------+ +| UseSaveUnders | boolean | Use *saveunders* in WindowMaker | +| | (default: NO) | windows. This can improve | +| | | performance but increases memory | +| | | usage. It also can cause problems | +| | | with refreshing in some | +| | | applications. | ++----------------------------+---------------------+--------------------------------------+ +| DisableClip | boolean | Will remove the application Clip | +| | (default: NO) | from the workspace. | ++----------------------------+---------------------+--------------------------------------+ +| DisableDock | boolean | Will remove the application Dock | +| | (default: NO) | from the workspace | ++----------------------------+---------------------+--------------------------------------+ +| Superfluous | boolean | Enable extra animations and other | +| | (default: NO) | cosmetic things that might increase | +| | | peak memory and CPU usage. | ++----------------------------+---------------------+--------------------------------------+ +| SaveSessionOnExit | boolean | Automatically save the state of the | +| | (default: NO) | session when exiting WindowMaker. | ++----------------------------+---------------------+--------------------------------------+ +| `*IconSize` | integer > 4 | The size of application icons and | +| | (default: 64) | miniwindows. | ++----------------------------+---------------------+--------------------------------------+ +| OpaqueMove | boolean | Whether the whole window should be | +| | (default: NO) | moved while dragging it, or, if only | +| | | it's frame should be dragged. | ++----------------------------+---------------------+--------------------------------------+ +| FocusMode | Manual or | The mode of input focus setting. | +| | ClickToFocus, Auto | Refer to section `Focusing a Window | +| | or | `_ | +| | FocusFollowsMouse, | | +| | SemiAuto or Sloppy | | +| | (default: | | +| | ClickToFocus) | | +| | | | ++----------------------------+---------------------+--------------------------------------+ +| IgnoreFocusClick | boolean | Whether the mouse click use to focus | +| | (default: NO) | a window should be ignore or treated | +| | | normally. | ++----------------------------+---------------------+--------------------------------------+ +| AutoFocus | boolean | Whether newly created windows should | +| | (default: NO) | receive input focus. Do not confuse | +| | | with FocusMode=Auto. | ++----------------------------+---------------------+--------------------------------------+ +| RaiseDelay | integer number | How many tenths of a second to wait | +| | (default: 0) | before raising a window in Auto or | +| | | Semi-Auto focus mode. 0 disables | +| | | this feature. | ++----------------------------+---------------------+--------------------------------------+ +| DoubleClickTime | integer number | If two mouse clicks occur in this | +| | (default: 250) | interval of time, it will be | +| | | considered a double click. | ++----------------------------+---------------------+--------------------------------------+ +| ColorMapMode | Manual or | The mode of colormap setting. In | +| | ClickToFocus, | *Manual* or *ClickToFocus* mode, the | +| | Auto or | colormap is set to the one belonging | +| | FocusFollowsMouse | to the current focused window. In | +| | (default: auto) | *Auto* or *FocusFollowsMouse* mode, | +| | | the colormap is set to the one | +| | | belonging to the window under the | +| | | pointer. | ++----------------------------+---------------------+--------------------------------------+ +| CirculateRaise | boolean | Whether the window should be raised | +| | (default: NO) | when circulating. (focus the next or | +| | | previous window through the | +| | | keyboard) | ++----------------------------+---------------------+--------------------------------------+ +| OnTopTransients | boolean | Whether transient windows should | +| | (default: NO) | always be placed over their owners | ++----------------------------+---------------------+--------------------------------------+ +| WindowPlacement | auto, cascade, | Sets placement mode for new windows. | +| | manual, or | *Auto* places the window | +| | random | automatically in the first open | +| | (default: cascade) | space found in the workspace. | +| | | *Cascade* places the window in | +| | | incrementing positions starting from | +| | | the the top-left corner of the | +| | | workspace. *Manual* allows you to | +| | | place the window interactively with | +| | | the mouse. *Random* paces the window | +| | | randomly in the workspace. | ++----------------------------+---------------------+--------------------------------------+ +| WindowPlaceOrigin | (X,Y) where X | Sets the offset, from the top-left | +| | and Y are integer | corner of the screen, to place | +| | numbers | windows. In non-manual | +| | (default: (0,0)) | WindowPlacement modes windows will | +| | | not be placed above or to the left | +| | | of this point. | ++----------------------------+---------------------+--------------------------------------+ +| AutoArrangeIcons | boolean | Whether icons should be | +| | (default: NO) | automatically arranged | ++----------------------------+---------------------+--------------------------------------+ +| ResizeDisplay | center, corner, | Selects the type or position of the | +| | floating, or | box that shows the window size when | +| | line | a window is being resized. *center* | +| | (default: corner) | places the box in the center of the | +| | | workspace, *corner* places it in the | +| | | top-left corner of the workspace, | +| | | *floating* places it in the center | +| | | of the window being resized and | +| | | *line* draws the current window size | +| | | over the workspace, like in a | +| | | technical drawing. | ++----------------------------+---------------------+--------------------------------------+ +| MoveDisplay | center, corner | Selects the type or position of the | +| | or floating | box that shows the window position | +| | (default: corner) | when a window is being moved. The | +| | | value meanings are the same as for | +| | | the ResizeDisplay option. | ++----------------------------+---------------------+--------------------------------------+ +| AlignSubmenus | boolean | Whether submenus should be aligned | +| | (default: NO) | vertically with their parent menus. | ++----------------------------+---------------------+--------------------------------------+ +| WrapMenus | boolean | Whether submenus should be placed to | +| | (default: NO) | the right of their parent menus when | +| | | they don't fit the screen. Note that | +| | | menus placed off the screen can be | +| | | scrolled. | ++----------------------------+---------------------+--------------------------------------+ +| ScrollableMenus | boolean | Whether menus that are not fully | +| | (default: NO) | inside the screen should | +| | | automatically scroll when the | +| | | pointer is over them and near the | +| | | border of the screen. | ++----------------------------+---------------------+--------------------------------------+ +| MenuScrollSpeed | speed | The scrolling speed of menus. | +| | (default: medium) | | ++----------------------------+---------------------+--------------------------------------+ +| DontLinkWorkspaces | boolean | Do not automatically switch to the | +| | (default: NO) | next or previous workspace when a | +| | | window is dragged to the edge of the | +| | | screen. | ++----------------------------+---------------------+--------------------------------------+ +| NoWindowUnderDock | boolean | When maximizing windows, limit their | +| | (default: NO) | sizes so that they will not be | +| | | covered by the dock. | ++----------------------------+---------------------+--------------------------------------+ +| NoWindowOverIcons | boolean | When maximizing windows, limit their | +| | (default: NO) | sizes so that they will cover | +| | | miniwindows and application icons. | ++----------------------------+---------------------+--------------------------------------+ +| StickyIcons | boolean | Whether miniwindows should be | +| | (default: NO) | present in all workspaces. | ++----------------------------+---------------------+--------------------------------------+ +| CycleWorkspaces | boolean | Set to YES if you want windows that | +| | (default: NO) | are dragged past the last workspace | +| | | to be moved to the first workspace, | +| | | and vice-versa. | ++----------------------------+---------------------+--------------------------------------+ +| AdvanceToNewWorkspace | boolean | Whether windows dragged past the | +| | (default: NO) | last workspace should create a new | +| | | workspace. | ++----------------------------+---------------------+--------------------------------------+ +| DisableAnimations | boolean | Whether animations, like the one | +| | (default: NO) | done during minimization, should be | +| | | disabled. | ++----------------------------+---------------------+--------------------------------------+ +| IconSlideSpeed | speed | The speed of icons when they are | +| | (default: medium) | being slid across the workspace. | ++----------------------------+---------------------+--------------------------------------+ +| ShadeSpeed | speed | The speed of the shading animation. | +| | (default: medium) | | ++----------------------------+---------------------+--------------------------------------+ +| DisableSound | boolean | Whether sound support in WindowMaker | +| | (default: NO) | should be disabled | ++----------------------------+---------------------+--------------------------------------+ +| `*DisableWSMouseActions` | boolean | Whether actions in the workspace | +| | (default: NO) | triggered by mouse-clicks should be | +| | | disabled. This allows the use of | +| | | file and desktop managers that place | +| | | icons on the root window (such as | +| | | KDE). | ++----------------------------+---------------------+--------------------------------------+ +| SelectWindowMouseButton | mouse button | The mouse button that activates | +| | (default: left) | selection of multiple windows in the | +| | | workspace. | ++----------------------------+---------------------+--------------------------------------+ +| WindowListMouseButton | mouse button | The mouse button that opens the | +| | (default: middle) | window list menu in the workspace. | ++----------------------------+---------------------+--------------------------------------+ +| ApplicationMenuMouseButton | mouse button | The mouse button that opens the | +| | (default: right) | applications menu in the workspace. | ++----------------------------+---------------------+--------------------------------------+ + + +Appearance Options +~~~~~~~~~~~~~~~~~~ + +Fonts are specified in the X Logical Font Description format. You can cut and +paste these names from programs like ``xfontsel``. + +Colors are specified as color names in the standard X format. This can be any +color name shown by the ``showrgb`` program (like black, white or gray) or a +color value in the #rrggbb format, where rr, gg and bb is the intensity of the +color component (like #ff0000 for pure red or #000080 for medium blue). Note +that color names in the #rrggbb format must be enclosed with double quotes. + +Textures are specified as an array, where the first element specifies the +texture type followed by a variable number of arguments. + +Valid texture types are: + +(solid, color) + the texture is a simple solid color. + + +(dgradient, color1, color2) + the texture is a diagonal gradient rendered from the top-left corner to the + bottom-right corner. The first argument (color1) is the color for the + top-left corner and the second (color2) is for the bottom-right corner. + +(hgradient, color1, color2) + the texture is a horizontal gradient rendered from the left edge to the + right edge. The first argument (color1) is the color for the left edge and + the second (color2) is for the right edge. + +(vgradient, color1, color2) + the texture is a vertical gradient rendered from the top edge to the bottom + edge. The first argument (color1) is the color for the top edge and the + second (color2) is for the bottom edge. + + +(mdgradient, color1, color2,...,color*n*) + this is equivalent to drgadient, but you can specify more than two colors + +(mhgradient, color1, color2,...,color*n*) + this is equivalent to hrgadient, but you can specify more than two colors + + +(mvgradient, color1, color2,...,colorn) + this is equivalent to vrgadient, but you can specify more than two colors + +**Examples**: + +.. figure:: guide/images/texsolid.gif + :figclass: borderless + :alt: Solid Color + + (solid, gray) + +.. figure:: guide/images/texdgrad.gif + :figclass: borderless + :alt: Diagoonal Gradient + + (dgradient, gray80, gray20) + +.. figure:: guide/images/texhgrad.gif + :figclass: borderless + :alt: Horizontal Gradient + + (hgradient, gray80, gray20) + +.. figure:: guide/images/texvgrad.gif + :figclass: borderless + :alt: Vertical Gradient + + (vgradient, gray80, gray20) + + ++--------------------+----------------------+----------------------------------------+ +| Option | Value | Description | ++====================+======================+========================================+ +| `*NewStyle` | boolean | Selects between N*XTSTEP style buttons | +| | (default: NO) | in the titlebar and a newer style of | +| | | buttons. | ++--------------------+----------------------+----------------------------------------+ +| WidgetColor | (solid, color) | Chooses the color to be used in | +| | where color is a | titlebar buttons if NewStyle=No; | +| | color name | | +| | (default: | | +| | (solid, grey)) | | ++--------------------+----------------------+----------------------------------------+ +| WorkspaceBack | a texture or | Default texture for the workspace | +| | none | background. Note the *dgradient* and | +| | (default: none) | *mdgradient* textures can take a lot | +| | | of time to be rendered. | ++--------------------+----------------------+----------------------------------------+ +| IconBack | texture | Texture for the background of icons | +| | (default: | and miniwindows. | +| | (solid, grey)) | | ++--------------------+----------------------+----------------------------------------+ +| FTitleBack | texture | Texture for the focused window | +| | (default: | titlebar. | +| | (solid, black)) | | ++--------------------+----------------------+----------------------------------------+ +| PTitleBack | texture | Texture for the titlebar of the parent | +| | (default: | window of the currently focused | +| | (solid, "#616161")) | transient window | ++--------------------+----------------------+----------------------------------------+ +| UTitleBack | texture | Texture for unfocused window | +| | (default: | titlebars. | +| | (solid, gray)) | | ++--------------------+----------------------+----------------------------------------+ +| MenuTitleBack | texture | Texture for menu titlebars. | +| | (default: | | +| | (solid, black)) | | ++--------------------+----------------------+----------------------------------------+ +| MenuTextBack | texture | Texture for menu items | +| | (default: | | +| | (solid, gray)) | | +| | | | ++--------------------+----------------------+----------------------------------------+ +| FTitleColor | color | The color of the text in the focused | +| | (default: white) | window titlebar. | ++--------------------+----------------------+----------------------------------------+ +| PTitleColor | color | Color for the text in the titlebar of | +| | (default: white) | the parent window of the currently | +| | | focused transient. | ++--------------------+----------------------+----------------------------------------+ +| UTitleColor | color | The color for the text in the titlebar | +| | (default: black) | of unfocused windows. | ++--------------------+----------------------+----------------------------------------+ +| MenuTitleColor | color | Color for the text in menu titlebars | +| | (default: white) | | ++--------------------+----------------------+----------------------------------------+ +| MenuTextColor | color | Color for the text in menu items | +| | (default: black) | | ++--------------------+----------------------+----------------------------------------+ +| HighlightColor | color | Color for the highlighted item in | +| | (default: white) | menus. | ++--------------------+----------------------+----------------------------------------+ +| HighlightTextColor | color | Color for the highlighted item text in | +| | (default: black) | menus. | ++--------------------+----------------------+----------------------------------------+ +| MenuDisabledColor | color | Color for the text of disabled menu | +| | (default: "#616161") | items. | ++--------------------+----------------------+----------------------------------------+ +| ClipTitleColor | color | Color for the text in the clip. | +| | (default: black) | | ++--------------------+----------------------+----------------------------------------+ +| CClipTitleColor | color | Color for the text in the collapsed | +| | (default: "#454045") | clip. | ++--------------------+----------------------+----------------------------------------+ +| WindowTitleFont | font (default: | Font for the text in window | +| | Helvetica bold 12) | titlebars. | ++--------------------+----------------------+----------------------------------------+ +| MenuTitleFont | font (default: | Font for the text in menu titlebars) | +| | Helvetica bold 12) | | ++--------------------+----------------------+----------------------------------------+ +| MenuTextFont | font (default: | Font for the text in menu items | +| | Helvetica medium 12) | | ++--------------------+----------------------+----------------------------------------+ +| IconTitleFont | font (default: | Font for the text in miniwindow | +| | Helvetica medium 8) | titlebars. | ++--------------------+----------------------+----------------------------------------+ +| ClipTitleFont | font (default: | Font for the text in the clip. | +| | Helvetica bold 10) | | ++--------------------+----------------------+----------------------------------------+ +| Displayfont | font (default: | Font for the text information in | +| | Helvetica medium 12) | windows, like the size of windows | +| | | during resize. | ++--------------------+----------------------+----------------------------------------+ +| TitleJustify | center, left, | Justification of the text in window | +| | or right | titlebars. | +| | (default: center) | | ++--------------------+----------------------+----------------------------------------+ + + +Keyboard Bindings +~~~~~~~~~~~~~~~~~ + +Keyboard shortcut specifications are in the form: + +.. code:: + :class: highlight + + [ + ] + +Where *modifier key names* specify an optional modifier key, like Meta or +Shift. Any number of modifier keys might be specified. The *key name* is the +actual key that will trigger the action bound to the option. + +Examples: + +[F10] + Means the F10 key. + +Meta+TAB + Means the TAB key with the Meta modifier key pressed at the same time. + +Meta+Shift+TAB + Means the TAB key with the Meta and Shift modifier keys pressed at the same + time. + +Key names can be found at /usr/X11R6/include/X11/keysymdef.h The *XK_* prefixes +must be ignored (if key name is *XK_Return* use *Return*). + ++-----------------------+---------------+-----------------------------------------+ +| Option | Default Value | Description | ++=======================+===============+=========================================+ +| RootMenuKey | None | Opens the `root window menu | +| | | `_ | +| | | at the current position of the | +| | | mouse pointer. | ++-----------------------+---------------+-----------------------------------------+ +| WindowListKey | None | Opens the `window list menu`_ | +| | | menu at the current position of the | +| | | mouse pointer. | ++-----------------------+---------------+-----------------------------------------+ +| WindowMenuKey | None | Opens the `window commands menu | +| | | `_ | +| | | for the currently focused window. | ++-----------------------+---------------+-----------------------------------------+ +| MiniaturizeKey | None | Miniaturizes the currently focused | +| | | window. | ++-----------------------+---------------+-----------------------------------------+ +| HideKey | None | Hides the currently active | +| | | application. | ++-----------------------+---------------+-----------------------------------------+ +| CloseKey | None | Closes the current focused window | ++-----------------------+---------------+-----------------------------------------+ +| MaximizeKey | None | Maxmizes the currently focused window. | ++-----------------------+---------------+-----------------------------------------+ +| VMaximizeKey | None | Vertically Maximizes the currently | +| | | focused window. | ++-----------------------+---------------+-----------------------------------------+ +| RaiseKey | Meta+Up | Raises the currently focused window. | ++-----------------------+---------------+-----------------------------------------+ +| LowerKey | Meta+Down | Lowers the currently focused window. | ++-----------------------+---------------+-----------------------------------------+ +| RaiseLowerKey | None | Raises the window under the pointer, | +| | | or lowers it if it is already raised. | ++-----------------------+---------------+-----------------------------------------+ +| ShadeKey | None | Shades the currently focused window. | ++-----------------------+---------------+-----------------------------------------+ +| SelectKey | None | Selects current focused window. | ++-----------------------+---------------+-----------------------------------------+ +| FocusNextKey | None | Switch focus to next window. | ++-----------------------+---------------+-----------------------------------------+ +| FocusPrevKey | None | Switch focus to previous window. | ++-----------------------+---------------+-----------------------------------------+ +| NextWorkspaceKey | None | Switches to next workspace. | ++-----------------------+---------------+-----------------------------------------+ +| PrevWorkspaceKey | None | Switches to previous workspace. | ++-----------------------+---------------+-----------------------------------------+ +| NextWorkspaceLayerKey | None | Switches to the next group of 10 | +| | | workspaces. | ++-----------------------+---------------+-----------------------------------------+ +| PrevWorkspaceLayerKey | None | Switches to the previous group of | +| | | 10 workspaces. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace1Key | None | Switches to workspace 1. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace2Key | None | Switches to workspace 2, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace3Key | None | Switches to workspace 3, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace4Key | None | Switches to workspace 4, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace5Key | None | Switches to workspace 5, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace6Key | None | Switches to workspace 6, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace7Key | None | Switches to workspace 7, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace8Key | None | Switches to workspace 8, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| Workspace9Key | None | Switches to workspace 9, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| | | | +| Workspace10Key | None | Switches to workspace 10, creating | +| | | it if it does not exist. | ++-----------------------+---------------+-----------------------------------------+ +| ClipLowerKey | None | Lowers the clip. | ++-----------------------+---------------+-----------------------------------------+ +| ClipRaiseLowerKEy | None | Raises the clip, or lowers it if | +| | | it is already raised. | ++-----------------------+---------------+-----------------------------------------+ + + +Window Attributes +~~~~~~~~~~~~~~~~~ + +Window attributes are stored in the $(HOME)/GNUstep/Defaults/WMWindowAttributes +file. + +The contents of this file is a dictionary of attribute dictionaries keyed by +window names. Like this: + +.. code:: + :class: highlight + + { + "*" = { + Icon = "defaultAppIcon.xpm"; + }; + "xterm.XTerm" = { + Icon = "xterm.xpm"; + }; + xconsole = { + Omnipresent = YES; + NoTitlebar = YES; + KeepOnTop = NO; + }; + } + +Window names are in the form [1]_ : + +- . + +OR + +- + +OR + +- + +Placing an asterisk as the window name means that the values set for that key +are to be used as default values for all windows. So, since xconsole does not +specify an Icon attribute, it will use the default value, which in the above +example is defaultAppIcon.xpm. + + +**Options:** + +The default is NO for all options + ++---------------------+------------------+-------------------------------------+ +| Option | Value | Description | ++=====================+==================+=====================================+ +| Icon | pixmap file name | Assigns a pixmap image to be | +| | | used as the icon for that window. | ++---------------------+------------------+-------------------------------------+ +| NoTitleBar | boolean | Disables the titlebar in the | +| | | window. | ++---------------------+------------------+-------------------------------------+ +| NoResizeBar | boolean | Disables the resizebar in the | +| | | window. | ++---------------------+------------------+-------------------------------------+ +| NoMiniaturizeButton | boolean | Remove the miniaturize | +| | | button. | ++---------------------+------------------+-------------------------------------+ +| NoCloseButton | boolean | Remove the close button. | ++---------------------+------------------+-------------------------------------+ +| NoHideOthers | boolean | Do not hide the window, or the | +| | | application to which the window | +| | | belongs when a *Hide Others* | +| | | command is issued. | ++---------------------+------------------+-------------------------------------+ +| NoMouseBindings | boolean | Do not grab mouse buttons in that | +| | | window. This means that actions | +| | | like a Meta-click on the window | +| | | will be caught by the application | +| | | instead of WindowMaker. | ++---------------------+------------------+-------------------------------------+ +| NoKeyBindings | boolean | Do not grab keys in that window. | +| | | This means that keystrokes that | +| | | would normally be intercepted by | +| | | WindowMaker (because they are | +| | | bound to some action), like | +| | | Meta+Up, will be passed to the | +| | | application. | ++---------------------+------------------+-------------------------------------+ +| NoAppIcon | boolean | Do not create application icon for | +| | | the window. This is useful for some | +| | | applications that incorrectly get | +| | | more than one application icon. | ++---------------------+------------------+-------------------------------------+ +| KeepOnTop | boolean | Always keep the window over other | +| | | normal windows. | ++---------------------+------------------+-------------------------------------+ +| Omnipresent | boolean | Make the window be present in all | +| | | workspaces, AKA sticky window. | ++---------------------+------------------+-------------------------------------+ +| | | | +| SkipWindowList | boolean | Do not list the window in the | +| | | `window list menu`_ | ++---------------------+------------------+-------------------------------------+ +| | | | +| KeepInsideScreen | boolean | Always keep the window inside the | +| | | visible are of the screen. | ++---------------------+------------------+-------------------------------------+ +| Unfocusable | boolean | Do not let the window be focused. | ++---------------------+------------------+-------------------------------------+ +| StartWorkspace | Workspace number | Make the window always be initially | +| | or name | shown in the indicated workspace. | ++---------------------+------------------+-------------------------------------+ + + +Applications Menu +~~~~~~~~~~~~~~~~~ + +The applications menu (AKA: Root Menu) can be defined in one of two distinct +ways: + +- In the form of an array in property list format, in + $(HOME)/GNUstep/Defaults/WMRootMenu +- In the form of a text file, whose location is present in + $(HOME)/GNUstep/Defaults/WMRootMenu + + +---- + +.. [1] You can get the values for these information by running the ``xprop`` + utility on the desired window. When you do that, it will show the following + line, among other things: + + .. code:: + :class: highlight + + WM_CLASS(STRING) = "xterm", "XTerm" + + The first string (xterm) is the window instance name and the second (XTerm) + the window class name. + + +.. _window list menu: chap3.html#3.12 + + +
    +
    +
    Window Maker: User Guide - Configuration
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/docs/chap5.html b/docs/chap5.html new file mode 100644 index 0000000..cc21f6d --- /dev/null +++ b/docs/chap5.html @@ -0,0 +1,87 @@ + + + + Window Maker: User Guide - Tips + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Tips

    + +
      +
    • If the size of a window gets so large that it doesn't fit on the screen and +you can't manipulate it, you can simply hold the Meta key while dragging the +window in the client area. This way you can move the window up or down and +resize it, if you want.

    • +
    • If you want windows to be able to cover the dock, you can make the dock +lowerable by double clicking the first dock icon while holding the Meta key. +Then, you can raise and lower the dock through the first icon, just like you +do with windows.

    • +
    • If you want windows to be able to cover menus, you can make them lowerable +just like the dock by double clicking the titlebar with the Meta key pressed.

    • +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Tips
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap5.rst b/docs/chap5.rst new file mode 100644 index 0000000..b74a873 --- /dev/null +++ b/docs/chap5.rst @@ -0,0 +1,85 @@ + + + + Window Maker: User Guide - Tips + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Tips +==== + +- If the size of a window gets so large that it doesn't fit on the screen and + you can't manipulate it, you can simply hold the Meta key while dragging the + window in the client area. This way you can move the window up or down and + resize it, if you want. + +- If you want windows to be able to cover the dock, you can make the dock + lowerable by double clicking the first dock icon while holding the Meta key. + Then, you can raise and lower the dock through the first icon, just like you + do with windows. + +- If you want windows to be able to cover menus, you can make them lowerable + just like the dock by double clicking the titlebar with the Meta key pressed. + +
    +
    +
    +
    Window Maker: User Guide - Tips
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap6.html b/docs/chap6.html new file mode 100644 index 0000000..0c5e20f --- /dev/null +++ b/docs/chap6.html @@ -0,0 +1,83 @@ + + + + Window Maker: User Guide - Glossary + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Glossary

    + +
      +
    • [drag] to click in an object with the mouse and move the mouse while holding +the mouse button.

    • +
    • [miniaturize] (iconify, minimize) to temporarily put a window aside, +replacing the window with a miniature representation of it.

    • +
    • [Meta key] depending on the system and keyboard types, this can mean +different keys. Under Linux, it is usually the Alt or Alternate key.

    • +
    +
    + +
    +
    +
    +
    Window Maker: User Guide - Glossary
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap6.rst b/docs/chap6.rst new file mode 100644 index 0000000..73adfca --- /dev/null +++ b/docs/chap6.rst @@ -0,0 +1,81 @@ + + + + Window Maker: User Guide - Glossary + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Glossary +======== + +- [drag] to click in an object with the mouse and move the mouse while holding + the mouse button. + +- [miniaturize] (iconify, minimize) to temporarily put a window aside, + replacing the window with a miniature representation of it. + +- [Meta key] depending on the system and keyboard types, this can mean + different keys. Under Linux, it is usually the Alt or Alternate key. + +
    +
    +
    +
    Window Maker: User Guide - Glossary
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap7.html b/docs/chap7.html new file mode 100644 index 0000000..d76215d --- /dev/null +++ b/docs/chap7.html @@ -0,0 +1,78 @@ + + + + Window Maker: User Guide - Credits + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Credits

    + +

    The original TeX version of this document was written by Afredo K. Kojima.

    +

    The HTML conversion was done primarily by Jeremy Crabtree, with assistance from +Dan Olav Mikael Hultgren Gudmundsson.

    +
    + +
    +
    +
    +
    Window Maker: User Guide - Credits
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/chap7.rst b/docs/chap7.rst new file mode 100644 index 0000000..740dc86 --- /dev/null +++ b/docs/chap7.rst @@ -0,0 +1,77 @@ + + + + Window Maker: User Guide - Credits + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Credits +======= + +The original TeX version of this document was written by Afredo K. Kojima. + +The HTML conversion was done primarily by Jeremy Crabtree, with assistance from +Dan Olav Mikael Hultgren Gudmundsson. + +
    +
    +
    +
    Window Maker: User Guide - Credits
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guide/images/anatomy.gif b/docs/guide/images/anatomy.gif new file mode 100644 index 0000000..90bda56 Binary files /dev/null and b/docs/guide/images/anatomy.gif differ diff --git a/docs/guide/images/dockapppanel.gif b/docs/guide/images/dockapppanel.gif new file mode 100644 index 0000000..d53a30e Binary files /dev/null and b/docs/guide/images/dockapppanel.gif differ diff --git a/docs/guide/images/focus.gif b/docs/guide/images/focus.gif new file mode 100644 index 0000000..4a188e9 Binary files /dev/null and b/docs/guide/images/focus.gif differ diff --git a/docs/guide/images/menu.gif b/docs/guide/images/menu.gif new file mode 100644 index 0000000..5642576 Binary files /dev/null and b/docs/guide/images/menu.gif differ diff --git a/docs/guide/images/mini.gif b/docs/guide/images/mini.gif new file mode 100644 index 0000000..8afef6f Binary files /dev/null and b/docs/guide/images/mini.gif differ diff --git a/docs/guide/images/resizebar.gif b/docs/guide/images/resizebar.gif new file mode 100644 index 0000000..ede0b50 Binary files /dev/null and b/docs/guide/images/resizebar.gif differ diff --git a/docs/guide/images/shade.gif b/docs/guide/images/shade.gif new file mode 100644 index 0000000..f9b5b51 Binary files /dev/null and b/docs/guide/images/shade.gif differ diff --git a/docs/guide/images/texdgrad.gif b/docs/guide/images/texdgrad.gif new file mode 100644 index 0000000..8b403b5 Binary files /dev/null and b/docs/guide/images/texdgrad.gif differ diff --git a/docs/guide/images/texhgrad.gif b/docs/guide/images/texhgrad.gif new file mode 100644 index 0000000..3ba0da4 Binary files /dev/null and b/docs/guide/images/texhgrad.gif differ diff --git a/docs/guide/images/texsolid.gif b/docs/guide/images/texsolid.gif new file mode 100644 index 0000000..86b212c Binary files /dev/null and b/docs/guide/images/texsolid.gif differ diff --git a/docs/guide/images/texvgrad.gif b/docs/guide/images/texvgrad.gif new file mode 100644 index 0000000..77db839 Binary files /dev/null and b/docs/guide/images/texvgrad.gif differ diff --git a/docs/guide/images/title.gif b/docs/guide/images/title.gif new file mode 100644 index 0000000..eb73dfb Binary files /dev/null and b/docs/guide/images/title.gif differ diff --git a/docs/guide/images/title2.gif b/docs/guide/images/title2.gif new file mode 100644 index 0000000..82c24d7 Binary files /dev/null and b/docs/guide/images/title2.gif differ diff --git a/docs/guide/images/wiaadvanced.gif b/docs/guide/images/wiaadvanced.gif new file mode 100644 index 0000000..8759c62 Binary files /dev/null and b/docs/guide/images/wiaadvanced.gif differ diff --git a/docs/guide/images/wiaappspec.gif b/docs/guide/images/wiaappspec.gif new file mode 100644 index 0000000..e7a95f2 Binary files /dev/null and b/docs/guide/images/wiaappspec.gif differ diff --git a/docs/guide/images/wiaattrib.gif b/docs/guide/images/wiaattrib.gif new file mode 100644 index 0000000..1ebb602 Binary files /dev/null and b/docs/guide/images/wiaattrib.gif differ diff --git a/docs/guide/images/wiaiandiw.gif b/docs/guide/images/wiaiandiw.gif new file mode 100644 index 0000000..c9a5364 Binary files /dev/null and b/docs/guide/images/wiaiandiw.gif differ diff --git a/docs/guide/images/wiaspec.gif b/docs/guide/images/wiaspec.gif new file mode 100644 index 0000000..b0999ec Binary files /dev/null and b/docs/guide/images/wiaspec.gif differ diff --git a/docs/guide/images/wsmenu.gif b/docs/guide/images/wsmenu.gif new file mode 100644 index 0000000..04feb30 Binary files /dev/null and b/docs/guide/images/wsmenu.gif differ diff --git a/docs/guide/images/wsmenued.gif b/docs/guide/images/wsmenued.gif new file mode 100644 index 0000000..650f692 Binary files /dev/null and b/docs/guide/images/wsmenued.gif differ diff --git a/docs/guide_toc.html b/docs/guide_toc.html new file mode 100644 index 0000000..69daf05 --- /dev/null +++ b/docs/guide_toc.html @@ -0,0 +1,84 @@ + + + + Window Maker: User Guide + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + + +
    +
    +
    Window Maker: User Guide
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guide_toc.rst b/docs/guide_toc.rst new file mode 100644 index 0000000..573b8a2 --- /dev/null +++ b/docs/guide_toc.rst @@ -0,0 +1,77 @@ + + + + Window Maker: User Guide + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + - `Chapter 1: Introduction `_ +- `Chapter 2: Windows `_ +- `Chapter 3: The Workspace `_ +- `Chapter 4: Configuring WindowMaker `_ +- `Chapter 5: Tips `_ +- `Chapter 6: Glossary `_ +- `Chapter 7: Credits `_ + +
    +
    +
    +
    Window Maker: User Guide
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/back.html b/docs/guidedtour/back.html new file mode 100644 index 0000000..26d6f6d --- /dev/null +++ b/docs/guidedtour/back.html @@ -0,0 +1,173 @@ + + + + Window Maker: Guided Tour - Backgrounds and Themes + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Backgrounds and Themes

    + + +
    +

    Contents

    + +
    +

    For the purposes of this guided tour, only those appearance options that are +built-in to Window Maker will be considered. Crafting custom styles and themes +is not terribly difficult, nor do you need any special knowledge of programming +languages or other specialized skills, but this is outside the intended scope +of the guided tour.

    +

    The appearance of the Window Maker GUI can easily be customized from the +applications menu item "Appearance".

    +

    Themes, styles, icon sets, and backgrounds can be selected as soon as they are +installed in the right directory.

    +

    Themes should be installed in the directory +~/GNUstep/Library/WindowMaker/Themes/

    +

    Styles should be installed in the directory +~/GNUstep/Library/WindowMaker/Styles/

    +

    Backgrounds should be installed in the directory +~/GNUstep/Library/WindowMaker/Backgrounds/

    +

    If you are working within a freshly-installed instance of Window Maker, your +Linux distribution probably provided some default themes, styles and +backgrounds. Rarely, a distribution provides no additional themes, styles or +backgrounds - expecting users to provide these on their own.

    +

    Here is the "Appearance" menu and some of its associated sub-menus, +including themes, styles and backgrounds:

    +
    +Appearance menu items +
    +

    In the screenshot above, most of the styles are default to the Debian GNU/Linux +distribution, while most of the themes were user-installed. Many themes are +available for download on the internet.

    +
    +

    Backgrounds

    +

    Backgrounds may be system-generated solid or gradient colors, or they may be +images from user or distribution-supplied image files. The easiest way to +change a system-generated background color or color gradient is to select one +from the "Appearance -> Background -> <Solid | Gradient>" menu. In most default +configurations there will be six to eight selections in each category.

    +

    Likewise, the easiest way to change to a background image is to select one from +the "Appearance -&gt; Background -&gt; Images" menu. If you wish to install +your own images for use as backgrounds, place the image file in your +~/GNUstep/Library/WindowMaker/Backgrounds/ directory and they will be +available from the menu immediately.

    +
    +
    +

    Styles

    +

    A style defines the look of the key components of the Window Maker desktop. +These components include the window titlebar and resizebar, the menu title and +text field, and the icon background.

    +

    The characteristics defined in a style (or theme) are the color and "texture" +of key GUI elements. Texture in this context means using multiple colors in +various color gradients - you are not limited to solid colors only.

    +

    The easiest method for changing the style is to select a style from the +"Appearance -> Style" menu.

    +

    A style may also be created using the Appearance Preferences tool in +WPrefs.app. From this tool, you may configure the color and texture of +window elements (titlebars, resizebars), menu elements (menu titlebar, menu +item text colors, menu "style") and the color and texture of icon backgrounds. +The location of titlebar text and the font and text color for window and menu +text may also be configured here.

    +
    +Appearance preferences tool +

    Appearance preferences tool

    +
    +

    More information on creating a style "from scratch" may be found in the Window +Maker User's Guide. (Scroll down to the +section on "Appearance Options.")

    +

    A step-by-step guide to crafting a custom style is available HERE.

    +
    +
    +

    Themes

    +

    In its most basic form, a theme is simply a style that also includes a +background. Some Linux distributions provide one or more default themes for use +system-wide. You may install your own themes in the +~/GNUstep/Library/WindowMaker/Themes/ directory. Themes installed in the +correct directory will be available for selection in the "Appearance -&gt; +Themes" menu. Selecting Themes from the Appearance menu runs the setstyle +program to install the theme and record it in the +~/GNUstep/Defaults/WindowMaker file.

    +

    Two sites providing preconfigured themes are HERE and HERE. An internet search for "Window +Maker themes" will generate additional results, and you should also check your +Linux distribution's repositories - some provide themes for installation using +your distribution's package management system.

    +

    Themes may include images in png, jpg, xpm, and other supported image file +formats for key elements of the GUI such as titlebars, icon backgrounds, and +the workspace background. Themes that include images cannot be stored as a +single text file, and therefore must be stored in a directory. A theme +directory must contain all of the image files needed for the theme along with a +file named "style." The style file in a theme directory will specify all of the +GUI elements including any image files used for those elements in lieu of rgb +color specifications. A theme directory must use the suffix ".themed" after the +theme name.

    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Backgrounds and Themes
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/back.rst b/docs/guidedtour/back.rst new file mode 100644 index 0000000..10232d8 --- /dev/null +++ b/docs/guidedtour/back.rst @@ -0,0 +1,194 @@ + + + + Window Maker: Guided Tour - Backgrounds and Themes + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + .. TODO: check for the dead links + +Backgrounds and Themes +====================== + +.. contents:: + :backlinks: none + +For the purposes of this guided tour, only those appearance options that are +built-in to Window Maker will be considered. Crafting custom styles and themes +is not terribly difficult, nor do you need any special knowledge of programming +languages or other specialized skills, but this is outside the intended scope +of the guided tour. + +The appearance of the Window Maker GUI can easily be customized from the +applications menu item "Appearance". + +Themes, styles, icon sets, and backgrounds can be selected as soon as they are +installed in the right directory. + +Themes should be installed in the directory +``~/GNUstep/Library/WindowMaker/Themes/`` + +Styles should be installed in the directory +``~/GNUstep/Library/WindowMaker/Styles/`` + +Backgrounds should be installed in the directory +``~/GNUstep/Library/WindowMaker/Backgrounds/`` + +If you are working within a freshly-installed instance of Window Maker, your +Linux distribution probably provided some default themes, styles and +backgrounds. Rarely, a distribution provides no additional themes, styles or +backgrounds - expecting users to provide these on their own. + +Here is the "Appearance" menu and some of its associated sub-menus, +including themes, styles and backgrounds: + +.. figure:: images/appearancemenu.png + :alt: Appearance menu items + :figclass: borderless + +In the screenshot above, most of the styles are default to the Debian GNU/Linux +distribution, while most of the themes were user-installed. Many themes are +available for download on the internet. + +Backgrounds +----------- + +Backgrounds may be system-generated solid or gradient colors, or they may be +images from user or distribution-supplied image files. The easiest way to +change a system-generated background color or color gradient is to select one +from the "Appearance -> Background -> " menu. In most default +configurations there will be six to eight selections in each category. + +Likewise, the easiest way to change to a background image is to select one from +the "Appearance -> Background -> Images" menu. If you wish to install +your own images for use as backgrounds, place the image file in your +``~/GNUstep/Library/WindowMaker/Backgrounds/`` directory and they will be +available from the menu immediately. + +Styles +------ + +A style defines the look of the key components of the Window Maker desktop. +These components include the window titlebar and resizebar, the menu title and +text field, and the icon background. + +The characteristics defined in a style (or theme) are the color and "texture" +of key GUI elements. Texture in this context means using multiple colors in +various color gradients - you are not limited to solid colors only. + +The easiest method for changing the style is to select a style from the +"Appearance -> Style" menu. + +A style may also be created using the *Appearance Preferences* tool in +*WPrefs.app*. From this tool, you may configure the color and texture of +window elements (titlebars, resizebars), menu elements (menu titlebar, menu +item text colors, menu "style") and the color and texture of icon backgrounds. +The location of titlebar text and the font and text color for window and menu +text may also be configured here. + + +.. figure:: images/prefs13.png + :figclass: borderless + :alt: Appearance preferences tool + + Appearance preferences tool + +More information on creating a style "from scratch" may be found `in the Window +Maker User's Guide `_. (Scroll down to the +section on "Appearance Options.") + +A step-by-step guide to crafting a custom style is available `HERE +`__. + +Themes +------ + +In its most basic form, a theme is simply a style that also includes a +background. Some Linux distributions provide one or more default themes for use +system-wide. You may install your own themes in the +``~/GNUstep/Library/WindowMaker/Themes/`` directory. Themes installed in the +correct directory will be available for selection in the "Appearance -> +Themes" menu. Selecting Themes from the Appearance menu runs the *setstyle* +program to install the theme and record it in the +``~/GNUstep/Defaults/WindowMaker`` file. + +Two sites providing preconfigured themes are `HERE +`__ and `HERE +`__. An internet search for "Window +Maker themes" will generate additional results, and you should also check your +Linux distribution's repositories - some provide themes for installation using +your distribution's package management system. + +Themes may include images in png, jpg, xpm, and other supported image file +formats for key elements of the GUI such as titlebars, icon backgrounds, and +the workspace background. Themes that include images cannot be stored as a +single text file, and therefore must be stored in a directory. A theme +directory must contain all of the image files needed for the theme along with a +file named "style." The style file in a theme directory will specify all of the +GUI elements including any image files used for those elements in lieu of rgb +color specifications. A theme directory must use the suffix ".themed" after the +theme name. + +
    +
    +
    +
    Window Maker: Guided Tour - Backgrounds and Themes
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/clip.html b/docs/guidedtour/clip.html new file mode 100644 index 0000000..05f7e96 --- /dev/null +++ b/docs/guidedtour/clip.html @@ -0,0 +1,153 @@ + + + + Window Maker: Guided Tour - Clip + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    CLIP

    + +

    By default, The clip is represented by the icon on the top left of the screen +containing a paperclip image.

    +
    +Clip icon +
    +

    The clip's primary function is to serve as a workspace-specific dock. In other +words, applications may be attached to the clip just as they are to the dock, +but the clip and its associated applications are specific to each individual +workspace - not available on all workspaces as they are on the dock.

    +

    The clip's secondary function is to act as a "pager" - a utility for changing +from one workspace to another (paging). The arrows at the top right and bottom +left corners of the clip icon allow you to switch from one workspace to the +next workspace (top right) or previous workspace (bottom left).

    +

    The current workspace name (if any) and number are displayed on the +clip.

    +

    The clip also has a number of menu-driven features.

    +
    +

    Clip Menu

    +

    Right-clicking the clip displays a menu.

    +
    +Clip menu +

    Clip menu

    +
    +
    +
    +

    Clip Options

    +

    The first menu item allows you to select clip options. The following options +are available:

    +
      +
    • Keep on top - do not allow windows to cover the clip.

    • +
    • Collapsed - icons attached to the clip are hidden until you left-click the +clip, which unhides them.

    • +
    • Autocollapse - same as the previous option, except that mouseing over the +clip unhides application icons.

    • +
    • Autoraise - clicking an icon representing a window hidden under a larger +window brings that window to the front.

    • +
    • Autoattract icons - selecting this option attracts the icon of any +application launched on the current workspace. Closing the application +removes the icon from the clip.

    • +
    +
    +
    +

    Rename Workspace

    +

    This item gives you to ability to name (or rename) the current workspace.

    +

    Some users tend to group certain applications by workspace and like to name the +workspace to indicate the nature of the applications on the clip. For example, +a user might have a browser, an IRC client, and a file transfer application +clipped on a workspace, and might name that workspace "internet" to indicate +the workspace's primary function. The user might have a seperate workspace with +a vector graphics application, an image manipulation application, and an image +viewer on the clip, and might name that workspace "graphics."

    +
    +
    +

    Other Options

    +

    Right-clicking a clipped application's icon gives options specific to that +application.

    +
      +
    • You may make the application's icon omnipresent (clipped on all +workspaces).

    • +
    • You may select one or all clipped icons.

    • +
    • You may move one or all icons to a different workspace.

    • +
    • You may remove the icon.

    • +
    • You may instruct Window Maker to have all icons attracted to the clip as +soon as each application is launched, rather than placing them initially in +the defined location on the display.

    • +
    +

    The remaining clip menu items are similar to those of the Dock application +icon menu. As with the dock, clipped applications may be +launched, hidden, or killed and their settings (icon used, application launch +path/arguments, middle-click launch) may be modified.

    +

    From version 0.80.0 on, the clip can "steal" appicons. This feature has nothing +to do with autoattracting icons. When you start an application from somewhere +other than either the clip or the dock (i.e., from the menu or a terminal), and +the application is already either docked or clipped, a new application icon +does not appear at the bottom of your screen. The icon that is already docked +or clipped "steals" the icon function. As a result, the icon for the +newly-launched application is the icon already on the clip or the dock.

    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Clip
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/clip.rst b/docs/guidedtour/clip.rst new file mode 100644 index 0000000..99add26 --- /dev/null +++ b/docs/guidedtour/clip.rst @@ -0,0 +1,167 @@ + + + + Window Maker: Guided Tour - Clip + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + CLIP +==== + +By default, The clip is represented by the icon on the top left of the screen +containing a paperclip image. + +.. figure:: images/clip.png + :alt: Clip icon + :figclass: borderless + +The clip's primary function is to serve as a workspace-specific dock. In other +words, applications may be attached to the clip just as they are to the dock, +but the clip and its associated applications are specific to each individual +workspace - not available on all workspaces as they are on the dock. + +The clip's secondary function is to act as a "pager" - a utility for changing +from one workspace to another (paging). The arrows at the top right and bottom +left corners of the clip icon allow you to switch from one workspace to the +next workspace (top right) or previous workspace (bottom left). + +The current workspace name (if any) and number are displayed on the +clip. + +The clip also has a number of menu-driven features. + +Clip Menu +--------- + +Right-clicking the clip displays a menu. + +.. figure:: images/menu_clip.png + :alt: Clip menu + :figclass: borderless + + Clip menu + +Clip Options +------------ + +The first menu item allows you to select clip options. The following options +are available: + +- *Keep on top* - do not allow windows to cover the clip. +- *Collapsed* - icons attached to the clip are hidden until you left-click the + clip, which unhides them. +- *Autocollapse* - same as the previous option, except that mouseing over the + clip unhides application icons. +- *Autoraise* - clicking an icon representing a window hidden under a larger + window brings that window to the front. +- *Autoattract icons* - selecting this option attracts the icon of any + application launched on the current workspace. Closing the application + removes the icon from the clip. + +Rename Workspace +---------------- + +This item gives you to ability to name (or rename) the current workspace. + +Some users tend to group certain applications by workspace and like to name the +workspace to indicate the nature of the applications on the clip. For example, +a user might have a browser, an IRC client, and a file transfer application +clipped on a workspace, and might name that workspace "internet" to indicate +the workspace's primary function. The user might have a seperate workspace with +a vector graphics application, an image manipulation application, and an image +viewer on the clip, and might name that workspace "graphics." + +Other Options +------------- + +Right-clicking a clipped application's icon gives options specific to that +application. + +- You may make the application's icon *omnipresent* (clipped on all + workspaces). + +- You may *select* one or all clipped icons. + +- You may *move* one or all icons to a different workspace. + +- You may *remove* the icon. + +- You may instruct Window Maker to have all icons *attracted* to the clip as + soon as each application is launched, rather than placing them initially in + the defined location on the display. + +The remaining clip menu items are similar to those of the `Dock application +icon menu `_. As with the dock, clipped applications may be +launched, hidden, or killed and their settings (icon used, application launch +path/arguments, middle-click launch) may be modified. + +From version 0.80.0 on, the clip can "steal" appicons. This feature has nothing +to do with autoattracting icons. When you start an application from somewhere +other than either the clip or the dock (i.e., from the menu or a terminal), and +the application is already either docked or clipped, a new application icon +does not appear at the bottom of your screen. The icon that is already docked +or clipped "steals" the icon function. As a result, the icon for the +newly-launched application is the icon already on the clip or the dock. + +
    +
    +
    +
    Window Maker: Guided Tour - Clip
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/dock.html b/docs/guidedtour/dock.html new file mode 100644 index 0000000..128e934 --- /dev/null +++ b/docs/guidedtour/dock.html @@ -0,0 +1,177 @@ + + + + Window Maker: Guided Tour - Dock + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Dock

    + + +
    +

    Application dock

    +

    The dock is the column of icons located by default on the right side of the +screen.

    +

    Any application can be attached to the dock. To do this, open an application +then simply left-click-and-drag the application's icon to the last position on +the dock. The dock will "attract" the icon and it will remain on the dock until +removed by the user (left-click-and-drag the icon off the dock - it will +disappear.) If you have saved your Window Maker session prior to logout (or set +Window Maker to autosave your session upon logout) any icons you docked will +automatically reappear at your next - and each subsequent - session.

    +

    The dock can be configured to remain on top of maximized windows. To do this, +right-click on a dock or any docked icon then select appropriate option form +Dock position submenu. Consult Application icon menu for details.

    +

    The WMDock icon (by default, with the GNUstep logo) can be dragged sideways to +switch the the entire dock from one side of the display to the other.

    +

    Dragging the WMDock icon downward will move the dock off the display with the +exception of the WMDock icon itself, which will remain visible. To restore dock +visibility, left-click-and-drag the dock back on screen.

    +
    +
    +

    Starting an application

    +

    Double-clicking the icon of a docked application starts the application.

    +

    An application that has not been launched normally has an elipsis (three dots) +in the bottom-left-corner of the icon and appears in full color as shown below.

    +
    +Unlaunched application icon +

    Unlaunched application icon

    +
    +

    When the application is running, the elipsis disappears from the +bottom-left-corner of the icon and the icon becomes highlited.

    +
    +Launched application icon +

    Launched application icon

    +
    +

    Sometimes, when the application is running, instead of highlited icon, the icon +becomes "greyed out", giving a visual cue that the application is already open, +and cannot be launched again.

    +
    +Launched application icon +

    Grayed-out application icon

    +
    +

    A docked icon that continues to show an elipsis and remains "full color" even +after an instance of the application is running indicates that the +application's settings have been modified to allow multiple launches from one +docked icon. To do this you must open the application and modify the +"application specific" settings in the commands menu of the +application to allow "shared application icons".

    +

    Using the "launch" command in the "application icon menu" for the icon is +another way to start an application from the dock.

    +

    From version 0.80.0 on, the dock can "steal" appicons. This feature has nothing +to do with Autoattract Icons. When you start an application from somewhere else +than either the clip or the dock (menu or terminal), and the appicon exists in +one of them (clip or dock), this appicon doesn't appear at the bottom of your +screen. The appicon existing in the clip or the dock "stole" it. As a result, +the appicon is the same as the one used to start the application from the clip +or the dock.

    +
    +
    +

    Customizing

    +

    Left-clicking and dragging an application icon to the dock adds this +application to the dock. Obviously, this means the application is running!

    +

    Miniwindows (windows of minimized applications) cannot be docked. The small +titlebar on the miniwindow differentiates it from an application's icon.

    +

    Dragging an icon off the dock removes the docked application.

    +
    +
    +

    Configuring

    +

    There is a dock menu for each icon. Right-clicking the icon displays the +"application icon menu". Select the "Settings..." option to configure the +application.

    +
    +Launched application icon +

    Launched application icon

    +
    +

    The application's path and its arguments, the command for middle-click +launch, and the icon employed can be changed in this panel.

    +

    Shell commands such as redirection cannot be used in the command field.

    +

    The desired icon must be in one of the directories displayed in the panel while +browsing. New directories can be added from the Search path preferences.

    +

    A checkbox allows you to start the application when Window Maker is first +started. (Note: You want to be careful with this. If you have, for example, +your terminal emulator, your file manager, and your browser set to start when +Window Maker is started you'll get an open terminal, an open file manager and +an open browser every time you start a session! Normally you will only want +to start certain dockapps - "regular" applications like a terminal emulator or +browser can be started after your session is up and going.)

    +

    From version 0.62.0 on, a checkbox can be used to prevent accidental +removal from the dock.

    +

    From version 0.70.0 on, a new field has been added for middle-click launch. +Entering, for example, "firefox" into a docked application settings panel will +launch the Firefox browser.

    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Dock
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/dock.rst b/docs/guidedtour/dock.rst new file mode 100644 index 0000000..d137c78 --- /dev/null +++ b/docs/guidedtour/dock.rst @@ -0,0 +1,200 @@ + + + + Window Maker: Guided Tour - Dock + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Dock +==== + +.. contents:: + :backlinks: none + +Application dock +---------------- + +The dock is the column of icons located by default on the right side of the +screen. + +Any application can be attached to the dock. To do this, open an application +then simply left-click-and-drag the application's icon to the last position on +the dock. The dock will "attract" the icon and it will remain on the dock until +removed by the user (left-click-and-drag the icon off the dock - it will +disappear.) If you have saved your Window Maker session prior to logout (or set +Window Maker to autosave your session upon logout) any icons you docked will +automatically reappear at your next - and each subsequent - session. + +The dock can be configured to remain on top of maximized windows. To do this, +right-click on a dock or any docked icon then select appropriate option form +*Dock position* submenu. Consult `Application icon menu +`_ for details. + +The WMDock icon (by default, with the GNUstep logo) can be dragged sideways to +switch the the entire dock from one side of the display to the other. + +Dragging the WMDock icon downward will move the dock off the display with the +exception of the WMDock icon itself, which will remain visible. To restore dock +visibility, left-click-and-drag the dock back on screen. + +Starting an application +----------------------- + +Double-clicking the icon of a docked application starts the application. + +An application that has not been launched normally has an elipsis (three dots) +in the bottom-left-corner of the icon and appears in full color as shown below. + +.. figure:: images/unlaunched_app.png + :alt: Unlaunched application icon + :figclass: borderless + + Unlaunched application icon + +When the application is running, the elipsis disappears from the +bottom-left-corner of the icon and the icon becomes highlited. + +.. figure:: images/launched_app.png + :alt: Launched application icon + :figclass: borderless + + Launched application icon + +Sometimes, when the application is running, instead of highlited icon, the icon +becomes "greyed out", giving a visual cue that the application is already open, +and cannot be launched again. + +.. figure:: images/grayed_out_icon.png + :alt: Launched application icon + :figclass: borderless + + Grayed-out application icon + +A docked icon that continues to show an elipsis and remains "full color" even +after an instance of the application is running indicates that the +application's settings have been modified to allow multiple launches from one +docked icon. To do this you must open the application and modify the +"application specific" settings in the `commands menu `_ of the +application to allow "shared application icons". + +Using the "launch" command in the "application icon menu" for the icon is +another way to start an application from the dock. + +From version 0.80.0 on, the dock can "steal" appicons. This feature has nothing +to do with Autoattract Icons. When you start an application from somewhere else +than either the clip or the dock (menu or terminal), and the appicon exists in +one of them (clip or dock), this appicon doesn't appear at the bottom of your +screen. The appicon existing in the clip or the dock "stole" it. As a result, +the appicon is the same as the one used to start the application from the clip +or the dock. + +Customizing +----------- + +Left-clicking and dragging an application icon to the dock adds this +application to the dock. Obviously, this means the application is running! + +*Miniwindows* (windows of minimized applications) cannot be docked. The small +titlebar on the miniwindow differentiates it from an application's icon. + +Dragging an icon off the dock removes the docked application. + +Configuring +----------- + +There is a dock menu for each icon. Right-clicking the icon displays the +"application icon menu". Select the "Settings..." option to configure the +application. + +.. figure:: images/docked_application_settings.png + :alt: Launched application icon + :figclass: borderless + + Launched application icon + +The application's *path* and its arguments, the command for middle-click +launch, and the icon employed can be changed in this panel. + +Shell commands such as redirection cannot be used in the command field. + +The desired icon must be in one of the directories displayed in the panel while +browsing. New directories can be added from the `Search path preferences +`_. + +A checkbox allows you to start the application when Window Maker is first +started. (Note: *You want to be careful with this*. If you have, for example, +your terminal emulator, your file manager, and your browser set to start when +Window Maker is started you'll get an open terminal, an open file manager and +an open browser *every time* you start a session! Normally you will only want +to start certain dockapps - "regular" applications like a terminal emulator or +browser can be started *after* your session is up and going.) + +From version 0.62.0 on, a checkbox can be used to prevent accidental +removal from the dock. + +From version 0.70.0 on, a new field has been added for middle-click launch. +Entering, for example, "firefox" into a docked application settings panel will +launch the Firefox browser. + +
    +
    +
    +
    Window Maker: Guided Tour - Dock
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/images/GNUstep.jpg b/docs/guidedtour/images/GNUstep.jpg new file mode 100644 index 0000000..e4d453e Binary files /dev/null and b/docs/guidedtour/images/GNUstep.jpg differ diff --git a/docs/guidedtour/images/LogoGNUstep.png b/docs/guidedtour/images/LogoGNUstep.png new file mode 100644 index 0000000..3e4ec30 Binary files /dev/null and b/docs/guidedtour/images/LogoGNUstep.png differ diff --git a/docs/guidedtour/images/apm.jpg b/docs/guidedtour/images/apm.jpg new file mode 100644 index 0000000..102b409 Binary files /dev/null and b/docs/guidedtour/images/apm.jpg differ diff --git a/docs/guidedtour/images/appearancemenu.png b/docs/guidedtour/images/appearancemenu.png new file mode 100644 index 0000000..a2a25ed Binary files /dev/null and b/docs/guidedtour/images/appearancemenu.png differ diff --git a/docs/guidedtour/images/clip.png b/docs/guidedtour/images/clip.png new file mode 100644 index 0000000..5645c65 Binary files /dev/null and b/docs/guidedtour/images/clip.png differ diff --git a/docs/guidedtour/images/dde.png b/docs/guidedtour/images/dde.png new file mode 100644 index 0000000..3b5f401 Binary files /dev/null and b/docs/guidedtour/images/dde.png differ diff --git a/docs/guidedtour/images/den.png b/docs/guidedtour/images/den.png new file mode 100644 index 0000000..6180633 Binary files /dev/null and b/docs/guidedtour/images/den.png differ diff --git a/docs/guidedtour/images/des.png b/docs/guidedtour/images/des.png new file mode 100644 index 0000000..23e5011 Binary files /dev/null and b/docs/guidedtour/images/des.png differ diff --git a/docs/guidedtour/images/dfr.png b/docs/guidedtour/images/dfr.png new file mode 100644 index 0000000..17cfb34 Binary files /dev/null and b/docs/guidedtour/images/dfr.png differ diff --git a/docs/guidedtour/images/dock_tile.png b/docs/guidedtour/images/dock_tile.png new file mode 100644 index 0000000..31860a7 Binary files /dev/null and b/docs/guidedtour/images/dock_tile.png differ diff --git a/docs/guidedtour/images/docked_application_settings.png b/docs/guidedtour/images/docked_application_settings.png new file mode 100644 index 0000000..b4155ac Binary files /dev/null and b/docs/guidedtour/images/docked_application_settings.png differ diff --git a/docs/guidedtour/images/dockm.jpg b/docs/guidedtour/images/dockm.jpg new file mode 100644 index 0000000..4a9da61 Binary files /dev/null and b/docs/guidedtour/images/dockm.jpg differ diff --git a/docs/guidedtour/images/gnustep_64.png b/docs/guidedtour/images/gnustep_64.png new file mode 100644 index 0000000..3831057 Binary files /dev/null and b/docs/guidedtour/images/gnustep_64.png differ diff --git a/docs/guidedtour/images/gnusteplogo.png b/docs/guidedtour/images/gnusteplogo.png new file mode 100644 index 0000000..7b9c86c Binary files /dev/null and b/docs/guidedtour/images/gnusteplogo.png differ diff --git a/docs/guidedtour/images/gnusteplogo2.png b/docs/guidedtour/images/gnusteplogo2.png new file mode 100644 index 0000000..c309fd8 Binary files /dev/null and b/docs/guidedtour/images/gnusteplogo2.png differ diff --git a/docs/guidedtour/images/grayed_out_icon.png b/docs/guidedtour/images/grayed_out_icon.png new file mode 100644 index 0000000..84abd95 Binary files /dev/null and b/docs/guidedtour/images/grayed_out_icon.png differ diff --git a/docs/guidedtour/images/greyedouticon.png b/docs/guidedtour/images/greyedouticon.png new file mode 100644 index 0000000..1389205 Binary files /dev/null and b/docs/guidedtour/images/greyedouticon.png differ diff --git a/docs/guidedtour/images/header.png b/docs/guidedtour/images/header.png new file mode 100644 index 0000000..01553d8 Binary files /dev/null and b/docs/guidedtour/images/header.png differ diff --git a/docs/guidedtour/images/launched_app.png b/docs/guidedtour/images/launched_app.png new file mode 100644 index 0000000..6bc298b Binary files /dev/null and b/docs/guidedtour/images/launched_app.png differ diff --git a/docs/guidedtour/images/menu_application_icon.png b/docs/guidedtour/images/menu_application_icon.png new file mode 100644 index 0000000..5074ba5 Binary files /dev/null and b/docs/guidedtour/images/menu_application_icon.png differ diff --git a/docs/guidedtour/images/menu_applications.png b/docs/guidedtour/images/menu_applications.png new file mode 100644 index 0000000..1ca8fff Binary files /dev/null and b/docs/guidedtour/images/menu_applications.png differ diff --git a/docs/guidedtour/images/menu_clip.png b/docs/guidedtour/images/menu_clip.png new file mode 100644 index 0000000..35d4b7c Binary files /dev/null and b/docs/guidedtour/images/menu_clip.png differ diff --git a/docs/guidedtour/images/menu_window_list.png b/docs/guidedtour/images/menu_window_list.png new file mode 100644 index 0000000..181c5bb Binary files /dev/null and b/docs/guidedtour/images/menu_window_list.png differ diff --git a/docs/guidedtour/images/menu_workspaces.png b/docs/guidedtour/images/menu_workspaces.png new file mode 100644 index 0000000..8cfc309 Binary files /dev/null and b/docs/guidedtour/images/menu_workspaces.png differ diff --git a/docs/guidedtour/images/panda.png b/docs/guidedtour/images/panda.png new file mode 100644 index 0000000..295bcbd Binary files /dev/null and b/docs/guidedtour/images/panda.png differ diff --git a/docs/guidedtour/images/panda2.png b/docs/guidedtour/images/panda2.png new file mode 100644 index 0000000..295bcbd Binary files /dev/null and b/docs/guidedtour/images/panda2.png differ diff --git a/docs/guidedtour/images/panda3.png b/docs/guidedtour/images/panda3.png new file mode 100644 index 0000000..3d13cb1 Binary files /dev/null and b/docs/guidedtour/images/panda3.png differ diff --git a/docs/guidedtour/images/prefs0.png b/docs/guidedtour/images/prefs0.png new file mode 100644 index 0000000..54bf689 Binary files /dev/null and b/docs/guidedtour/images/prefs0.png differ diff --git a/docs/guidedtour/images/prefs1.png b/docs/guidedtour/images/prefs1.png new file mode 100644 index 0000000..8109bee Binary files /dev/null and b/docs/guidedtour/images/prefs1.png differ diff --git a/docs/guidedtour/images/prefs10.png b/docs/guidedtour/images/prefs10.png new file mode 100644 index 0000000..7cc42fe Binary files /dev/null and b/docs/guidedtour/images/prefs10.png differ diff --git a/docs/guidedtour/images/prefs11.png b/docs/guidedtour/images/prefs11.png new file mode 100644 index 0000000..03eefb9 Binary files /dev/null and b/docs/guidedtour/images/prefs11.png differ diff --git a/docs/guidedtour/images/prefs12.png b/docs/guidedtour/images/prefs12.png new file mode 100644 index 0000000..d6b2504 Binary files /dev/null and b/docs/guidedtour/images/prefs12.png differ diff --git a/docs/guidedtour/images/prefs13.png b/docs/guidedtour/images/prefs13.png new file mode 100644 index 0000000..758618f Binary files /dev/null and b/docs/guidedtour/images/prefs13.png differ diff --git a/docs/guidedtour/images/prefs14.png b/docs/guidedtour/images/prefs14.png new file mode 100644 index 0000000..91950e4 Binary files /dev/null and b/docs/guidedtour/images/prefs14.png differ diff --git a/docs/guidedtour/images/prefs15.png b/docs/guidedtour/images/prefs15.png new file mode 100644 index 0000000..6453afb Binary files /dev/null and b/docs/guidedtour/images/prefs15.png differ diff --git a/docs/guidedtour/images/prefs2.png b/docs/guidedtour/images/prefs2.png new file mode 100644 index 0000000..6ce37f2 Binary files /dev/null and b/docs/guidedtour/images/prefs2.png differ diff --git a/docs/guidedtour/images/prefs3.png b/docs/guidedtour/images/prefs3.png new file mode 100644 index 0000000..2bdb119 Binary files /dev/null and b/docs/guidedtour/images/prefs3.png differ diff --git a/docs/guidedtour/images/prefs4.png b/docs/guidedtour/images/prefs4.png new file mode 100644 index 0000000..0ac1929 Binary files /dev/null and b/docs/guidedtour/images/prefs4.png differ diff --git a/docs/guidedtour/images/prefs5.png b/docs/guidedtour/images/prefs5.png new file mode 100644 index 0000000..7236f0e Binary files /dev/null and b/docs/guidedtour/images/prefs5.png differ diff --git a/docs/guidedtour/images/prefs6.png b/docs/guidedtour/images/prefs6.png new file mode 100644 index 0000000..85c2393 Binary files /dev/null and b/docs/guidedtour/images/prefs6.png differ diff --git a/docs/guidedtour/images/prefs7.png b/docs/guidedtour/images/prefs7.png new file mode 100644 index 0000000..cdd06fb Binary files /dev/null and b/docs/guidedtour/images/prefs7.png differ diff --git a/docs/guidedtour/images/prefs8.png b/docs/guidedtour/images/prefs8.png new file mode 100644 index 0000000..1c120b4 Binary files /dev/null and b/docs/guidedtour/images/prefs8.png differ diff --git a/docs/guidedtour/images/prefs9.png b/docs/guidedtour/images/prefs9.png new file mode 100644 index 0000000..f69b7f8 Binary files /dev/null and b/docs/guidedtour/images/prefs9.png differ diff --git a/docs/guidedtour/images/shadew.jpg b/docs/guidedtour/images/shadew.jpg new file mode 100644 index 0000000..c027ce9 Binary files /dev/null and b/docs/guidedtour/images/shadew.jpg differ diff --git a/docs/guidedtour/images/unlaunched_app.png b/docs/guidedtour/images/unlaunched_app.png new file mode 100644 index 0000000..3e7106b Binary files /dev/null and b/docs/guidedtour/images/unlaunched_app.png differ diff --git a/docs/guidedtour/images/wadvopt.jpg b/docs/guidedtour/images/wadvopt.jpg new file mode 100644 index 0000000..0456d58 Binary files /dev/null and b/docs/guidedtour/images/wadvopt.jpg differ diff --git a/docs/guidedtour/images/wapspec.jpg b/docs/guidedtour/images/wapspec.jpg new file mode 100644 index 0000000..9d1d197 Binary files /dev/null and b/docs/guidedtour/images/wapspec.jpg differ diff --git a/docs/guidedtour/images/watt.jpg b/docs/guidedtour/images/watt.jpg new file mode 100644 index 0000000..c1c2751 Binary files /dev/null and b/docs/guidedtour/images/watt.jpg differ diff --git a/docs/guidedtour/images/wicon.jpg b/docs/guidedtour/images/wicon.jpg new file mode 100644 index 0000000..9a7a6fc Binary files /dev/null and b/docs/guidedtour/images/wicon.jpg differ diff --git a/docs/guidedtour/images/wl.jpg b/docs/guidedtour/images/wl.jpg new file mode 100644 index 0000000..99e329e Binary files /dev/null and b/docs/guidedtour/images/wl.jpg differ diff --git a/docs/guidedtour/images/wmakercomponents.png b/docs/guidedtour/images/wmakercomponents.png new file mode 100644 index 0000000..aa219c5 Binary files /dev/null and b/docs/guidedtour/images/wmakercomponents.png differ diff --git a/docs/guidedtour/images/wmakerconf.png b/docs/guidedtour/images/wmakerconf.png new file mode 100644 index 0000000..37dc5c3 Binary files /dev/null and b/docs/guidedtour/images/wmakerconf.png differ diff --git a/docs/guidedtour/images/wprefs.jpg b/docs/guidedtour/images/wprefs.jpg new file mode 100644 index 0000000..b7472e2 Binary files /dev/null and b/docs/guidedtour/images/wprefs.jpg differ diff --git a/docs/guidedtour/images/wspec.jpg b/docs/guidedtour/images/wspec.jpg new file mode 100644 index 0000000..bfc6707 Binary files /dev/null and b/docs/guidedtour/images/wspec.jpg differ diff --git a/docs/guidedtour/index.html b/docs/guidedtour/index.html new file mode 100644 index 0000000..e6c9b47 --- /dev/null +++ b/docs/guidedtour/index.html @@ -0,0 +1,146 @@ + + + + Window Maker: Guided Tour - Index + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Window Maker

    + +
    +

    Guided Tour

    +images/gnusteplogo.png +
    +
    +

    Foreword

    +

    This tutorial is intended to help Window Maker users gain knowledge about the +many excellent features of this window manager. The official Users Guide is +worth reading. It can be reached from the Window Maker site. Other guides, tutorials and tips can be found at +various sites on the internet. An internet search for "Window Maker guide +how-to" might provide additional worthwhile information.

    +

    This guided tour is NOT supposed to be a README, INSTALL or FAQ. These are +worth reading, or more accurately, they should be considered COMPULSORY +reading.

    +

    The information in the guided tour is based upon Window Maker version 0.95.3. +Check your version by opening WPrefs.app (the Window Maker Preferences tool). +The version number is shown in the initial WPrefs window just below the "Window +Maker Preferences" title. You may also run the command "wmaker --version" in +a terminal (without the quotation marks). This command returns the installed +version number of Window Maker.

    +
    +
    +

    A special word of thanks

    +

    The original Window Maker Guided Tour site was created and maintained for many +years by Georges Tarbouriech. Where possible, I have retained his original +work - including the layout and structure of the pages, the descriptions of +Window Maker features, and even some of his original graphics. I want these +pages to be up-to-date, but I also want them to be (as much as possible) a +continuation of Georges' work. Thank you, Georges. (Having said that, +anything you find in error is without question my fault - so don't blame +Georges for any mistakes!) If you find an error, have a suggestion, or wish to +make a comment, you may contact me by email at +bnance&lt;atsigngoeshere&gt;uu.edu.

    +

    This tour will attempt to follow Window Maker development, but not +every update can be taken into account. In other words, this +tour can help you learn the basics, but does not pretend to provide all +of the detail or all of the latest information available in the +official README, INSTALL and FAQ documents provided by Window Maker +developers and maintainers.

    + +
    +
    +

    Archives

    +

    Two archives are available: HTML and pictures.

    + + +
    + +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Index
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/index.rst b/docs/guidedtour/index.rst new file mode 100644 index 0000000..01243a7 --- /dev/null +++ b/docs/guidedtour/index.rst @@ -0,0 +1,164 @@ + + + + Window Maker: Guided Tour - Index + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Window Maker +============ + +.. class:: center + +Guided Tour +----------- + +.. class:: screenshot center + +.. image:: images/gnusteplogo.png + :height: 100 + :width: 100 + + +Foreword +-------- + +This tutorial is intended to help Window Maker users gain knowledge about the +many excellent features of this window manager. The official Users Guide is +worth reading. It can be reached from the `Window Maker site `_. Other guides, tutorials and tips can be found at +various sites on the internet. An internet search for "Window Maker guide +how-to" might provide additional worthwhile information. + +This guided tour is NOT supposed to be a README, INSTALL or FAQ. These are +worth reading, or more accurately, they should be considered COMPULSORY +reading. + +The information in the guided tour is based upon Window Maker version 0.95.3. +Check your version by opening WPrefs.app (the Window Maker Preferences tool). +The version number is shown in the initial WPrefs window just below the "Window +Maker Preferences" title. You may also run the command "*wmaker --version*" in +a terminal (without the quotation marks). This command returns the installed +version number of Window Maker. + +A special word of thanks +------------------------ + +The original Window Maker Guided Tour site was created and maintained for many +years by Georges Tarbouriech. Where possible, I have retained his original +work - including the layout and structure of the pages, the descriptions of +Window Maker features, and even some of his original graphics. I want these +pages to be up-to-date, but I also want them to be (as much as possible) a +continuation of Georges' work. *Thank you, Georges*. (Having said that, +anything you find in error is without question my fault - so don't blame +Georges for any mistakes!) If you find an error, have a suggestion, or wish to +make a comment, you may contact me by email at +*bnance<atsigngoeshere>uu.edu*. + +This tour will attempt to follow Window Maker development, but not +every update can be taken into account. In other words, this +tour can help you learn the basics, but does not pretend to provide all +of the detail or all of the latest information available in the +official README, INSTALL and FAQ documents provided by Window Maker +developers and maintainers. + +Table of contents +~~~~~~~~~~~~~~~~~ + +.. class:: contents + +- `Preferences `_ +- `Windows `_ +- `Menus `_ +- `Dock `_ +- `Clip `_ +- `Backgrounds and themes `_ +- `Miscellaneous `_ + +Archives +-------- + +Two archives are available: HTML and pictures. + +.. TODO: figure out what's the status of those archives. + +- `tut.tar.gz (12K) HTML files `_ +- `img.tar.gz (613K) Picture files `_ + +Links of interest +----------------- + +- `Window Maker on Debian 6 (YouTube) + `_ by fourandnine +- `Arch Linux Window Maker Wiki Entry + `_ +- `Debian Stable (Squeeze) Package Listing + `_ +- `Window Maker on Mageia Linux (YouTube) + `_ by St. Louis Mageia Users' Group + +.. class:: center + + `Window Maker `_ + +
    +
    +
    +
    Window Maker: Guided Tour - Index
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/menu.html b/docs/guidedtour/menu.html new file mode 100644 index 0000000..a1c483e --- /dev/null +++ b/docs/guidedtour/menu.html @@ -0,0 +1,208 @@ + + + + Window Maker: Guided Tour - Menus + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + + + +
    +
    +
    +
    Window Maker: Guided Tour - Menus
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/menu.rst b/docs/guidedtour/menu.rst new file mode 100644 index 0000000..ebe14e2 --- /dev/null +++ b/docs/guidedtour/menu.rst @@ -0,0 +1,233 @@ + + + + Window Maker: Guided Tour - Menus + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Menus +===== + +.. contents:: + :depth: 1 + :backlinks: none + :local: + + +Menu list +--------- + +Different menus are available within Window Maker: + +- The root window menu or applications menu +- The window list menu +- The workspace menu +- The application icon menu + +Menus provide a list of applications or commands for execution. They can be +used to launch applications, to get information, to configure the workspace... + + +Menus are opened by right-clicking either in the "blank" area of the workspace +or in a window's titlebar or in docked icons. The *window list menu* is the +only one opened with the middle mouse button. With a two-button mouse, +pressing both buttons at once usually does the trick. A number of keyboard +shortcuts are provided. These shortcuts are indicated by the modifier key + +letter shown to the right of a menu item. + +The keyboard can be used to open and move through some of the menus. For +instance, the root menu can be opened using F12 (default setting). The Up and +Down arrow keys can then be used to navigate through the menu or the Left and +Right arrow keys to jump between parent menus and submenus. Hitting the *Enter* +key executes the selected item. The *Escape* key closes the menu or stops menu +traversal. + +Menus can be forced to remain open on the workspace by left-clicking the +titlebar. This creates a *close* button on the titlebar. + +Root window menu +---------------- + +.. figure:: images/menu_applications.png + :alt: Root window menu (applications menu) + :figclass: borderless + + Root window menu (applications menu) + +The root window menu or applications menu is opened by right-clicking on an +empty area of the workspace or by hitting the pre-defined keyboard shortcut +(default is F12). This menu launches applications, allows for the customization +of the workspace (backgrounds, themes...), and the management of other +workspace characteristics using standard X utilities (xprop, xfontsel, +xcmap...). + +The menu content is totally configurable, either using WPrefs.app or by editing +the plain text menu file. Instructions on how to configure one or the other can +be found in the WindowMaker directory of the distribution. To use WPrefs.app, +menus must be in property list format (plmenu). A script is available to +convert plain text menus to property list menus and it's called wm-oldmenu2new. + +Window list menu +---------------- + +.. figure:: images/menu_window_list.png + :alt: Window list menu + :figclass: borderless + + Window list menu + +Middle-clicking an empty area of the workspace opens the window list menu. With +a two-button mouse, clicking both buttons at once usually gives the same +result. F11 is the default keyboard shortcut to open the window list menu. + +This menu lists all windows - whether active or inactive - in every workspace. +The workspace containing each window is indicated at the right of the window +name. The current focused window is marked by a diamond sign to the left of the +window's name. Clicking any window in the list focuses and raises the +corresponding window and moves you to the workspace where it's located. + +Workspaces menu +--------------- + +.. figure:: images/menu_workspaces.png + :alt: Workspaces menu + :figclass: borderless + + Workspaces menu + +The workspaces menu is part of the root menu (applications menu). This item +has three options: *new*, *destroy last* and *last used*. + +The first option creates a new workspace and automatically switches you to it. + +The second option destroys the last workspace as soon as there are no windows +opened in it. + +The third option switches to last visited workspace. + +Each workspace has a corresponding item in this menu. The active workspace is +indicated by a diamond to the left of the workspace name or number. + +Clicking a workspace entry switches from the current workspace to the selected +workspace. + +To change the name of a workspace, first "stick" the menu by left-clicking the +menu titlebar. Then *Ctrl + click* the menu item to make it editable and type +in the new name. Hitting *Return* saves the new name, hitting *Escape* cancels +the operation. + +Key bindings allow movement from one workspace to another. Usually *Meta + +(number)*. The *Meta* key is normally the "*Alt*" key, while *(number)* +represents a number key that corresponds to the workspace number. For instance +1 can be the default workspace (workspace 1), 2 the second workspace and so on. +Thus, *Meta + 2* switches to workspace 2. + +These key bindings can be set (or changed) from the keyboard shortcut dialog in +WPrefs.app. + +Application icon menu +--------------------- + +.. figure:: images/menu_application_icon.png + :alt: Icon application menu + :figclass: borderless + + Icon application menu + +Clicking an icon in the dock with the right mouse button brings a menu for +modifying that icon's application. There are several options available in the +application icon menu for docked applications. Docked, but not running +applications will not have all options available - they will appear "greyed +out" in the menu. + +#. First option is a global Dock submenu, which have three items: + + #. *Normal* will not change dock behaviour - it can be covered by windows, + while clicking on any docked items will bring it up. + + #. *Auto raise & lower* is similar for the first options, although you don't + have to click on dock - it's enough to hover mouse pointer on visible + part of dock or it's items. + + #. *Keep on top* means that the dock will always be on "top" of opened + windows. + +#. *Add a drawer* will add special dockapp which can be used for aggregating + applications. See `Dock `_ for more details about drawers. + +#. "Launch" opens the application without double-clicking the icon. + +#. "Bring here" unhides the application in the current workspace. + +#. "Hide" hides the application or unhides it if already hidden. Unhiding opens + the application in the workspace where it is located. (This option may not + work if the application has it's own hiding menu option.) + +#. "Settings" allows the modification of application path and arguments, the + command line, and the icon used. + +#. "Kill" closes the application immediately and should only be used if + absolutely necessary. + +
    +
    +
    +
    Window Maker: Guided Tour - Menus
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/misc.html b/docs/guidedtour/misc.html new file mode 100644 index 0000000..e985c45 --- /dev/null +++ b/docs/guidedtour/misc.html @@ -0,0 +1,121 @@ + + + + Window Maker: Guided Tour - Miscellaneous + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Miscellaneous

    + +
    +

    Contents

    + +
    +
    +

    Localization

    +

    As soon as Window Maker is compiled with some options and gettext installed, it +is fully localizable. Check the INSTALL file.

    +

    However, localization of menus can be used without the LANG environment +variable set. Using pl menu allows to get menus in any available language +without setting this variable.

    +

    Why do such a "thing" instead of setting the localization the "right" way?

    +

    For some reasons users may want to keep the system default language instead of +defining a new localization. One of the main reason is that most software +doesn't exist in all languages.

    +
    +
    +

    Fonts

    +

    It's possible to change the fonts in Window Maker, editing the WindowMaker file +or the WMGLOBAL file in ~/GNUstep/Defaults.

    +

    Once again the INSTALL file gives instructions on how to do it.

    +

    The specific file to edit varies according to the fonts to be changed.

    +

    The script wsetfont is provided to do the job.

    +
    +
    +

    Utilities

    +

    Window Maker provides the user with some useful utilities.

    +

    There is a README file concerning these scripts in the util directory.

    +

    Almost each script has it's own man page recommended reading.

    +

    These utilities mainly concern the GUI: icons, styles, fonts, menus, +backgrounds.

    +

    A few of them deserve special interest as many users don't seem to know about +them.

    +

    The wdwrite script, for instance, writes data into the configuration files.

    +

    The setstyle (or getstyle) scripts are used to manage themes.

    +

    Wxcopy and wxpaste allows copying and pasting using the X cutbuffer.

    +

    The first one makes part of the default applications menu, in the selection +item.

    +

    For KDE users, wkdemenu.pl is worth using.

    +

    From version 0.63.0 on, a new utility is available : wmagnify. It allows +magnification of the area under the mouse pointer.

    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Miscellaneous
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/misc.rst b/docs/guidedtour/misc.rst new file mode 100644 index 0000000..02d92f8 --- /dev/null +++ b/docs/guidedtour/misc.rst @@ -0,0 +1,133 @@ + + + + Window Maker: Guided Tour - Miscellaneous + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Miscellaneous +============= + +.. contents:: + :backlinks: none + + +Localization +------------ + +As soon as Window Maker is compiled with some options and gettext installed, it +is fully localizable. Check the INSTALL file. + +However, localization of menus can be used without the LANG environment +variable set. Using pl menu allows to get menus in any available language +without setting this variable. + +Why do such a "thing" instead of setting the localization the "right" way? + +For some reasons users may want to keep the system default language instead of +defining a new localization. One of the main reason is that most software +doesn't exist in all languages. + +Fonts +----- + +It's possible to change the fonts in Window Maker, editing the WindowMaker file +or the WMGLOBAL file in ``~/GNUstep/Defaults``. + +Once again the INSTALL file gives instructions on how to do it. + +The specific file to edit varies according to the fonts to be changed. + +The script *wsetfont* is provided to do the job. + +Utilities +--------- + +Window Maker provides the user with some useful utilities. + +There is a README file concerning these scripts in the util directory. + +Almost each script has it's own man page recommended reading. + +These utilities mainly concern the GUI: icons, styles, fonts, menus, +backgrounds. + +A few of them deserve special interest as many users don't seem to know about +them. + +The *wdwrite* script, for instance, writes data into the configuration files. + +The *setstyle* (or *getstyle*) scripts are used to manage themes. + +*Wxcopy* and *wxpaste* allows copying and pasting using the X cutbuffer. + +The first one makes part of the default applications menu, in the selection +item. + +For KDE users, wkdemenu.pl is worth using. + +From version 0.63.0 on, a new utility is available : *wmagnify*. It allows +magnification of the area under the mouse pointer. + +
    +
    +
    +
    Window Maker: Guided Tour - Miscellaneous
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/prefs.html b/docs/guidedtour/prefs.html new file mode 100644 index 0000000..ed27c08 --- /dev/null +++ b/docs/guidedtour/prefs.html @@ -0,0 +1,524 @@ + + + + Window Maker: Guided Tour - Prefs + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Preferences

    + +
    +images/wprefs.jpg +
    +
    +

    WPrefs.app

    +

    WPrefs.app is the heart of the configuration process in Window Maker.

    +

    Upon installing Window Maker and running it for the first time, the WPrefs +application is available under dock icon by default:

    +
    +GNUstep Logo +
    +

    although, depending on your distibution, location, menu entry or icon may be +different. Ususally Linux distributions position WPrefs as the second or third +icon in the Dock column by default, just above or below the terminal icon.

    +

    Double-clicking on this icon opens the WPrefs.app window. Across the top of +the window there is a row of icons, each one corresponding to a group of +settings options. There is a checkbox for balloon help on the bottom left of +the WPrefs.app window. Most of the following is taken directly from the content +of the ballon help dialogs.

    +
    +WPrefs.app after launching +

    WPrefs.app after launching

    +
    + +
    +

    Window focus

    +
    +WPrefs.app window focus controls +

    WPrefs.app window focus controls

    +
    +

    The first icon from the left-hand side controls the way windows get +their focus (how they are activated).

    +
      +
    • +

      Input focus mode (two choices are available):

      +
        +
      • Manual - click on the window to set keyboard input focus.

      • +
      • Auto - set keyboard input focus to the window under the mouse pointer.

      • +
      +
    • +
    • +

      Install colormap in the window

      +

      Select either (a) install the colormap in the window that has the input focus +or (b) that is under the mouse pointer.

      +
    • +
    • +

      Automatic window raise delay

      +

      Setting the delay (in msec) for automatic window raising

      +
    • +
    • +

      Checkboxes

      +

      The topmost check box prevents applications from receiving the focusing +mouse-click (I don't know why you would use this, but some people obviously +find it useful). The middle checkbox allows you to choose whether +newly-opened application windows automatically receive the focus, or must be +clicked to gain focus. The bottom allows you to bring window up while using +keyboard.

      +
    • +
    +
    +
    +

    Window handling

    +
    +WPrefs.app window handling preferences +

    WPrefs.app window handling preferences

    +
    +

    Clicking the second icon allows you to select the window handling options. +Clicking on this icon opens a panel allowing you to define the default +placement and properties of windows in the workspace.

    +
      +
    • +

      Window placement

      +

      You can use the sliders around the screen representation to modify the +original placement. The gadget tells Window Maker how to order windows on the +screen: Random, Manual, Cascade or Smart. Automatic is the default.

      +
    • +
    • +

      Dragging a maximized window

      +

      Set the behaviour of maximized window when click on titlebar and drag with +the mouse. Possible actions can be set for a window to:

      +
        +
      • changes its position

      • +
      • restores its unmaximized geometry

      • +
      • considers the window now unmaximized

      • +
      • does not move the window

      • +
      +
    • +
    • +

      Edge resistance

      +

      To set the edge resistance and whether it resists or attracts windows. +According to the selection, windows resist or attract when moved against +other windows or the edges of the screen. The slider defines the threshold. +Some applications' title bars may disappear at the top of the screen, with +the window being too high for the screen area. Setting the edge resistance to +"0" may solve this problem

      +
    • +
    • +

      Mod+Wheel

      +

      You can define, how many pixels window should increment/decrement by using +modifer keys + mouse wheel. By default, CTRL+wheel will change window size +horizontally, while SUPER+wheel vertically.

      +
    • +
    + +
      +
    • +

      When maximizing

      +

      This option allows the window to cover (or not) icons or the dock when +maximizing.

      +
    • +
    • +

      Opaque move/resize

      +

      Clicking on opaque move causes windows to be moved with their contents +visible. If not checked, only the frame is displayed during the move. Opaque +resize makes window contents visible during resizing, otherwise only the +frame is displayed.

      +
    • +
    +
    + +
    +

    Icon

    +
    +WPrefs.app icon preferences +

    WPrefs.app icon preferences

    +
    +

    Set icon or miniwindow handling options.

    +
      +
    • +

      Icon positioning

      +

      This area defines the initial placement of miniwindows or icons will be +displayed: bottom, top, right, left...

      +
    • +
    • +

      Icon size

      +

      Selects the size of the icons shown when a window is miniaturized and for +application icons. Dockapp developers usually assume that tiles will be 64x64 +pixels, so it's probably a good idea to leave it at that size, unless you +know you won't be using dockapps.

      +
    • +
    • +

      Mini-Previews for Icons

      +

      Allows to display content of the window, while hovering the mouse on +minimised application icon. The slider allows to set the size of the preview.

      +
    • +
    • +

      Iconification animation

      +

      When an application's window is miniaturized, miniaturization animation +style offers four animation choices.

      +
        +
      • Shrinking/Zooming,

      • +
      • Spinning/Twisting,

      • +
      • 3D Flipping, or

      • +
      • None

      • +
      +
    • +
    • +

      Checkboxes

      +

      The topmost box enables/disables auto-arrangement of icons. The middle box +places miniwindows for opened applications on all existing workspaces +(omnipresent). The bottom box, allows to use single click for minimized or +docked icons isntead of double clicking.

      +
    • +
    +
    +
    +

    Ergonomy

    +
    +WPrefs.app ergonomic settings +

    WPrefs.app ergonomic settings

    +
    +

    Various types of information are defined in this panel.

    +
      +
    • +

      Size display

      +

      Window Maker provides a box that informs you about the size of a window +during resizing. You may choose to have this display (a) in the center of the +screen, (b) the center of the screen, (c) the center of the resized +window, (d) the side and bottom of the window as a technical drawing-like +size display or (e) not at all.

      +
    • +
    • +

      Position display

      +

      Same information as above but regarding the screen placement of a +window while moving (no technical drawing-like option).

      +
    • +
    • +

      Appicon bouncing

      +

      You can set the behaviour of AppIcons bounce here.

      +
    • +
    • +

      Show balloon text for

      +

      Selecting checkboxes displays balloon text for: incomplete window titles, +miniwindow titles, application and dock icons, or internal help. This may be +useful for new users but many people find having help balloons pop out all +over the desktop gets annoying quickly. I use the incomplete window title +and the miniwindow title options and none of the others.

      +
    • +
    • +

      Workspace border

      +

      You can set a small border for the workspace. This allows you to easily +access the clip (for instance) when windows are maximized.

      +
    • +
    + +
    +
    +

    Search Path

    +
    +WPrefs.app icon and pixmap search path settings +

    WPrefs.app icon and pixmap search path settings

    +
    +

    This panel is used to add or delete directory paths to search for icons and +pixmaps. These paths are used in the settings dialogs for dockapps and docked +application icons, so having a good, complete set of defined paths is +important. This may require some manual intervention, especially upon initial +setup, since some default paths will not be present on your system, while +others not predefined will be present. Use the add and remove dialogs to +configure according to what is actually available.

    +
    +
    +

    Dock

    +
    +WPrefs.app dock preference settings +

    WPrefs.app dock preference settings

    +
    +

    In this panel you can fine-tune Dock/Clip/Drawer behaviour.

    +
      +
    • Clip autocollapsing delays and Clip autoraising delays lets you choose +delays for expansion, collapsing, raising and lowering the Clip

    • +
    • +

      Dock/Clip/Drawer

      +

      First icon enables/disables thr Dock, vertical bar for your appicons and +applications. Second allows to enables/disables Clip, the tile with the +paperclip icon. Last one enables/disables Drawer - a special dockapp for +keeping the applications icons horizontally.

      +
    • +
    +
    +
    +

    Workspace

    +
    +WPrefs.app workspace preference settings +

    WPrefs.app workspace preference settings

    +
    +

    This panel defines navigation features within the workspace.

    +
      +
    • +

      Workspace navigation

      +

      Selecting the first checkbox allows switching to the first workspace when +switching past the last workspace and vice-versa. Selecting the second +checkbox allows windows to be dragged from one workspace to another. +Selecting the third checkbox cause a new workspace to be created when windows +are dragged off the last existing workspace. A selection menu allows you to +define where the workspace name is displayed each time you move from one +workspace to another (or not to display the workspace name at all).

      +
    • +
    +
    +
    +

    Other

    +
    +WPrefs.app other workspace configuration settings +

    WPrefs.app other workspace configuration settings

    +
    +

    This panel sets icon slide speed, shade animation speed, smooth scaling and +titlebar control (button) style. Animations and sound are also defined here.

    +
      +
    • +

      Icon slide speed

      +

      Selecting the left icon gives the slowest result, selecting the right one +gives the fastest.

      +
    • +
    • +

      Shade animation speed

      +

      Same as icon slide

      +
    • +
    • +

      Titlebar style

      +

      To choose a more or less "NeXTish" titlebar. (The top version is "newer," +while the bottom left is ca. 1990 and the bottom right is ca. 1988.)

      +
    • +
    • +

      Animations

      +

      Selecting the animations icon enables animations for window miniaturization, +shading and so on. Selecting the superfluous icon enables "ghosting" of dock +(when moved - especially when moved from one side of the screen to the other) +and explosion animation for icons you remove from the dock.

      +
    • +
    • +

      Smooth scaling

      +

      If selected, neutralizes pixelization effect on background images. The +side-effect is to slow down background image loading.

      +
    • +
    • +

      Dithering colormap for 8bpp

      +

      For 8-bit displays (anyone still have one of these?) this enables dithering +and changes the number of colors to reserve either for applications or for +Window Maker. The Default setting almost always gives the best result.

      +
    • +
    +
    +
    +

    Applications menu

    +
    +WPrefs.app application menu configuration +

    WPrefs.app application menu configuration

    +
    +

    In this panel the applications menu and the commands to launch each application +can be defined. This panel has been changed in version 0.63.and later. It now +displays the actual menu thus allowing direct editing. This can be done only if +the menu is in property list format. Menus in plain text format can't be +edited in WPrefs. Check the README file in the Window Maker directory on how to +use one or the other.

    +
    +
    +

    Keyboard shortcut

    +
    +WPrefs.app keyboard shortcut settings +

    WPrefs.app keyboard shortcut settings

    +
    +

    Many actions in Window Maker have predefined keyboard shortcuts. These actions +mainly concern windows and workspaces. Modifying, adding or removing shortcuts +can be done in this panel. Defining a shortcut can be done interactively, +capturing the key combination.

    +
    +
    +

    Mouse

    +
    +WPrefs.app mouse configuration +

    WPrefs.app mouse configuration

    +
    +

    The mouse grab modifier represents the keyboard shortcut to use for actions +like dragging windows with the mouse or clicking inside the window. Mod1 (Alt) +is the default.

    +

    This panel sets the mouse speed and double-click delay. Mouse button bindings +can be defined and can be disabled or enabled.

    +

    The default setting binds the right mouse button to the applications menu, +middle button to the window list menu and left button to window selection +(focus). Of course, with a two button mouse, the middle button binding will not +work. However, on some OSes pressing both buttons at once gives the same result +as the one obtained with middle button.

    +

    Starting from version 0.65 on, the mouse wheel can be used to switch +workspaces. This is not default behavior and must be enabled here.

    +

    If mouse have more than 3 buttons and/or tilt, they can be bound to some +actions.

    +
    +
    +

    Appearance

    +
    +WPrefs.app appearance settings +

    WPrefs.app appearance settings

    +
    +

    In this panel, everything related to the appearance of the GUI (except the +background color or image) can be configured. Windows, menus and icons can have +their own background "texture," meaning color gradients of various types can be +configured here. Texture, color, menu style, and title alignment can be fully +customized.

    +
    +
    +

    Font configuration

    +
    +Wprefs.app font configuration options +

    Wprefs.app font configuration options

    +
    +

    This panel allows you to configure fonts for the window and menu titlebars, for +the menu body text, and for the icon and clip text. In addition, a font may be +defined for desktop messages.

    +
    +
    +

    Expert user

    +
    +WPrefs.app expert user settings +

    WPrefs.app expert user settings

    +
    +

    Using this panel implies some knowledge. Many options are available. Among +these are:

    +
      +
    • Disabling miniwindows (useful when using with KDE and GNOME)

    • +
    • Using (or not) xset

    • +
    • Saving session on exit (highly recommended!)

    • +
    • Using SaveUnder in different objects

    • +
    • Using Win style cycling (added from version 0.63.0)

    • +
    • Disabling confirmation panel for the kill command

    • +
    • Disabling cycling colors highlighting of icons

    • +
    • Multi head related options

    • +
    • Screen edge snapping

    • +
    +
    +
    +

    Editing the configuration file

    +

    If needed, the defaults configuration file found in +$(HOME)/GNUstep/Defaults/WindowMaker can be edited by hand. This file is a +database with a property list syntax. When selecting an option in WPrefs.app, +it's written down into this file. When modifying this defaults file, it's very +important to follow the syntax.

    +
    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Prefs
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/prefs.rst b/docs/guidedtour/prefs.rst new file mode 100644 index 0000000..85f10d7 --- /dev/null +++ b/docs/guidedtour/prefs.rst @@ -0,0 +1,548 @@ + + + + Window Maker: Guided Tour - Prefs + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + =========== +Preferences +=========== + +.. figure:: images/wprefs.jpg + :figclass: borderless + :height: 64 + :width: 64 + +WPrefs.app +---------- + +WPrefs.app is the heart of the configuration process in Window Maker. + +Upon installing Window Maker and running it for the first time, the WPrefs +application is available under dock icon by default: + +.. figure:: images/dock_tile.png + :figclass: borderless + :alt: GNUstep Logo + + +although, depending on your distibution, location, menu entry or icon may be +different. Ususally Linux distributions position WPrefs as the second or third +icon in the Dock column by default, just above or below the terminal icon. + +Double-clicking on this icon opens the WPrefs.app window. Across the top of +the window there is a row of icons, each one corresponding to a group of +settings options. There is a checkbox for balloon help on the bottom left of +the WPrefs.app window. Most of the following is taken directly from the content +of the ballon help dialogs. + +.. figure:: images/prefs0.png + :alt: WPrefs.app after launching + :figclass: borderless + + WPrefs.app after launching + +.. contents:: Available preference settings + :backlinks: none + :local: + +Window focus +~~~~~~~~~~~~ + +.. figure:: images/prefs1.png + :alt: WPrefs.app window focus controls + :figclass: borderless + + WPrefs.app window focus controls + +The first icon from the left-hand side controls the way windows get +their focus (how they are activated). + +- *Input focus mode* (two choices are available): + + - **Manual** - click on the window to set keyboard input focus. + - **Auto** - set keyboard input focus to the window under the mouse pointer. + +- *Install colormap in the window* + + Select either (a) install the colormap in the window that has the input focus + or (b) that is under the mouse pointer. + +- *Automatic window raise delay* + + Setting the delay (in msec) for automatic window raising + +- *Checkboxes* + + The topmost check box prevents applications from receiving the focusing + mouse-click (I don't know why you would use this, but some people obviously + find it useful). The middle checkbox allows you to choose whether + newly-opened application windows automatically receive the focus, or must be + clicked to gain focus. The bottom allows you to bring window up while using + keyboard. + +Window handling +~~~~~~~~~~~~~~~ + +.. figure:: images/prefs2.png + :alt: WPrefs.app window handling preferences + :figclass: borderless + + WPrefs.app window handling preferences + +Clicking the second icon allows you to select the window handling options. +Clicking on this icon opens a panel allowing you to define the default +placement and properties of windows in the workspace. + +- *Window placement* + + You can use the sliders around the screen representation to modify the + original placement. The gadget tells Window Maker how to order windows on the + screen: *Random*, *Manual*, *Cascade* or *Smart*. *Automatic* is the default. + +- *Dragging a maximized window* + + Set the behaviour of maximized window when click on titlebar and drag with + the mouse. Possible actions can be set for a window to: + + - *changes its position* + - *restores its unmaximized geometry* + - *considers the window now unmaximized* + - *does not move the window* + +- *Edge resistance* + + To set the edge resistance and whether it resists or attracts windows. + According to the selection, windows resist or attract when moved against + other windows or the edges of the screen. The slider defines the threshold. + Some applications' title bars may disappear at the top of the screen, with + the window being too high for the screen area. Setting the edge resistance to + "0" may solve this problem + +- *Mod+Wheel* + + You can define, how many pixels window should increment/decrement by using + modifer keys + mouse wheel. By default, CTRL+wheel will change window size + horizontally, while SUPER+wheel vertically. + +.. + 1. *Open dialogs in the same workspace as their owners* + + Obviously, whether to force dialog boxes "spawned" by an application to open + in same workspace as their owners. + +- *When maximizing* + + This option allows the window to cover (or not) icons or the dock when + maximizing. + +- *Opaque move/resize* + + Clicking on *opaque move* causes windows to be moved with their contents + visible. If not checked, only the frame is displayed during the move. *Opaque + resize* makes window contents visible during resizing, otherwise only the + frame is displayed. + +Menu +~~~~ + +.. figure:: images/prefs3.png + :figclass: borderless + :alt: WPrefs.app menu preferences + + WPrefs.app menu preferences + +This panel allows you to set menu scrolling speed and submenu alignment with +the parent menu. In addition, two checkboxes are provided: + +- The topmost box forces submenus to open inside the screen instead of + scrolling when they would otherwise be off-screen. +- The middle box allows submenus to open off-screen, but causes off-screen + menus to scroll when the mouse pointer is moved over them. This setting is + also of value if you "tear off" a menu and leave it positioned on the + desktop. In that case, you might wish to "park" the menu off-screen (with + only the titlebar showing, for example) and have it reappear when you mouse + over it. This is convenient in some workflows, as when you have multiple + applications open and you are using the window list menu to switch between + applications. +- The bottom box allows you to assign Vim-like keybindings for the selection + of menu items. + +Icon +~~~~ + +.. figure:: images/prefs4.png + :figclass: borderless + :alt: WPrefs.app icon preferences + + WPrefs.app icon preferences + +Set icon or miniwindow handling options. + +- *Icon positioning* + + This area defines the initial placement of miniwindows or icons will be + displayed: *bottom, top, right, left*... + +- *Icon size* + + Selects the size of the icons shown when a window is miniaturized and for + application icons. Dockapp developers usually assume that tiles will be 64x64 + pixels, so it's probably a good idea to leave it at that size, unless you + know you won't be using dockapps. + +- *Mini-Previews for Icons* + + Allows to display content of the window, while hovering the mouse on + minimised application icon. The slider allows to set the size of the preview. + +- *Iconification animation* + + When an application's window is miniaturized, *miniaturization animation + style* offers four animation choices. + + - Shrinking/Zooming, + - Spinning/Twisting, + - 3D Flipping, or + - None + +- *Checkboxes* + + The topmost box enables/disables auto-arrangement of icons. The middle box + places miniwindows for opened applications on all existing workspaces + (*omnipresent*). The bottom box, allows to use single click for minimized or + docked icons isntead of double clicking. + +Ergonomy +~~~~~~~~ + +.. figure:: images/prefs5.png + :figclass: borderless + :alt: WPrefs.app ergonomic settings + + WPrefs.app ergonomic settings + +Various types of information are defined in this panel. + +- *Size display* + + Window Maker provides a box that informs you about the size of a window + during resizing. You may choose to have this display (a) in the center of the + screen, (b) the center of the screen, (c) the center of the resized + window, (d) the side and bottom of the window as a technical drawing-like + size display or (e) not at all. + +- *Position display* + + Same information as above but regarding the screen placement of a + window while moving (no technical drawing-like option). + +- *Appicon bouncing* + + You can set the behaviour of AppIcons bounce here. + +- *Show balloon text for* + + Selecting checkboxes displays balloon text for: incomplete window titles, + miniwindow titles, application and dock icons, or internal help. This may be + useful for new users but many people find having help balloons pop out all + over the desktop gets annoying quickly. I use the *incomplete window title* + and the *miniwindow title* options and none of the others. + +- *Workspace border* + + You can set a small border for the workspace. This allows you to easily + access the clip (for instance) when windows are maximized. + +.. + - *Checkbox* + + The top check box, if selected, raises a window when switching focus with the + keyboard. The bottom box enables a keyboard language selection button on + window titlebars (must have multiple keyboard maps/locales defined - this is + handy if you are working in multiple languages in applications such as word + processors, for example). + +Search Path +~~~~~~~~~~~ + +.. figure:: images/prefs6.png + :figclass: borderless + :alt: WPrefs.app icon and pixmap search path settings + + WPrefs.app icon and pixmap search path settings + +This panel is used to add or delete directory paths to search for icons and +pixmaps. These paths are used in the *settings* dialogs for dockapps and docked +application icons, so having a good, complete set of defined paths is +important. This may require some manual intervention, especially upon initial +setup, since some default paths will not be present on your system, while +others not predefined will be present. Use the *add* and *remove* dialogs to +configure according to what is actually available. + +Dock +~~~~ + +.. figure:: images/prefs7.png + :figclass: borderless + :alt: WPrefs.app dock preference settings + + WPrefs.app dock preference settings + +In this panel you can fine-tune Dock/Clip/Drawer behaviour. + +- *Clip autocollapsing delays* and *Clip autoraising delays* lets you choose + delays for expansion, collapsing, raising and lowering the Clip + +- *Dock/Clip/Drawer* + + First icon enables/disables thr Dock, vertical bar for your appicons and + applications. Second allows to enables/disables Clip, the tile with the + paperclip icon. Last one enables/disables Drawer - a special dockapp for + keeping the applications icons horizontally. + +Workspace +~~~~~~~~~ + +.. figure:: images/prefs8.png + :figclass: borderless + :alt: WPrefs.app workspace preference settings + + WPrefs.app workspace preference settings + +This panel defines navigation features within the workspace. + +- *Workspace navigation* + + Selecting the first checkbox allows switching to the first workspace when + switching past the last workspace and vice-versa. Selecting the second + checkbox allows windows to be dragged from one workspace to another. + Selecting the third checkbox cause a new workspace to be created when windows + are dragged off the last existing workspace. A selection menu allows you to + define where the workspace name is displayed each time you move from one + workspace to another (or not to display the workspace name at all). + +Other +~~~~~ + +.. figure:: images/prefs9.png + :figclass: borderless + :alt: WPrefs.app other workspace configuration settings + + WPrefs.app other workspace configuration settings + +This panel sets icon slide speed, shade animation speed, smooth scaling and +titlebar control (button) style. Animations and sound are also defined here. + +- *Icon slide speed* + + Selecting the left icon gives the slowest result, selecting the right one + gives the fastest. + +- *Shade animation speed* + + Same as icon slide + +- *Titlebar style* + + To choose a more or less "NeXTish" titlebar. (The top version is "newer," + while the bottom left is ca. 1990 and the bottom right is ca. 1988.) + +- *Animations* + + Selecting the animations icon enables animations for window miniaturization, + shading and so on. Selecting the superfluous icon enables "ghosting" of dock + (when moved - especially when moved from one side of the screen to the other) + and explosion animation for icons you remove from the dock. + +- *Smooth scaling* + + If selected, neutralizes pixelization effect on background images. The + side-effect is to slow down background image loading. + +- *Dithering colormap for 8bpp* + + For 8-bit displays (anyone still have one of these?) this enables dithering + and changes the number of colors to reserve either for applications or for + Window Maker. The Default setting almost always gives the best result. + +Applications menu +~~~~~~~~~~~~~~~~~ + +.. figure:: images/prefs10.png + :figclass: borderless + :alt: WPrefs.app application menu configuration + + WPrefs.app application menu configuration + +In this panel the applications menu and the commands to launch each application +can be defined. This panel has been changed in version 0.63.and later. It now +displays the actual menu thus allowing direct editing. This can be done only if +the menu is in property list format. Menus in plain text format can't be +edited in WPrefs. Check the README file in the Window Maker directory on how to +use one or the other. + +Keyboard shortcut +~~~~~~~~~~~~~~~~~ + +.. figure:: images/prefs11.png + :figclass: borderless + :alt: WPrefs.app keyboard shortcut settings + + WPrefs.app keyboard shortcut settings + +Many actions in Window Maker have predefined keyboard shortcuts. These actions +mainly concern windows and workspaces. Modifying, adding or removing shortcuts +can be done in this panel. Defining a shortcut can be done interactively, +capturing the key combination. + +Mouse +~~~~~ + +.. figure:: images/prefs12.png + :figclass: borderless + :alt: WPrefs.app mouse configuration + + WPrefs.app mouse configuration + +The mouse grab modifier represents the keyboard shortcut to use for actions +like dragging windows with the mouse or clicking inside the window. Mod1 (Alt) +is the default. + +This panel sets the mouse speed and double-click delay. Mouse button bindings +can be defined and can be disabled or enabled. + +The default setting binds the right mouse button to the applications menu, +middle button to the window list menu and left button to window selection +(focus). Of course, with a two button mouse, the middle button binding will not +work. However, on some OSes pressing both buttons at once gives the same result +as the one obtained with middle button. + +Starting from version 0.65 on, the mouse wheel can be used to switch +workspaces. This is not default behavior and must be enabled here. + +If mouse have more than 3 buttons and/or tilt, they can be bound to some +actions. + +Appearance +~~~~~~~~~~ + +.. figure:: images/prefs13.png + :figclass: borderless + :alt: WPrefs.app appearance settings + + WPrefs.app appearance settings + +In this panel, everything related to the appearance of the GUI (except the +background color or image) can be configured. Windows, menus and icons can have +their own background "texture," meaning color gradients of various types can be +configured here. Texture, color, menu style, and title alignment can be fully +customized. + +Font configuration +~~~~~~~~~~~~~~~~~~ + +.. figure:: images/prefs14.png + :figclass: borderless + :alt: Wprefs.app font configuration options + + Wprefs.app font configuration options + +This panel allows you to configure fonts for the window and menu titlebars, for +the menu body text, and for the icon and clip text. In addition, a font may be +defined for desktop messages. + +Expert user +~~~~~~~~~~~ + +.. figure:: images/prefs15.png + :figclass: borderless + :alt: WPrefs.app expert user settings + + WPrefs.app expert user settings + +Using this panel implies some knowledge. Many options are available. Among +these are: + +- Disabling miniwindows (useful when using with KDE and GNOME) +- Using (or not) xset +- Saving session on exit (highly recommended!) +- Using SaveUnder in different objects +- Using Win style cycling (added from version 0.63.0) +- Disabling confirmation panel for the kill command +- Disabling cycling colors highlighting of icons +- Multi head related options +- Screen edge snapping + +Editing the configuration file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If needed, the defaults configuration file found in +$(HOME)/GNUstep/Defaults/WindowMaker can be edited by hand. This file is a +database with a property list syntax. When selecting an option in WPrefs.app, +it's written down into this file. When modifying this defaults file, it's very +important to follow the syntax. + +
    +
    +
    +
    Window Maker: Guided Tour - Prefs
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/title.css b/docs/guidedtour/title.css new file mode 100644 index 0000000..928d320 --- /dev/null +++ b/docs/guidedtour/title.css @@ -0,0 +1,106 @@ +body { + color: #FFF; + font-size: 14pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + background-color: #505075; + border-size: 2px; + margin-top: 0px; + margin-right: 12px; + margin-bottom: 0px; + margin-left: 12px; +} + +.hpadding { + color: #483d8b; + font-weight: normal; + font-size: 14px; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + padding: 0px 10px +} + +.textpadding { + color: white; + font-size: 14px; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + line-height: normal; + margin: 0; + padding: 0 10px +} + +a { + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; +} + +table .inner { + margin-left: 1em; + width: 90%; +} + +h1 { + color: #ebdeff; + font-size: 20pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-style: italic; + font-weight: bold; + line-height: 22pt +} + +h2 { + color: #ebdeff; + font-size: 18pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-style: italic; + line-height: 20pt +} + +h3 { + color: #e8fd00; + font-size: 14pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-style: normal; + line-height: 16pt +} + +h4 { + color: #FFF; + font-size: 12pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-style: normal; + font-weight: bolder; + line-height: 12pt +} + +.caption { + font-size: 11pt; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif +} + +a:hover, a:focus { + text-decoration: underline; + font-style: italic; + color: #CCC; +} + +a:link, a:visited, a:active { + text-decoration: underline; + color: #FFF; +} + +img { + border: none; +} + +#dock { + position: absolute; top: 100px; left: 5px; +} + +#inhalt { + position: absolute; top: 40px; left: 100px; + min-width: 800px; +} +div.screenshot { + height: 250px; + border: none; + float: left; + margin: 5px; + } diff --git a/docs/guidedtour/win.html b/docs/guidedtour/win.html new file mode 100644 index 0000000..d758be7 --- /dev/null +++ b/docs/guidedtour/win.html @@ -0,0 +1,349 @@ + + + + Window Maker: Guided Tour - Windows + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Windows

    + + +
    +

    Description

    +

    General layout of a window:

    +
      +
    • Titlebar: Gives the name of the application, document or window. It's color +(usually) indicates the focus state (active or inactive window). I say +(usually) because some styles and themes do not provide different colors for +focused or unfocused windows - although this is rare (and, I might add, +cruel!).

    • +
    • Miniaturize button: Clicking on the left button of the titlebar iconifies +the window.

    • +
    • Close button: Clicking on the right button of the titlebar closes the +window or kills the application.

    • +
    • Resizebar: The bottom part of the window. Dragging the resizebar with the +mouse resizes the window.

    • +
    • Client area: The window content. It can be an application, some text, a +picture...

    • +
    +
    +
    +

    Focusing

    +

    A window can be in two states: focused or unfocused. The focused window is the +active window, the one receiving keystrokes. It's titlebar has a differentiated +color (usually!). Dialog windows or panels opened from a main window, +automatically get the focus. As soon as they are closed, the main window gets +the focus back.

    +

    Two modes are available to focus a window:

    +
      +
    • Click to focus mode: clicking on any part of the window activates it.

    • +
    • Focus follows mouse mode: moving the mouse pointer over the window +activates it.

    • +
    +
    +
    +

    Reordering

    +

    Windows can overlap other windows, in which case some will hide all or part of +others. Clicking on the titlebar or resizebar with the left mouse button brings +a window to the "front" (gives that window focus). Selecting a window from the +window list menu does the same.

    +

    Some key bindings are provided and are very useful when a window is hidden +behind others.

    +
      +
    • +

      Meta key + click on the titlebar with left mouse button-

      +

      sends the window to the back and gives focus to the topmost window.

      +
    • +
    • +

      Meta key + click on the client area with left mouse button-

      +

      brings the window to the front and focuses it.

      +
    • +
    • +

      Meta key + Up Arrow key-

      +

      brings the current focused window to the front.

      +
    • +
    • +

      Meta key + Down Arrow key-

      +

      sends the current focused window to the back.

      +
    • +
    +

    Many window attributes can be modified from the attributes panel in the window +commands menu (clicking the right mouse button on the titlebar). From version +0.62.0, window cycling was changed to Windows style (Alt-Tab).

    +
    +
    +

    Moving

    +

    Clicking on the titlebar of a window and dragging it with the left mouse button +pressed moves the window. The little box in the middle indicates the current +position in pixels relative to the top left corner of the screen (+0 +0). Extra +key bindings give more flexibility.

    +
      +
    • Dragging the titlebar with middle mouse button: moves the window +without changing it's stacking order.

    • +
    • Dragging the titlebar + Ctrl key: moves the window without focusing it.

    • +
    • Dragging the client area or the resizebar + Meta key: moves the window.

    • +
    +
    +
    +

    Maximizing

    +

    Double-clicking the titlebar while holding the Ctrl key resizes the window's +height to full screen.

    +

    Double-clicking the titlebar while holding the Shift key resizes the window's +width to full screen.

    +

    Double-clicking the titlebar while holding both Ctrl and Shift keys resizes the +window's height and width to full screen. Double-clicking the titlebar while +holding Ctrl or Shift key restores the initial size of the window.

    +

    To prevent a maximized window from covering the dock, the "Keep on top" option +must be selected from the dock menu.

    +
    +
    +

    Miniaturizing

    +

    Clicking the miniaturize button (the left one on the titlebar) shrinks the +window into a miniwindow with an icon and a title and places it at the bottom +of the screen. Hitting the assigned shortcut does the same. (Default is Meta + +m.)

    +

    The miniwindow is different from the application icon in that the miniwindow +cannot be docked.

    +

    Double-clicking in the miniwindow restores a miniaturized window. +Double-clicking in an application icon with the middle mouse button restores +all miniaturized and hidden windows of this application.

    +
    +
    +

    Resizing

    +

    The resizebar, at the bottom of the window, is divided into three regions: left +end region, middle region and right end region.

    +

    Depending upon the region you click, the resize operation is constrained to one +direction.

    +

    Clicking in the middle region of the resizebar and dragging it vertically +changes the window's height.

    +

    Clicking in either the left or right region of the resizebar and dragging it +horizontally changes the window's width.

    +

    Dragging with Shift key pressed gives the same result. Clicking in either end +region of the resizebar and dragging it diagonally changes both height and +width.

    +

    Key bindings give more options.

    +
      +
    • Dragging the window in the client area with the right mouse button + Meta key +resizes the window.

    • +
    • Dragging the resizebar with the middle mouse button resizes the window +without bringing it to the front.

    • +
    • Dragging the resizebar + Ctrl key resizes the window without focusing it.

    • +
    +
    +
    +

    Shading

    +

    Double-clicking on the titlebar of a window shades it. This means the window +rolls up to it's titlebar. A shaded window has almost the same properties as a +normal window. It can be miniaturized or closed.

    +

    From version 0.80.0, you can shade/unshade a window using a mouse wheel on its +titlebar. This of course, assumes your system is able to manage a mouse wheel. +The WMGLOBAL file in you $HOME/GNUstep/Defaults should contain two new +directives : MouseWheelUp and MouseWheelDown.

    +
    +
    +

    Hiding

    +

    Clicking the the miniaturize button (the left one on the titlebar) with the +right mouse button hides the application. Using the middle mouse button unhides +the application, simultaneously opening the windows list menu and selecting the +hidden application. (Pressing both buttons at once with a two buttons mouse +does the same on some OSes.) If this doesn't work, use the F11 key binding (the +default) to open the windows list menu.

    +
    +
    +

    Closing

    +

    Clicking the close button (the right one on the titlebar) closes the window. +When the close button has a different form (not an X), it means an application +is running in that window. Double-clicking in this close button kills the +application. This can be done too with Ctrl key + clicking the close button.

    +

    Usually, it's much better to exit an application from inside (through it's +menu, for instance).

    +
    +
    +

    Commands menu

    +

    Clicking on the titlebar of a window with the right mouse button opens a menu +containing commands applying to this window. The keyboard shortcut Ctrl + Esc +can replace the click on the titlebar. Esc closes this menu.

    +
    +

    List of Commands Menu commands:

    +

    Maximize/Unmaximize:

    +

    Either maximizes or returns the window to it's initial state.

    +

    Miniaturize:

    +

    Miniaturizes the window (miniwindow). The keyboard shortcut is Meta + m.

    +

    Shade/Unshade: Shades (or unshades) the window.

    +

    Hide:

    +

    Hides all windows of the application. Clicking on the application icon unhides +the windows.

    +

    Hide Others:

    +

    From version 0.80.1 it is possible to hide all others windows. The window list +menu allows to unhide selecting the window to redisplay.

    +

    Resize/Move:

    +

    When this menu option is selected, the window is ready to be moved or resized +(the little box with coordinates is displayed inside the window). Clicking on +the titlebar deselects the option.

    +

    Select:

    +

    Obviously selects the window which then can be moved or resized... Reselecting +this option deselects the window.

    +

    Move to:

    +

    Allows to move the window to another workspace (if existing!).

    +

    Attributes:

    +

    Opens the attributes panel to edit attributes and options for the window.

    +

    Five options are available in this panel: Window specification, Window +attributes, Advanced options, Icon and initial workspace and application +specific.

    +
      +
    • Window specification: Defines that the configuration will apply to windows +having their WM_CLASS property set to the selected name. This is because +windows can have different names. From version 0.65.0, you can select the +window to get the right specification.

    • +
    • +

      Window attributes: selecting the corresponding checkbox allows to:

      +
        +
      • disable titlebar

      • +
      • disable resizebar

      • +
      • disable close button

      • +
      • disable miniaturize button

      • +
      • disable border

      • +
      • keep on top

      • +
      • keep at bottom

      • +
      • omnipresent

      • +
      • start miniaturized

      • +
      • start maximized

      • +
      • full screen maximization

      • +
      +
    • +
    • +

      Advanced options: selecting the corresponding checkbox allows to:

      +
        +
      • don't bind keyboard shortcuts

      • +
      • don't bind mouse clicks

      • +
      • don't show in the window list

      • +
      • don't let the window take focus

      • +
      • keep inside screen

      • +
      • ignore "Hide others"

      • +
      • ignore "Save session"

      • +
      • emulate application icon

      • +
      +
    • +
    • +

      Icon and initial workspace: allow to

      +
        +
      • choose an icon browsing directories

      • +
      • ignore client supplied icon when selecting the checkbox

      • +
      • define initial workspace

      • +
      +
    • +
    • +

      Application specific: selecting checkboxes allows to:

      +
        +
      • start hidden or with no application icon

      • +
      • collapse application icons (from version 0.65.0)

      • +
      +
    • +
    • From version 0.80.0 a new checkbox is available : "Shared application icon". +It replaces the "Collapse application icon" checkbox. That is, you can have +many open windows from the same application with only one appicon. This +feature is on by default except for some incompatible applications. This +behavior can be defined for all windows in the Window Specification inspector +selecting the Defaults for all windows checkbox.

    • +
    +

    You can revert to the old behavior changing SharedAppIcon to "No" in the +WMWindowAttributes file, either in the global domain or in the local domain : +$HOME/GNUstep/Defaults.

    +

    Options:

    +

    Submenu options allow to:

    +
      +
    • to keep the window on top

    • +
    • to keep the window at bottom

    • +
    • to keep the window omnipresent

    • +
    • to set shortcuts for the window

    • +
    +

    Ten shortcuts are available as soon as they have been set in the keyboard +shortcut dialog. The shortcuts to define are those named "Shortcut for window + +figure". Then, using the defined shortcut gives the focus to the window.

    +

    Close:

    +

    Closes the window

    +

    Kill:

    +

    Kills the application. Usually, an application must be closed from inside (menu +or other means). This option is especially reserved for "emergency" cases.

    +
    +
    +
    + +
    +
    +
    +
    Window Maker: Guided Tour - Windows
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/guidedtour/win.rst b/docs/guidedtour/win.rst new file mode 100644 index 0000000..571be2c --- /dev/null +++ b/docs/guidedtour/win.rst @@ -0,0 +1,373 @@ + + + + Window Maker: Guided Tour - Windows + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Windows +======= + +.. contents:: + :depth: 1 + :backlinks: none + :local: + +Description +----------- + +General layout of a window: + +- *Titlebar*: Gives the name of the application, document or window. It's color + (usually) indicates the focus state (active or inactive window). I say + (usually) because some styles and themes do not provide different colors for + focused or unfocused windows - although this is rare (and, I might add, + cruel!). +- *Miniaturize button*: Clicking on the left button of the titlebar iconifies + the window. +- *Close button*: Clicking on the right button of the titlebar closes the + window or kills the application. +- *Resizebar*: The bottom part of the window. Dragging the resizebar with the + mouse resizes the window. +- *Client area*: The window content. It can be an application, some text, a + picture... + +Focusing +-------- + +A window can be in two states: focused or unfocused. The focused window is the +active window, the one receiving keystrokes. It's titlebar has a differentiated +color (usually!). Dialog windows or panels opened from a main window, +automatically get the focus. As soon as they are closed, the main window gets +the focus back. + +Two modes are available to focus a window: + +- *Click to focus mode*: clicking on any part of the window activates it. +- *Focus follows mouse mode*: moving the mouse pointer over the window + activates it. + +Reordering +---------- + +Windows can overlap other windows, in which case some will hide all or part of +others. Clicking on the titlebar or resizebar with the left mouse button brings +a window to the "front" (gives that window focus). Selecting a window from the +window list menu does the same. + +Some key bindings are provided and are very useful when a window is hidden +behind others. + +- *Meta key + click on the titlebar with left mouse button*- + + sends the window to the back and gives focus to the topmost window. + +- *Meta key + click on the client area with left mouse button*- + + brings the window to the front and focuses it. + +- *Meta key + Up Arrow key*- + + brings the current focused window to the front. + +- *Meta key + Down Arrow key*- + + sends the current focused window to the back. + +Many window attributes can be modified from the attributes panel in the window +commands menu (clicking the right mouse button on the titlebar). From version +0.62.0, window cycling was changed to Windows style (Alt-Tab). + +Moving +------ + +Clicking on the titlebar of a window and dragging it with the left mouse button +pressed moves the window. The little box in the middle indicates the current +position in pixels relative to the top left corner of the screen (+0 +0). Extra +key bindings give more flexibility. + +- Dragging the titlebar with middle mouse button: moves the window + without changing it's stacking order. +- Dragging the titlebar + Ctrl key: moves the window without focusing it. +- Dragging the client area or the resizebar + Meta key: moves the window. + +Maximizing +---------- + +Double-clicking the titlebar while holding the Ctrl key resizes the window's +height to full screen. + +Double-clicking the titlebar while holding the Shift key resizes the window's +width to full screen. + +Double-clicking the titlebar while holding both Ctrl and Shift keys resizes the +window's height and width to full screen. Double-clicking the titlebar while +holding Ctrl or Shift key restores the initial size of the window. + +To prevent a maximized window from covering the dock, the "Keep on top" option +must be selected from the dock menu. + +Miniaturizing +------------- + +Clicking the miniaturize button (the left one on the titlebar) shrinks the +window into a miniwindow with an icon and a title and places it at the bottom +of the screen. Hitting the assigned shortcut does the same. (Default is Meta + +m.) + +The miniwindow is different from the application icon in that the miniwindow +cannot be docked. + +Double-clicking in the miniwindow restores a miniaturized window. +Double-clicking in an application icon with the middle mouse button restores +all miniaturized and hidden windows of this application. + +Resizing +-------- + +The resizebar, at the bottom of the window, is divided into three regions: left +end region, middle region and right end region. + +Depending upon the region you click, the resize operation is constrained to one +direction. + +Clicking in the middle region of the resizebar and dragging it vertically +changes the window's height. + +Clicking in either the left or right region of the resizebar and dragging it +horizontally changes the window's width. + +Dragging with Shift key pressed gives the same result. Clicking in either end +region of the resizebar and dragging it diagonally changes both height and +width. + +Key bindings give more options. + +- Dragging the window in the client area with the right mouse button + Meta key + resizes the window. +- Dragging the resizebar with the middle mouse button resizes the window + without bringing it to the front. +- Dragging the resizebar + Ctrl key resizes the window without focusing it. + +Shading +------- + +Double-clicking on the titlebar of a window shades it. This means the window +rolls up to it's titlebar. A shaded window has almost the same properties as a +normal window. It can be miniaturized or closed. + +From version 0.80.0, you can shade/unshade a window using a mouse wheel on its +titlebar. This of course, assumes your system is able to manage a mouse wheel. +The WMGLOBAL file in you $HOME/GNUstep/Defaults should contain two new +directives : MouseWheelUp and MouseWheelDown. + +Hiding +------ + +Clicking the the miniaturize button (the left one on the titlebar) with the +right mouse button hides the application. Using the middle mouse button unhides +the application, simultaneously opening the windows list menu and selecting the +hidden application. (Pressing both buttons at once with a two buttons mouse +does the same on some OSes.) If this doesn't work, use the F11 key binding (the +default) to open the windows list menu. + +Closing +------- + +Clicking the close button (the right one on the titlebar) closes the window. +When the close button has a different form (not an X), it means an application +is running in that window. Double-clicking in this close button kills the +application. This can be done too with *Ctrl key + clicking the close button*. + +Usually, it's much better to exit an application from inside (through it's +menu, for instance). + +Commands menu +------------- + +Clicking on the titlebar of a window with the right mouse button opens a menu +containing commands applying to this window. The keyboard shortcut Ctrl + Esc +can replace the click on the titlebar. Esc closes this menu. + +List of Commands Menu commands: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Maximize/Unmaximize*: + +Either maximizes or returns the window to it's initial state. + +*Miniaturize*: + +Miniaturizes the window (miniwindow). The keyboard shortcut is Meta + m. + +*Shade/Unshade*: Shades (or unshades) the window. + +*Hide*: + +Hides all windows of the application. Clicking on the application icon unhides +the windows. + +*Hide Others*: + +From version 0.80.1 it is possible to hide all others windows. The window list +menu allows to unhide selecting the window to redisplay. + +*Resize/Move*: + +When this menu option is selected, the window is ready to be moved or resized +(the little box with coordinates is displayed inside the window). Clicking on +the titlebar deselects the option. + +*Select*: + +Obviously selects the window which then can be moved or resized... Reselecting +this option deselects the window. + +*Move to*: + +Allows to move the window to another workspace (if existing!). + +*Attributes*: + +Opens the attributes panel to edit attributes and options for the window. + +Five options are available in this panel: Window specification, Window +attributes, Advanced options, Icon and initial workspace and application +specific. + +- Window specification: Defines that the configuration will apply to windows + having their WM_CLASS property set to the selected name. This is because + windows can have different names. From version 0.65.0, you can select the + window to get the right specification. + +- Window attributes: selecting the corresponding checkbox allows to: + + - disable titlebar + - disable resizebar + - disable close button + - disable miniaturize button + - disable border + - keep on top + - keep at bottom + - omnipresent + - start miniaturized + - start maximized + - full screen maximization + +- Advanced options: selecting the corresponding checkbox allows to: + + - don't bind keyboard shortcuts + - don't bind mouse clicks + - don't show in the window list + - don't let the window take focus + - keep inside screen + - ignore "Hide others" + - ignore "Save session" + - emulate application icon + +- Icon and initial workspace: allow to + + - choose an icon browsing directories + - ignore client supplied icon when selecting the checkbox + - define initial workspace + +- Application specific: selecting checkboxes allows to: + + - start hidden or with no application icon + - collapse application icons (from version 0.65.0) + +- From version 0.80.0 a new checkbox is available : "Shared application icon". + It replaces the "Collapse application icon" checkbox. That is, you can have + many open windows from the same application with only one appicon. This + feature is on by default except for some incompatible applications. This + behavior can be defined for all windows in the Window Specification inspector + selecting the Defaults for all windows checkbox. + +You can revert to the old behavior changing SharedAppIcon to "No" in the +WMWindowAttributes file, either in the global domain or in the local domain : +$HOME/GNUstep/Defaults. + +*Options*: + +Submenu options allow to: + +- to keep the window on top +- to keep the window at bottom +- to keep the window omnipresent +- to set shortcuts for the window + +Ten shortcuts are available as soon as they have been set in the keyboard +shortcut dialog. The shortcuts to define are those named "Shortcut for window + +figure". Then, using the defined shortcut gives the focus to the window. + +*Close*: + +Closes the window + +*Kill*: + +Kills the application. Usually, an application must be closed from inside (menu +or other means). This option is especially reserved for "emergency" cases. + +
    +
    +
    +
    Window Maker: Guided Tour - Windows
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..9f38f33 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,121 @@ + + + + Window Maker: Documentation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Documentation

    + +

    It's a fact that one of the biggest problems with today's software is lack of +good documentation, or any documentation for that matter. Programmers generally +don't have a lot of time to document their work, and the things they do +document are usually oriented towards other programmers. While we can +appreciate the programmers point of view, we feel it's necessary to cater to a +larger audience (i.e our users) by providing clear, concise information on how +to use our software. The sections below will bring all of these pieces of +information together for you.

    +

    Before you get started with Window Maker, you need to have an understanding of +how to make use of the documentation that comes with the source distribution. +The main objective to using documentation is to understand it, which +coincidentally requires that you read it. A common mistake is for new or +novice users to overlook this information, leading them to frustration and a +bad first impression. Please take a moment to peruse the sections below, which +should make the experience of learning Window Maker a more pleasant one.

    + + +
    +

    Very frequently asked question

    +
      +
    • +

      Can I easily mount my external drives or connect to the internet with +Window Maker?

      +

      Yes, you can. Mounting external media is not the problem of a window manager +to solve, but a tipical Window Maker user can mount external media just as +easily as any other desktop user. If you use a dockapp like +wmvolman or +wmudmount you are just a +click away from having your external media mounted on /media/VOLUME_LABEL.

      +

      And you can just as easily manage your network connections using the standard +nm-applet running in a system tray like wmsystemtray on your dock.

      +
      +essential dockapps +

      wmvolman and wmsystemtray with nm-applet

      +
      +
    • +
    +
    +
    + +
    +
    +
    +
    Window Maker: Documentation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..1b832c7 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,123 @@ + + + + Window Maker: Documentation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Documentation +============= + +It's a fact that one of the biggest problems with today's software is lack of +good documentation, or any documentation for that matter. Programmers generally +don't have a lot of time to document their work, and the things they do +document are usually oriented towards other programmers. While we can +appreciate the programmers point of view, we feel it's necessary to cater to a +larger audience (i.e our users) by providing clear, concise information on how +to use our software. The sections below will bring all of these pieces of +information together for you. + +Before you get started with Window Maker, you need to have an understanding of +how to make use of the documentation that comes with the source distribution. +The main objective to using documentation is to **understand** it, which +coincidentally requires that you **read** it. A common mistake is for new or +novice users to overlook this information, leading them to frustration and a +bad first impression. Please take a moment to peruse the sections below, which +should make the experience of learning Window Maker a more pleasant one. + +.. class:: contents + +- `Installation Basics `_ +- `Window Maker Compilation and Installation `_ +- `Window Maker Internationalisation `_ +- `Guided Tour `_ +- `User Guide `_ +- `FAQ `_ +- `WINGs `_ + +.. - `Desktop/X Integration `_ + +Very frequently asked question +------------------------------ + +- **Can I easily mount my external drives or connect to the internet with + Window Maker?** + + Yes, you can. Mounting external media is not the problem of a window manager + to solve, but a tipical Window Maker user can mount external media just as + easily as any other desktop user. If you use a dockapp like + `wmvolman `_ or + `wmudmount `_ you are just a + click away from having your external media mounted on `/media/VOLUME_LABEL`. + + And you can just as easily manage your network connections using the standard + `nm-applet` running in a system tray like `wmsystemtray + `_ on your dock. + + .. figure:: /img/essential_dockapps.png + :alt: essential dockapps + + wmvolman and wmsystemtray with nm-applet + +
    +
    +
    +
    Window Maker: Documentation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/installation.html b/docs/installation.html new file mode 100644 index 0000000..13d6e04 --- /dev/null +++ b/docs/installation.html @@ -0,0 +1,153 @@ + + + + Window Maker: Documentation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Installation Basics

    + +
    +

    Downloading and Extracting

    +

    The first necessary step is to download the +Window Maker source distribution. From this point on, we'll assume it has been +retrieved and is residing on the local hard disk. The next step is to extract +it, and change into the source directory.

    +
    # cd /path/to/your/download
    +# gunzip WindowMaker-0.xx.xx.tar.gz
    +# tar -xf WindowMaker-0.xx.xx.tar
    +# cd WindowMaker-0.xx.xx
    +

    Now that things are extracted, it's time to look at the relevant pieces of +documentation. Most UNIX oriented free software packages come with a README +file, and Window Maker is no exception. The README file contains a summary +overview of what the distribution is, what the various directories contain, and +other general information.

    +

    Moving along, we have the NEWS file. For now, we just want to point out its +existence. It will become more useful to novice users over time. Veteran Window +Maker users will find it handy for keeping their configuration files up to +date, and learning about various changes which affect Window Maker's behavior.

    +

    The two remaining files we need to look at are INSTALL and BUGS. The INSTALL +file provides additional information that is necessary to install Window Maker +successfully. The BUGS file contains a list of known Window Maker bugs. If a +user feels they've found a bug in Window Maker, they should consult the BUGS +file first. If the bug isn't listed, proceed to the Bug Tracker and see if its +there.

    +
    +
    +

    Compiling

    +

    After extracting the latest version of Window Maker using the previous +instructions, the next step is to compile it. First of all, the configure +script should be run. It will test to make sure all the necessary libraries, +compilers and build tools are available on the local system. The configure +script allows for various arguments to be passed to it which relate to Window +Maker's installation. For a complete list of all configurable settings, enter:

    +
    $ ./configure --help
    +

    Commonly used configuration options are:

    +
    --prefix=DIR --enable-modelock --enable-xinerama --enable-silent-rules
    +

    The first configuration option lets Window Maker be installed into a +non-default installation directory (e.g if Window Maker cannot be installed +system wide for some reason, a user can specify a path under his/her home +directory). The default installation directory is /usr/local/bin. Note that +root access will be needed later on during the installation process if the +defaults were used.

    +

    So if a user johndoe would like to install the wmaker binary into +/home/johndoe/wmaker/bin instead of the default /usr/local/bin, the following +argument would be passed to the configure script:

    +
    $ ./configure --prefix=/home/johndoe/wmaker
    +

    After the configure script has been successfully executed, Window Maker can now +be compiled with the make command; simply enter:

    +
    $ make
    +

    The final step is to install the binaries and other support files. This is +accomplished by entering:

    +
    # make install
    +

    Note that this is the step that needs to be performed by root if the default +installation directory was used, or if a directory was specified that the +running user cannot write to. If the installing user has root access, they +should first become root by issuing su - root. Otherwise, reconfigure and +recompile Window Maker by specifying a different installation directory, or +kindly ask the local system administator to install it system wide.

    +

    Once Window Maker is installed system-wide, a default configuration can be +installed on a per-user basis, through the bundled installation script, +wmaker.inst. Enter wmaker.inst in a terminal emulator to configure +Window Maker for your user.

    +

    This script copies the default Window Maker configuration to your user's home +directory and sets Window Maker as the default window manager. It is +recommended to create ~/GNUstep before executing the script.

    +
    +
    +

    Final tweaks

    +

    Edit your ~/.xinitrc to load your newly installed Window Maker using the line +exec /usr/local/bin/wmaker.

    +

    Generate a new root menu (accessible with F12) with wmgenmenu, for example

    +
    $ wmgenmenu > $HOME/GNUstep/Defaults/WMRootMenu
    +

    Another recommended step is to install a few dockapps like wmvolman, wmmixer +and wmsystemtray which allow one to easily mount external media on /media among +other things. Visit dockapps for many more +choices.

    +
    +
    + +
    +
    +
    +
    Window Maker: Documentation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 0000000..8959d1e --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,195 @@ + + + + Window Maker: Documentation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Installation Basics +=================== + +Downloading and Extracting +-------------------------- + +The first necessary step is to `download +`_ the +Window Maker source distribution. From this point on, we'll assume it has been +retrieved and is residing on the local hard disk. The next step is to extract +it, and change into the source directory. + +.. code:: console + :class: highlight + + # cd /path/to/your/download + # gunzip WindowMaker-0.xx.xx.tar.gz + # tar -xf WindowMaker-0.xx.xx.tar + # cd WindowMaker-0.xx.xx + +Now that things are extracted, it's time to look at the relevant pieces of +documentation. Most UNIX oriented free software packages come with a README +file, and Window Maker is no exception. The README file contains a summary +overview of what the distribution is, what the various directories contain, and +other general information. + +Moving along, we have the NEWS file. For now, we just want to point out its +existence. It will become more useful to novice users over time. Veteran Window +Maker users will find it handy for keeping their configuration files up to +date, and learning about various changes which affect Window Maker's behavior. + +The two remaining files we need to look at are INSTALL and BUGS. The INSTALL +file provides additional information that is necessary to install Window Maker +successfully. The BUGS file contains a list of known Window Maker bugs. If a +user feels they've found a bug in Window Maker, they should consult the BUGS +file first. If the bug isn't listed, proceed to the Bug Tracker and see if its +there. + +Compiling +--------- + +After extracting the latest version of Window Maker using the previous +instructions, the next step is to compile it. First of all, the configure +script should be run. It will test to make sure all the necessary libraries, +compilers and build tools are available on the local system. The configure +script allows for various arguments to be passed to it which relate to Window +Maker's installation. For a complete list of all configurable settings, enter: + +.. code:: console + :class: highlight + + $ ./configure --help + +Commonly used configuration options are: + +.. code:: console + :class: highlight + + --prefix=DIR --enable-modelock --enable-xinerama --enable-silent-rules + +The first configuration option lets Window Maker be installed into a +non-default installation directory (e.g if Window Maker cannot be installed +system wide for some reason, a user can specify a path under his/her home +directory). The default installation directory is /usr/local/bin. Note that +root access will be needed later on during the installation process if the +defaults were used. + +So if a user johndoe would like to install the wmaker binary into +/home/johndoe/wmaker/bin instead of the default /usr/local/bin, the following +argument would be passed to the configure script: + +.. code:: console + :class: highlight + + $ ./configure --prefix=/home/johndoe/wmaker + +After the configure script has been successfully executed, Window Maker can now +be compiled with the make command; simply enter: + +.. code:: console + :class: highlight + + $ make + +The final step is to install the binaries and other support files. This is +accomplished by entering: + +.. code:: console + :class: highlight + + # make install + +Note that this is the step that needs to be performed by root if the default +installation directory was used, or if a directory was specified that the +running user cannot write to. If the installing user has root access, they +should first become root by issuing ``su - root``. Otherwise, reconfigure and +recompile Window Maker by specifying a different installation directory, or +kindly ask the local system administator to install it system wide. + +Once Window Maker is installed system-wide, a default configuration can be +installed on a per-user basis, through the bundled installation script, +``wmaker.inst``. Enter ``wmaker.inst`` in a terminal emulator to configure +Window Maker for your user. + +This script copies the default Window Maker configuration to your user's home +directory and sets Window Maker as the default window manager. It is +recommended to create ``~/GNUstep`` before executing the script. + +Final tweaks +------------ + +Edit your ~/.xinitrc to load your newly installed Window Maker using the line +``exec /usr/local/bin/wmaker``. + +Generate a new root menu (accessible with F12) with ``wmgenmenu``, for example + +.. code:: console + :class: highlight + + $ wmgenmenu > $HOME/GNUstep/Defaults/WMRootMenu + +Another recommended step is to install a few dockapps like wmvolman, wmmixer +and wmsystemtray which allow one to easily mount external media on /media among +other things. Visit `dockapps `_ for many more +choices. + +
    +
    +
    +
    Window Maker: Documentation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wings.html b/docs/wings.html new file mode 100644 index 0000000..0ca4103 --- /dev/null +++ b/docs/wings.html @@ -0,0 +1,135 @@ + + + + Window Maker: WINGs + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    + + +
    +

    WINGs Is Not GNUstep

    +

    While GNUstep is our ideal development framework, it's overkill for a window +manager like Window Maker. We had a need for a quick, lightweight toolkit to +handle basic window manager tasks, which is how WINGs was born, and why it has +become an integral part of Window Maker's core.

    +

    Unlike the general uses of the GNUstep development environment, the WINGs +toolkit was designed as a specific solution for Window Maker. It is not +implemented in an object-oriented language, but was designed with OO schemas in +mind. It is encapsulated in objects that have various methods (functions), +which in turn can be accessed like real objects (i.e it's unknown what they +contain, and they only have the interface functions to alter their data). As +much as C will allow, that is. What really matters is that it's functional and +small enough for our purposes.

    +

    Surprisingly, there have been several developers who think WINGs is mature and +functional enough to write full fledged applications with it. For developers +who are interested in creating real applications, we would encourage them to +look at GNUstep instead. GNUstep is written in Objective-C, and anyone with a +solid C++ background shouldn't need more than an hour to begin programming in +Objective-C. For more information on this, please visit the GNUstep Developer +Documentation section.

    +

    So, what does WINGs do for us, specifically? It contains many necessary +widgets, such as the buttons, file browser, color chooser, and text editor +dialog that are all used for creating the UI. It is currently missing a few +important items, such as DnD, treeview, and application menus, but those will +be integrated in future releases.

    +

    One of the more important aspects of WINGs is that it now provides proplist +functionality. proplist, short for property list, is what Window Maker uses to +generate and maintain structured configuration files. This data is stored as +plain ASCII text under a user's ~/GNUstep directory. These files are what make +up the menus, the current state and appearance of the desktop, the Dock, the +Clip, and the values set in WPrefs.

    +

    As an example, here is a short snippet from the proplist version of the default +menu:

    +
    (
    +        Applications,
    +        (
    +                Info,
    +                ("Info Panel", INFO_PANEL),
    +                (Legal, LEGAL_PANEL),
    +                ("System Console", EXEC, xconsole),
    +                ("System Load", SHEXEC, "xosview || xload"),
    +                ("Process List", EXEC, "xterm -e top"),
    +                ("Manual Browser", EXEC, xman)
    +        ),
    +        (Run..., EXEC, "%a(Run,Type command to run:)"),
    +...
    +)
    +
    +
    +

    External sources of information

    +

    As this section evolves, we will be providing more documentation on the +internals of WINGs. For the time being, developers interested in WINGs should +see Alexey Voinov's WINGsman documentation project. Starters may find this +tutorial, which includes a library listing +based on Voinov's work, useful. We'll try to cover some examples and/or more +tutorials on how to program small applications in WINGs in the near future. For +anyone already using WINGs for a project, please contact us, as we'd like to get an idea of its popularity and practical uses, +as well as some additional material to place here.

    +
    +
    + +
    +
    +
    +
    Window Maker: WINGs
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wings.rst b/docs/wings.rst new file mode 100644 index 0000000..d4e01dd --- /dev/null +++ b/docs/wings.rst @@ -0,0 +1,142 @@ + + + + Window Maker: WINGs + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + WINGs Is Not GNUstep +==================== + +While GNUstep is our ideal development framework, it's overkill for a window +manager like Window Maker. We had a need for a quick, lightweight toolkit to +handle basic window manager tasks, which is how WINGs was born, and why it has +become an integral part of Window Maker's core. + +Unlike the general uses of the GNUstep development environment, the WINGs +toolkit was designed as a specific solution for Window Maker. It is not +implemented in an object-oriented language, but was designed with OO schemas in +mind. It is encapsulated in objects that have various methods (functions), +which in turn can be accessed like real objects (i.e it's unknown what they +contain, and they only have the interface functions to alter their data). As +much as C will allow, that is. What really matters is that it's functional and +small enough for our purposes. + +Surprisingly, there have been several developers who think WINGs is mature and +functional enough to write full fledged applications with it. For developers +who are interested in creating real applications, we would encourage them to +look at GNUstep instead. GNUstep is written in Objective-C, and anyone with a +solid C++ background shouldn't need more than an hour to begin programming in +Objective-C. For more information on this, please visit the `GNUstep Developer +Documentation `_ section. + +So, what does WINGs do for us, specifically? It contains many necessary +widgets, such as the buttons, file browser, color chooser, and text editor +dialog that are all used for creating the UI. It is currently missing a few +important items, such as DnD, treeview, and application menus, but those will +be integrated in future releases. + +One of the more important aspects of WINGs is that it now provides proplist +functionality. proplist, short for `property list +`_, is what Window Maker uses to +generate and maintain structured configuration files. This data is stored as +plain ASCII text under a user's ~/GNUstep directory. These files are what make +up the menus, the current state and appearance of the desktop, the Dock, the +Clip, and the values set in WPrefs. + +As an example, here is a short snippet from the proplist version of the default +menu: + +.. code:: + :class: highlight + + ( + Applications, + ( + Info, + ("Info Panel", INFO_PANEL), + (Legal, LEGAL_PANEL), + ("System Console", EXEC, xconsole), + ("System Load", SHEXEC, "xosview || xload"), + ("Process List", EXEC, "xterm -e top"), + ("Manual Browser", EXEC, xman) + ), + (Run..., EXEC, "%a(Run,Type command to run:)"), + ... + ) + +External sources of information +=============================== + +As this section evolves, we will be providing more documentation on the +internals of WINGs. For the time being, developers interested in WINGs should +see Alexey Voinov's `WINGsman documentation project +`_. Starters may find `this +tutorial `_, which includes a library listing +based on Voinov's work, useful. We'll try to cover some examples and/or more +tutorials on how to program small applications in WINGs in the near future. For +anyone already using WINGs for a project, please `contact us `_, as we'd like to get an idea of its popularity and practical uses, +as well as some additional material to place here. + +
    +
    +
    +
    Window Maker: WINGs
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wmaker_i18n.html b/docs/wmaker_i18n.html new file mode 100644 index 0000000..a979f41 --- /dev/null +++ b/docs/wmaker_i18n.html @@ -0,0 +1,424 @@ + + + + Window Maker: Internationalisation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Window Maker Internationalisation

    + +

    A guide to enable support for language translations in WINDOW MAKER and to the +contributors who want to help translating.

    + +

    This manual is for Window Maker, version git#next.

    +
    +
    +

    +1 Enabling Languages support

    +

    WINDOW MAKER has the possibility to be translated in many languages, but by +default none of them will be installed, and the support for translation will +not be compiled.

    +

    To enable the translation capabilities, you have to specify which language(s) +you want to be installed: this is done with the variable LINGUAS when +running the configure script. This variable should contain the +space-separated list of languages you want to install.

    +

    You could for instance enable both French (fr) and Dutch (nl) with +this:

    +
    $ ./configure LINGUAS="fr nl"
    +

    You can of course add any other option that you want to the configure +command. From the moment you specify the variable, the configure script +will check that you have the appropriate dependencies for this (basically the +gettext function and the libintl library); when you run make to +compile the project, it will also compile the translation (mo files) for +the language(s) you asked (if available, of course), and during make install it will install them in the usual directory.

    +

    The installation directory can be changed with the standard option +--localedir to the configure script, the default path being +PREFIX/share/locale/<lang>/LC_MESSAGES).

    +
    +

    +1.1 Getting the list of supported languages

    +

    The naming convention for the languages follows the ISO 639-1 standard, for +which you can find a summary list in the GNU gettext manual.

    +

    But as WINDOW MAKER does not support all of them, the configure script will +print a warning for each language you specify that it does not know, and sum up +at the end the list of enabled languages that will be installed.

    +

    There is a non-standard possibility to set LINGUAS to list, in which +case the configure script will provide you the list of languages it +supports, and stop:

    +
    ./configure LINGUAS="list"
    +

    There is also another non-standard possibility to enable all the languages that +WINDOW MAKER supports by setting LINGUAS to *. This is an internal +trick implemented so the development team can have the command make distcheck include some checks on translations:

    +
    ./configure LINGUAS='*'
    +
    +
    +

    +1.2 Translations for Menus

    +

    In order to propose an Application Menu (also called Root Menu) that is +also translated in the language of the interface, WINDOW MAKER implements two +complementary mechanisms:

    +

    The first, always enabled when i18n support is enabled, is to look for the menu +file containing the name of the locale. For example, if the file is called +menu and the language is set as LANG=fr_FR.utf-8, then WINDOW MAKER +will search for, and use the first match found:

    +
      +
    • menu.fr_FR.utf-8

    • +
    • menu.fr_FR

    • +
    • menu.fr

    • +
    • menu

    • +
    +

    The second possibility, which is not enabled by default, is to be able to use a +custom po file which contains the translations for the text of the menu. +This feature is enabled at compile time, using the option +--with-menu-textdomain to the configure script. For example, if you +specify:

    +
    ./configure --with-menu-textdomain=WMMenu
    +

    then the translations for the menu will be searched in the file WMMenu.mo +located at the standard location, the default path being +PREFIX/share/locale/[lang]/LC_MESSAGES/WMMenu.mo.

    +

    If you do not enable the feature (the default behaviour, or with an explicit +--without-menu-textdomain), then WINDOW MAKER will not try to translate +the strings, even using its own domain file (WindowMaker.mo).

    +
    +
    +

    +1.3 Setting LINGUAS at system level

    +

    As the variable LINGUAS is quite standard, you also have the possibility to +set its value in the config.site file for AUTOCONF. This file can be placed +in one of these paths:

    +
      +
    • PREFIX/share/config.site

    • +
    • PREFIX/etc/config.site

    • +
    +

    This way, the same language list will be used for all the programs that use +AUTOCONF that you would compile. Please note that if you also specify a value +on the command line, it will have precedence over the value in that file.

    +
    +
    +
    +
    +

    +2 Choosing the Language

    +

    If you have compiled and installed WINDOW MAKER with support for your language, +the effective translation is done is the very same way as any other application +on an UNIX system, you just have to set the shell variable LANG to your +language before wmaker is started. In sh type of shell (SH, KSH, BASH, +...), this is done for example with (fr is for French):

    +
    export LANG=fr
    +

    There is also a command line option --locale for WINDOW MAKER which may be +used to set the language:

    +
    wmaker --locale fr
    +

    When using this option, WINDOW MAKER will use the locale you specified, +redefining the LANG environment variable to this value so all program +started from WINDOW MAKER will inherit its value.

    +

    If your system is using SYSTEMD, you can also configure the locale at system +level using the command:

    +
    localectl set-locale LANG=fr
    +

    You can check if the current value is properly supported with the command:

    +
    locale
    +

    If this does not work, you may need first to activate the support for your +locale in the system; you can get the list of currently enabled locales with +the command:

    +
    locale -a
    +

    You should be able to enable a new language support by editing the file +/etc/locale.gen to uncomment the locale(s) you need (by removing the # +character and space(s) in front of it, and by running the command +locale-gen as root.

    +

    For further information, you may wish to read dedicated documentation, for +example from the Linux Documentation Project or through pages like +Shell Hacks' note on Changing Locale.

    +
    +
    +
    +

    +3 Troubleshooting

    +

    If I18N support does not work for you, check these:

    +
      +
    • the LANG environment variable is set to your locale, and +the locale is supported by your OS's locale or X's locale +emulation. you can display all supported locales by +executing "locale -a" command if it is available; you +can check if your locale is supported by X's locale emulation, +see /usr/share/X11/locale/locale.alias

    • +
    • check if you are using an appropriate fonts for the locale you chose. If +you're using a font set that has a different encoding than the one used by +XLIB or LIBC, bad things can happen. Try specifically putting the encoding in +the LANG variable, like ru_RU.KOI8-R. Again, see +/usr/share/X11/locale/locale.alias

    • +
    • +

      the fonts you're using support your locale. if your font setting on +$HOME/GNUstep/Defaults/WindowMaker is like...

      +
      WindowTitleFont = "Trebuchet MS:bold:pixelsize=12";
      +MenuTitleFont   = "Trebuchet MS:bold:pixelsize=12";
      +

      then you can't display Asian languages (ja, ko, ch, ...) +characters using Trebuchet MS. A font that is guaranteed to work for any +language is sans (or sans-serif). sans is not a font itself, but +an alias which points to multiple fonts and will load the first in that list +that has the ability to show glyphs in your language. If you don't know a +font that is suited for your language you can always set all your fonts to +something like:

      +
      "sans:pixelsize=12"
      +

      However, please note that if your font is something like:

      +
      "Trebuchet MS,sans serif:pixelsize=12"
      +

      this will not be able to display Asian languages if any of the previous fonts +before sans are installed. This is because unlike the proper font pickup that +sans guarantees for your language, this construct only allows a font +fallback mechanism, which tries all the fonts in the list in order, until it +finds one that is available, even if it doesn't support your language.

      +

      Also you need to change font settings in style files in the +$HOME/Library/WindowMaker/Style directory.

      +
    • +
    • the LC_CTYPE environment variable is unset or it has the correct value. +If you don't know what is the correct value, unset it.

    • +
    +
    +
    +
    +

    +4 Contribute to Translations

    +

    You may have noticed that many translations are not up to date, because the +code has evolved but the persons who initially contributed may not have had the +time to continue, so any help is welcome.

    +

    Since WINDOW MAKER 0.95.7 there are some targets to make that can help you +in that task.

    +
    +

    +4.1 Install the latest sources

    +

    If you want to contribute, the first step is get the development branch of the code; +this is done using git. If you do not feel confident at all with using +git, you may also try to ask for a snapshot on the developer's mailing +list wmaker-dev@lists.windowmaker.org. With git the procedure is:

    +
    # Get your working copy of the sources
    +git clone git://repo.or.cz/wmaker-crm.git
    +
    +# Go into that newly created directory
    +cd wmaker-crm
    +
    +# Switch to the branch where everything happens
    +git checkout next
    +
    +# Generate the configuration script
    +./autogen.sh
    +

    Now you should have an up-to-date working copy ready to be compiled; you will +not need to go the full way but you should run the configure script, so it +will create the Makefile`s, and you may want to compile the code once so it +will not do it again automatically later while you are doing something else:

    +
    # Setup the build, enabling at least the language you want to work on
    +./configure LINGUAS="<list of iso 639 country code>"
    +
    +# Compile the code once
    +make
    +
    +
    +

    +4.2 Updating the Translations

    +

    The typical process for translating one program is:

    +
      +
    • generate a POT file (PO Template): this is done with xgettext which +searches for all the strings from the sources that can be translated;

    • +
    • update the PO file for your language: this is done with msgmerge which +compares the PO file and aligns it to the latest template;

    • +
    • edit the new PO file: this is done by you with your favourite editor, to add +the missing msgstr, review the possible fuzzy matches, …

    • +
    • check the PO file: unfortunately there is no definitive method for this;

    • +
    • submit your contribution to the project: this is done with git.

    • +
    +

    In WINDOW MAKER, you have actually 4 po files to take care of:

    +
      +
    • po/<LANG>.po: for WINDOW MAKER itself

    • +
    • WPrefs.app/po/<LANG>.po: for the Preference Editor program

    • +
    • WINGs/po/<LANG>.po: for the graphic toolkit library

    • +
    • util/po/<LANG>.po: for the command-line tools of WINDOW MAKER

    • +
    +

    As stated previously, there is a make target that can help you to +automatically generate the POT and update the PO for these 4 cases:

    +
    make update-lang PO=<LANG>
    +

    Once run, it will have updated as needed the 4 po files against the latest +source code. You may wish to use the command git gui to view the changes; +you can now edit the files to complete the translation, correct them, remove +deprecated stuff, … Please note that the encoding should be set to UTF-8 as +this is now the standard.

    + +

    If you think an error message is too obscure, just ask on the developer mailing +list wmaker-dev@lists.windowmaker.org: in addition to clarifications +there's even a chance for the original message to be improved!

    +

    You may find some information on working with po file in the GNU gettext +documentation.

    +
    +
    +

    +4.3 Translate the Man Pages

    +

    You may want to extend the translation to the documentation that is provided to +users in the form of Unix man pages. The sources of the man pages are located +in the doc/ directory; the translation should be placed in the directory +doc/LANG/ with the same file name.

    + +

    The directory will also need a file Makefile.am which provides the list of +man pages to be included in the distribution package and to be installed. You +can probably get inspiration from an existing one from another language; if you +do not feel confident about it do not hesitate to ask on the project's mailing +list (wmaker-dev@lists.windowmaker.org), either for help or to ask someone +to make it for you.

    +

    Please note that although most man pages sources are directly in man page +format (nroff, the file extension being a number), a few of them are +processed by a script (those with the .in extension, like wmaker.in). +This is done because in some case we want the man page to reflect the actual +compilation options.

    +

    You may not want to bother with this hassle, in which case you can simply name +your translation file with the .1 and remove the special @keyword@ +marks. If you are sure you want to keep that processing but do not feel +confident about hacking the Makefile.am do not hesitate to ask on the +project's mailing list (wmaker-dev@lists.windowmaker.org).

    +
    +
    +

    +4.4 Checking the Result

    +

    In the WINDOW MAKER build tree you also have another target that can help you, +it is make check.

    +

    At current time, it does not check much, but if during the make update-lang +new po file have been created you may get some errors, because you have to +add these new files to the variable EXTRA_DIST in the corresponding +Makefile.

    +

    If you do not feel confident about doing it, do not worry, just tell about it +when you submit your work, and some developer on the mailing list will just be +happy to do it for you when integrating your valuable contribution (we always +like when someone helps making WINDOW MAKER better).

    +
    +
    +

    +4.5 Submitting your Contribution

    +

    Preliminary Remark: if the update process made changes in a po file but +you did not change any msgstr content, it is probably a good idea to not +submit the changes to that po file because it would just add noise.

    +

    When you feel ready to send your changes, the first step is to prepare them. +This is done with git: if you have not run the git gui previously then +it is a good time to do it now. This window offers you the possibility to show +your changes and to decide what you want to send.

    +

    The window is divided in 4 panes:

    +
      +
    • top-right show the current changes you have selected, for review (and also +for cherry-picking stuff if you want to select precisely)

    • +
    • top-left ("Unstaged Changes") the list of files with changes to be send, you +can click on the name of the file to see the changes, you can click on the +icon of the file if you want to send all the changes in this file; an icon in +blue shows a file that have been changed and an icon in black shows a file +that is new

    • +
    • bottom-left ("Staged Changes") the list of files with changes that you have +chosen to send so far, you can click on the file name to view these changes, +you can click on the icon if you want to remove the changes from this file +from the list to send

    • +
    • bottom-right ("Commit Message") the message you want to attach to your +changes when you submit them to the development team

    • +
    +

    The idea here is to pick your changes to the po files; for the commit +message you may wish to stuck to a simple, single line:

    +
    +
    "Updated translations for <LANG>"
    +
    +

    The penultimate step is to click on the button Sign Off (it will add a line +in the commit message), and then click on the button Commit. From this +time, the commit message will clear itself and the "Staged Changes" also, +showing that your action was done.

    +

    You may now quit the git gui, the final step begins by running this +command:

    +
    git format-patch HEAD^
    + +

    This will generate a file named like 0001-updated-translations-for-XX.patch +which contains your changes, ready for sending. The goal will now be to email +this file to wmaker-dev@lists.windowmaker.org. If you feel confident in having +git send it for you, you may want to read the file +The-perfect-Window-Maker-patch.txt to see how to configure git for +mailing, so you can run:

    +
    git send-email 0001-updated-translations-for-XX.patch
    +
    +
    +
    + +
    +
    +
    +
    Window Maker: Internationalisation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wmaker_i18n.rst b/docs/wmaker_i18n.rst new file mode 100644 index 0000000..818282e --- /dev/null +++ b/docs/wmaker_i18n.rst @@ -0,0 +1,531 @@ + + + + Window Maker: Internationalisation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + Window Maker Internationalisation +================================= + +A guide to enable support for language translations in WINDOW MAKER and to the +contributors who want to help translating. + +.. sectnum:: +.. contents:: Table of Contents + :backlinks: none + +This manual is for Window Maker, version git#next. + +---- + +Enabling Languages support +-------------------------- + +WINDOW MAKER has the possibility to be translated in many languages, but by +default none of them will be installed, and the support for translation will +not be compiled. + +To enable the translation capabilities, you have to specify which language(s) +you want to be installed: this is done with the variable ``LINGUAS`` when +running the ``configure`` script. This variable should contain the +space-separated list of languages you want to install. + +You could for instance enable both French (``fr``) and Dutch (``nl``) with +this: + +.. code:: console + :class: highlight + + $ ./configure LINGUAS="fr nl" + +You can of course add any other option that you want to the ``configure`` +command. From the moment you specify the variable, the ``configure`` script +will check that you have the appropriate dependencies for this (basically the +``gettext`` function and the ``libintl`` library); when you run ``make`` to +compile the project, it will also compile the translation (``mo`` files) for +the language(s) you asked (if available, of course), and during ``make +install`` it will install them in the usual directory. + +The installation directory can be changed with the standard option +``--localedir`` to the ``configure`` script, the default path being +``PREFIX/share/locale//LC_MESSAGES``). + +Getting the list of supported languages +....................................... + +The naming convention for the languages follows the ``ISO 639-1`` standard, for +which you can find a summary list in the `GNU gettext manual +`_. + +But as WINDOW MAKER does not support all of them, the ``configure`` script will +print a warning for each language you specify that it does not know, and sum up +at the end the list of enabled languages that will be installed. + +There is a non-standard possibility to set ``LINGUAS`` to ``list``, in which +case the ``configure`` script will provide you the list of languages it +supports, and stop: + +.. code:: console + :class: highlight + + ./configure LINGUAS="list" + +There is also another non-standard possibility to enable all the languages that +WINDOW MAKER supports by setting ``LINGUAS`` to ``*``. This is an internal +trick implemented so the development team can have the command ``make +distcheck`` include some checks on translations: + +.. code:: console + :class: highlight + + ./configure LINGUAS='*' + +Translations for Menus +...................... + +In order to propose an *Application Menu* (also called *Root Menu*) that is +also translated in the language of the interface, WINDOW MAKER implements two +complementary mechanisms: + +The first, always enabled when i18n support is enabled, is to look for the menu +file containing the name of the locale. For example, if the file is called +``menu`` and the language is set as ``LANG=fr_FR.utf-8``, then WINDOW MAKER +will search for, and use the first match found: + +- ``menu.fr_FR.utf-8`` +- ``menu.fr_FR`` +- ``menu.fr`` +- ``menu`` + +The second possibility, which is not enabled by default, is to be able to use a +custom ``po`` file which contains the translations for the text of the menu. +This feature is enabled at compile time, using the option +``--with-menu-textdomain`` to the ``configure`` script. For example, if you +specify: + +.. code:: console + :class: highlight + + ./configure --with-menu-textdomain=WMMenu + +then the translations for the menu will be searched in the file ``WMMenu.mo`` +located at the standard location, the default path being +`PREFIX/share/locale/[lang]/LC_MESSAGES/WMMenu.mo`. + +If you do not enable the feature (the default behaviour, or with an explicit +``--without-menu-textdomain``), then WINDOW MAKER will **not** try to translate +the strings, even using its own domain file (``WindowMaker.mo``). + + +Setting ``LINGUAS`` at system level +................................... + +As the variable ``LINGUAS`` is quite standard, you also have the possibility to +set its value in the ``config.site`` file for AUTOCONF. This file can be placed +in one of these paths: + +- ``PREFIX/share/config.site`` +- ``PREFIX/etc/config.site`` + +This way, the same language list will be used for all the programs that use +AUTOCONF that you would compile. Please note that if you also specify a value +on the command line, it will have precedence over the value in that file. + +---- + +Choosing the Language +--------------------- + +If you have compiled and installed WINDOW MAKER with support for your language, +the effective translation is done is the very same way as any other application +on an UNIX system, you just have to set the shell variable ``LANG`` to your +language before ``wmaker`` is started. In ``sh`` type of shell (SH, KSH, BASH, +...), this is done for example with (``fr`` is for French): + +.. code:: console + :class: highlight + + export LANG=fr + +There is also a command line option ``--locale`` for WINDOW MAKER which may be +used to set the language: + +.. code:: console + :class: highlight + + wmaker --locale fr + +When using this option, WINDOW MAKER will use the locale you specified, +redefining the ``LANG`` environment variable to this value so all program +started from WINDOW MAKER will inherit its value. + +If your system is using SYSTEMD, you can also configure the locale at system +level using the command: + +.. code:: console + :class: highlight + + localectl set-locale LANG=fr + +You can check if the current value is properly supported with the command: + +.. code:: console + :class: highlight + + locale + + +If this does not work, you may need first to activate the support for your +locale in the system; you can get the list of currently enabled locales with +the command: + +.. code:: console + :class: highlight + + locale -a + +You should be able to enable a new language support by editing the file +``/etc/locale.gen`` to uncomment the locale(s) you need (by removing the ``#`` +character and space(s) in front of it, and by running the command +``locale-gen`` as root. + +For further information, you may wish to read dedicated documentation, for +example from `the Linux Documentation Project +`_ or through pages like +`Shell Hacks' note on Changing Locale +`_. + +---- + +Troubleshooting +--------------- + +If I18N support does not work for you, check these: + + +- the ``LANG`` environment variable is set to your locale, and + the locale is supported by your OS's locale or X's locale + emulation. you can display all supported locales by + executing "``locale -a``" command if it is available; you + can check if your locale is supported by X's locale emulation, + see ``/usr/share/X11/locale/locale.alias`` + +- check if you are using an appropriate fonts for the locale you chose. If + you're using a font set that has a different encoding than the one used by + XLIB or LIBC, bad things can happen. Try specifically putting the encoding in + the ``LANG`` variable, like ``ru_RU.KOI8-R``. Again, see + ``/usr/share/X11/locale/locale.alias`` + +- the fonts you're using support your locale. if your font setting on + ``$HOME/GNUstep/Defaults/WindowMaker`` is like... + + .. code:: ini + :class: highlight + + WindowTitleFont = "Trebuchet MS:bold:pixelsize=12"; + MenuTitleFont = "Trebuchet MS:bold:pixelsize=12"; + + then you can't display Asian languages (``ja``, ``ko``, ``ch``, ...) + characters using ``Trebuchet MS``. A font that is guaranteed to work for any + language is ``sans`` (or ``sans-serif``). ``sans`` is not a font itself, but + an alias which points to multiple fonts and will load the first in that list + that has the ability to show glyphs in your language. If you don't know a + font that is suited for your language you can always set all your fonts to + something like: + + .. code:: ini + :class: highlight + + + "sans:pixelsize=12" + + + However, please note that if your font is something like: + + .. code:: ini + :class: highlight + + "Trebuchet MS,sans serif:pixelsize=12" + + this will not be able to display Asian languages if any of the previous fonts + before sans are installed. This is because unlike the proper font pickup that + ``sans`` guarantees for your language, this construct only allows a font + fallback mechanism, which tries all the fonts in the list in order, until it + finds one that is available, even if it doesn't support your language. + + Also you need to change font settings in style files in the + ``$HOME/Library/WindowMaker/Style`` directory. + +- the ``LC_CTYPE`` environment variable is unset or it has the correct value. + If you don't know what is the correct value, unset it. + +---- + +Contribute to Translations +-------------------------- + +You may have noticed that many translations are not up to date, because the +code has evolved but the persons who initially contributed may not have had the +time to continue, so any help is welcome. + +Since WINDOW MAKER 0.95.7 there are some targets to ``make`` that can help you +in that task. + +Install the latest sources +.......................... + +If you want to contribute, the first step is get the development branch of the code; +this is done using ``git``. If you do not feel confident at all with using +``git``, you may also try to ask for a *snapshot* on the developer's mailing +list `wmaker-dev@lists.windowmaker.org +`_. With ``git`` the procedure is: + +.. code:: bash + :class: highlight + + # Get your working copy of the sources + git clone git://repo.or.cz/wmaker-crm.git + + # Go into that newly created directory + cd wmaker-crm + + # Switch to the branch where everything happens + git checkout next + + # Generate the configuration script + ./autogen.sh + +Now you should have an up-to-date working copy ready to be compiled; you will +not need to go the full way but you should run the ``configure`` script, so it +will create the ``Makefile`s``, and you may want to compile the code once so it +will not do it again automatically later while you are doing something else: + + +.. code:: console + :class: highlight + + # Setup the build, enabling at least the language you want to work on + ./configure LINGUAS="" + + # Compile the code once + make + +Updating the Translations +......................... + +The typical process for translating one program is: + +- generate a POT file (PO Template): this is done with ``xgettext`` which + searches for all the strings from the sources that can be translated; +- update the PO file for your language: this is done with ``msgmerge`` which + compares the PO file and aligns it to the latest template; +- edit the new PO file: this is done by you with your favourite editor, to add + the missing ``msgstr``, review the possible *fuzzy matches*, … +- check the PO file: unfortunately there is no definitive method for this; +- submit your contribution to the project: this is done with ``git``. + +In WINDOW MAKER, you have actually 4 ``po`` files to take care of: + +- ``po/.po``: for WINDOW MAKER itself +- ``WPrefs.app/po/.po``: for the Preference Editor program +- ``WINGs/po/.po``: for the graphic toolkit library +- ``util/po/.po``: for the command-line tools of WINDOW MAKER + +As stated previously, there is a ``make`` target that can help you to +automatically generate the POT and update the PO for these 4 cases: + + +.. code:: console + :class: highlight + + make update-lang PO= + +Once run, it will have updated as needed the 4 ``po`` files against the latest +source code. You may wish to use the command ``git gui`` to view the changes; +you can now edit the files to complete the translation, correct them, remove +deprecated stuff, … Please note that the encoding should be set to *UTF-8* as +this is now the standard. + +.. TODO: change mailing list address + +If you think an error message is too obscure, just ask on the developer mailing +list `wmaker-dev@lists.windowmaker.org +`_: in addition to clarifications +there's even a chance for the original message to be improved! + +You may find some information on working with ``po`` file in the `GNU gettext +documentation +`_. + +Translate the Man Pages +....................... + +You may want to extend the translation to the documentation that is provided to +users in the form of Unix *man pages*. The sources of the man pages are located +in the ``doc/`` directory; the translation should be placed in the directory +``doc/LANG/`` with the same file name. + +.. TODO: change mailing list address + +The directory will also need a file ``Makefile.am`` which provides the list of +man pages to be included in the distribution package and to be installed. You +can probably get inspiration from an existing one from another language; if you +do not feel confident about it do not hesitate to ask on the project's mailing +list (`wmaker-dev@lists.windowmaker.org +`_), either for help or to ask someone +to make it for you. + +Please note that although most man pages sources are directly in man page +format (*nroff*, the file extension being a number), a few of them are +processed by a script (those with the ``.in`` extension, like ``wmaker.in``). +This is done because in some case we want the man page to reflect the actual +compilation options. + +You may not want to bother with this hassle, in which case you can simply name +your translation file with the ``.1`` and remove the special ``@keyword@`` +marks. If you are sure you want to keep that processing but do not feel +confident about hacking the ``Makefile.am`` do not hesitate to ask on the +project's mailing list (`wmaker-dev@lists.windowmaker.org +`_). + +Checking the Result +................... + +In the WINDOW MAKER build tree you also have another target that can help you, +it is ``make check``. + +At current time, it does not check much, but if during the ``make update-lang`` +new ``po`` file have been created you may get some errors, because you have to +add these new files to the variable ``EXTRA_DIST`` in the corresponding +``Makefile``. + +If you do not feel confident about doing it, do not worry, just tell about it +when you submit your work, and some developer on the mailing list will just be +happy to do it for you when integrating your valuable contribution (we always +like when someone helps making WINDOW MAKER better). + +Submitting your Contribution +............................ + +*Preliminary Remark*: if the update process made changes in a ``po`` file but +you did not change any ``msgstr`` content, it is probably a good idea to not +submit the changes to that ``po`` file because it would just add noise. + +When you feel ready to send your changes, the first step is to prepare them. +This is done with ``git``: if you have not run the ``git gui`` previously then +it is a good time to do it now. This window offers you the possibility to show +your changes and to decide what you want to send. + +The window is divided in 4 panes: + +- top-right show the current changes you have selected, for review (and also + for cherry-picking stuff if you want to select precisely) +- top-left ("Unstaged Changes") the list of files with changes to be send, you + can click on the name of the file to see the changes, you can click on the + icon of the file if you want to send all the changes in this file; an icon in + blue shows a file that have been changed and an icon in black shows a file + that is new +- bottom-left ("Staged Changes") the list of files with changes that you have + chosen to send so far, you can click on the file name to view these changes, + you can click on the icon if you want to remove the changes from this file + from the list to send + +- bottom-right ("Commit Message") the message you want to attach to your + changes when you submit them to the development team + +The idea here is to pick your changes to the ``po`` files; for the *commit +message* you may wish to stuck to a simple, single line: + +| "Updated translations for " + +The penultimate step is to click on the button ``Sign Off`` (it will add a line +in the commit message), and then click on the button ``Commit``. From this +time, the commit message will clear itself and the "Staged Changes" also, +showing that your action was done. + +You may now quit the ``git gui``, the final step begins by running this +command: + +.. code:: console + :class: highlight + + git format-patch HEAD^ + +.. TODO: change mailing list address + +This will generate a file named like ``0001-updated-translations-for-XX.patch`` +which contains your changes, ready for sending. The goal will now be to email +this file to `wmaker-dev@lists.windowmaker.org +`_. If you feel confident in having +``git`` send it for you, you may want to read the file +``The-perfect-Window-Maker-patch.txt`` to see how to configure ``git`` for +mailing, so you can run: + +.. code:: console + :class: highlight + + git send-email 0001-updated-translations-for-XX.patch + +
    +
    +
    +
    Window Maker: Internationalisation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wmaker_install.html b/docs/wmaker_install.html new file mode 100644 index 0000000..60afdf2 --- /dev/null +++ b/docs/wmaker_install.html @@ -0,0 +1,789 @@ + + + + Window Maker: Compilation and Installation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + +
    +

    Window Maker Compilation and Installation

    + +

    A guide to configure, compile and install WINDOW MAKER from sources.

    + +

    This manual is for Window Maker, version git#next.

    +
    +
    +

    +1 Prerequisites

    +
    +

    +1.1 Supported Platforms

    +
      +
    • Intel GNU/Linux Systems in general, ix86 and x86_64 but other +architectures should work

    • +
    • BSD systems

    • +
    • Solaris, at least on release 10 and 11

    • +
    +

    Patches to make it work on other platforms are welcome.

    +
    +
    +

    +1.2 Software Dependencies

    +

    The following software is required to use WINDOW MAKER:

    +
      +
    • +

      X11R6.x

      +

      Window Maker can be compiled in older versions of X, like +X11R5 (Solaris) or X11R4 (OpenWindows) but +it will not work 100% correctly. In such servers there will not be +application icons and you'll have trouble using the dock. Upgrading the +client libraries (Xlib, Xt, etc.) will help if you +can't upgrade the server.

      +
    • +
    +

    The following is required to build WINDOW MAKER:

    +
      +
    • Basic obvious stuff +- gcc (or some other ANSI C compiler, supporting some C99 extensions) +- glibc development files (usually glibc-devel in Linux distributions) +- X development files (XFree86-devel or something similar)

    • +
    • +

      Xft2 and its dependencies

      +

      Dependencies include freetype2 and fontconfig. You will also need the +development files for them (xft2-devel). Sources are available at: +http://www.freedesktop.org/wiki/Software/Xft

      +
    • +
    +

    Note: WINDOW MAKER is known to compile with gcc and clang; the code +source is mostly ANSI C (also known as C89 and C90) but is uses very few of the +C99 novelties; it also uses a few attributes introduced in the C11 standard but +those are detected automatically, so most compilers should work.

    +
    +
    +

    +1.3 Special Dependencies

    +

    If you want to compile using the sources from the git repository instead of the +distribution package, you will also need:

    +
      +
    • git

    • +
    • autoconf 2.69

    • +
    • automake 1.12

    • +
    • libtool 1.4.2

    • +
    +
    +
    +

    +1.4 Optional Dependencies

    +

    These libraries are not required to make <small>WINDOW MAKER</small> work, but +they are supported in case you want to use them. Version numbers are indicative, +but other versions might work too.

    +
      +
    • +

      libXPM 4.7 or newer

      +

      Older versions may not work!

      +

      Available from http://xlibs.freedesktop.org/release

      +

      There is built-in support for <em>XPM</em> files, but it will not load images +in some uncommon encodings.

      +
    • +
    • +

      libpng 0.96 or newer and zlib

      +

      For PNG image support, http://www.libpng.org/pub/png/libpng.html

      +
    • +
    • +

      libtiff 3.4 or newer

      +

      For TIFF image support, http://www.libtiff.org/

      +
    • +
    • +

      libjpeg 6.0.1 or newer

      +

      For JPEG image support, http://www.ijg.org/

      +

      Note that if you don't have it, configure will issue a big warning in the +end, this is because JPEG images are often used in themes and for background +images so you probably want this format supported.

      +
    • +
    • +

      libgif 2.2 or libungif

      +

      For GIF image support, http://giflib.sourceforge.net/

      +
    • +
    • +

      WebP 0.4.1 or newer

      +

      The reference library from Google for their image format, +https://developers.google.com/speed/webp/download

      +
    • +
    • +

      GNU xgettext

      +

      If you want to use translated messages, you will need GNU gettext. +Other versions of gettext are not compatible and will not work. Get +the GNU version from http://www.gnu.org/software/gettext/

      +
    • +
    • +

      Pango 1.36.8 or newer

      +

      This library can be used by the WINGs toolkit to improve support for +UTF-8 and for languages written in right-to-left direction, in some +widgets. You have to explicitly ask for its support through (see Configure +Options). You can get it from +http://www.pango.org/Download

      +
    • +
    • +

      libbsd

      +

      This library can be used by the WINGs utility library to make use of +strlcat and strlcpy instead of using built-in functions if your system +does not provide them in its core libc. You should let WINDOW MAKER's +configure detect this for you. You can get it from +http://libbsd.freedesktop.org/wiki/

      +
    • +
    • +

      Inotify

      +

      If you have Linux's inotify support, WINDOW MAKER will use it to check for +configuration updates instead of polling regularly the file. The needed header +comes with the kernel, typical packages names include:

      +
        +
      • kernel-headers for Slackware and Fedora

      • +
      • linux-userspace-headers for Mageia

      • +
      • linux-libc-dev for Debian and Ubuntu

      • +
      • linux-glibc-devel for OpenSuSE

      • +
      +
    • +
    • +

      MagickWand 6.8.9-9 or newer

      +

      If found, then the library WRaster can use the ImageMagick library to let +WINDOW MAKER support more image formats, like SVG, BMP, TGA, ... You +can get it from http://www.imagemagick.org/

      +
    • +
    • +

      Boehm GC

      +

      This library can be used by the WINGs utility toolkit to use a +Boehm-Demers-Weiser Garbage Collector instead of the traditional +malloc/free functions from the libc. You have to explicitly ask for +its support though (see Configure Options). You can +get it from http://www.hboehm.info/gc/

      +
    • +
    +
    +
    +
    +
    +

    +2 Building WINDOW MAKER

    +
    +

    +2.1 Getting the Sources

    +

    The latest version of WINDOW MAKER (-crm) can be downloaded from +http://www.windowmaker.org/

    +

    Alternatively, the development branch, called #next is in the git +repository at http://repo.or.cz/w/wmaker-crm.git

    +

    If you want to use the git versions, you can get it with:

    +
    git clone -b next git://repo.or.cz/wmaker-crm.git
    +

    then, assuming you have the dependencies listed in Special Dependencies, you have to type:

    +
    ./autogen.sh
    +

    to generate the configuration script.

    +

    Build and Install

    +

    For a quick start, type the following in your shell prompt:

    +
    ./configure
    +make
    +

    then, login as root and type:

    +
    make install
    +ldconfig
    +

    or if you want to strip the debugging symbols from the binaries to make them +smaller, you can type instead:

    +
    make install-strip
    +ldconfig
    +

    This will build and install WINDOW MAKER with default parameters.

    +

    If you want to customise some compile-time options, you can do the following:

    +
      +
    1. +

      (optional) Look at the Configure Options, for the +options available. Also run:

      +
      ./configure --help
      +

      to get a complete list of options that are available.

      +
    2. +
    +
      +
    1. +

      Run configure with the options you want. For example, if you want to use the +--enable-modelock option, type:

      +
      ./configure --enable-modelock
      +
    2. +
    +
      +
    1. (optional) Edit src/wconfig.h with your favourite text editor and browse +through it for some options you might want to change.

    2. +
    +
      +
    1. +

      Compile. Just type:

      +
      make
      +
    2. +
    +
      +
    1. +

      Login as root (if you can't do that, read the [I don't have the +root](#No-Root-Password)) and install WINDOW MAKER in your system:

      +
      su root
      +make install
      +
    2. +
    +
    +
    +

    +2.2 User specific configuration

    +

    These instructions do not need to be followed when upgrading WINDOW MAKER +from an older version, unless stated differently in the NEWS file.

    +

    Every user on your system that wishes to run WINDOW MAKER must do the +following:

    +
      +
    1. +

      Install Window Maker configuration files in your home directory. Type:

      +
      wmaker.inst
      +

      wmaker.inst will install WINDOW MAKER configuration files and will setup +X to automatically launch WINDOW MAKER at startup.

      +
    2. +
    +

    That's it!

    +

    You can type man wmaker to get some general help for configuration and +other stuff.

    +

    Read the User Guide for a more in-depth explanation of WINDOW MAKER.

    +

    You might want to take a look at the FAQ too.

    +
    +
    +

    +2.3 Locales/Internationalisation

    +

    WINDOW MAKER has national language support. The procedure to enable national +language support is described in the dedicated +Enabling Languages support +in README.i18n.

    +
    +
    +

    +2.4 Configure Options

    +

    These options can be passed to the configure script to enable/disable some +WINDOW MAKER features. Example:

    +
    ./configure --enable-modelock --disable-gif
    +

    will configure WINDOW MAKER with modelock supported and disable gif support. +Normally, you won't need any of them.

    +

    To get the list of all options, run ./configure --help

    +
    +

    +2.4.1 Installation Directory

    +

    The default installation path will be in the /usr/local hierarchy; a number of +option can customise this:

    +
      +
    • --prefix=PREFIX

    • +
    • --exec-prefix=EPREFIX

    • +
    • --bindir=DIR

    • +
    • --sysconfdir=DIR

    • +
    • --libdir=DIR

    • +
    • --includedir=DIR

    • +
    • --datarootdir=DIR

    • +
    • --datadir=DIR

    • +
    • --localedir=DIR

    • +
    • +
      +
      --mandir=DIR
      +
      +

      Standard options from autoconf to define target paths, you probably want to +read Installation Names in `INSTALL`.

      +
      +
      +
    • +
    • --sbindir=DIR

    • +
    • --libexecdir=DIR

    • +
    • --sharedstatedir=DIR

    • +
    • --localstatedir=DIR

    • +
    • --oldincludedir=DIR

    • +
    • --infodir=DIR

    • +
    • --docdir=DIR

    • +
    • --htmldir=DIR

    • +
    • --dvidir=DIR

    • +
    • --pdfdir=DIR

    • +
    • +
      +
      --psdir=DIR
      +
      +

      More standard options from autoconf, today these are not used by WINDOW +MAKER; they are provided automatically by autoconf for consistency.

      +
      +
      +
    • +
    • +
      +
      --with-gnustepdir=PATH
      +
      +

      Specific to WINDOW MAKER, defines the directory where WPrefs.app will be +installed, if you want to install it like a GNUstep applications. If not +specified, it will be installed like usual programs.

      +
      +
      +
    • +
    • +
      +
      --with-pixmapdir=DIR
      +
      +

      Specific to WINDOW MAKER, this option defines an additional path where +pixmaps will be searched. Nothing will be installed there; the default +path taken is DATADIR/pixmaps, where ATADIR` is the path defined from ``--datadir.

      +
      +
      +
    • +
    • +
      +
      --with-defsdatadir=DIR
      +
      +

      Specific to WINDOW MAKER, defines the directory where system configuration +files, e.g., WindowMaker, WMRootMenu, etc., are installed. The +default value is SYSCONFDIR/WindowMaker, where SYSCONFDIR is the +path defined from --sysconfdir.

      +
      +
      +
    • +
    +
    +
    +

    +2.4.2 External Libraries

    +

    Unless specifically written, configure will try to detect automatically for +the libraries; if you explicitly provide --enable-FEATURE then it will +break with an error message if the library cannot be linked; if you specify +--disable-FEATURE then it will not try to search for the library. You can +find more information about the libraries in the Optional Dependencies

    +

    --enable-boehm-gc

    +
    +

    Never enabled by default, use Boehm GC instead of the default libc +malloc()

    +
    +

    --disable-gif

    +
    +

    Disable GIF support in WRaster library; when enabled use libgif or +libungif.

    +
    +

    --disable-jpeg

    +
    +

    Disable JPEG support in WRaster library; when enabled use libjpeg.

    +
    +

    --without-libbsd

    +
    +

    Refuse use of the libbsd compatibility library in WINGs utility +library, even if your system provides it.

    +
    +

    --disable-magick

    +
    +

    Disable ImageMagick's MagickWand support in WRaster, used to support for +image formats.

    +
    +

    --enable-pango

    +
    +

    Disabled by default, enable Pango text layout support in WINGs.

    +
    +

    --disable-png

    +
    +

    Disable PNG support in WRaster; when enabled use libpng.

    +
    +

    --disable-tiff

    +
    +

    Disable TIFF support in WRaster. when enabled use libtiff.

    +
    +

    --disable-webp

    +
    +

    Disable WEBP support in WRaster. when enabled use libwebp.

    +
    +

    --disable-xpm

    +
    +

    Disable use of libXpm for XPM support in WRaster, use internal code +instead.

    +
    +

    The following options can be used to tell configure about extra paths that +needs to be used when compiling against libraries:

    +

    --with-libs-from

    +
    +

    specify additional paths for libraries to be searched. The -L flag must +precede each path, like:

    +
    --with-libs-from="-L/opt/libs -L/usr/local/lib"
    +
    +

    --with-incs-from

    +
    +

    specify additional paths for header files to be searched. The -I flag +must precede each paths, like:

    +
    --with-incs-from="-I/opt/headers -I/usr/local/include"
    +
    +
    +
    +

    +2.4.3 X11 and Extensions

    +

    configure will try to detect automatically the compilation paths for X11 +headers and libraries, and which X Extensions support can be enabled. if you +explicitly provide --enable-FEATURE then it will break with an error +message if the extension cannot be used; if you specify --disable-FEATURE +then it will not check for the extension.

    +
      +
    • --x-includes=DIR

    • +
    • +

      --x-libraries=DIR

      +
      +

      Autoconf's option to specify search paths for X11, for the case were it +would not have been able to detect it automatically.

      +
      +
    • +
    +

    --disable-xlocale

    +
    +

    If you activated support for Native Languages, then X11 may use a hack to +also configure its locale support when the program configure the locale for +itself. The configure script detects if the Xlib supports this or +not; this options explicitly disable this initialisation mechanism.

    +
    +

    --enable-modelock

    +
    +

    XKB language status lock support. If you don't know what it is you probably +don't need it. The default is to not enable it.

    +
    +

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

    +
    +

    Disables support for shaped windows (for oclock, xeyes, etc.).

    +
    +

    --enable-xinerama

    +
    +

    The Xinerama extension provides information about the different screens +connected when running a multi-head setting (if you plug more than one +monitor).

    +
    +

    --enable-randr

    +
    +

    The RandR extension provides feedback when changing the multiple-monitor +configuration in X11 and allows to re-configure how screens are organised.

    +

    At current time, it is not enabled by default because it is NOT recommended +(buggy); WINDOW MAKER only restart itself when the configuration change, to +take into account the new screen size.

    +
    +
    +
    +

    +2.4.4 Feature Selection

    +

    --disable-animations

    +
    +

    Disable animations permanently, by not compiling the corresponding code into +WINDOW MAKER. When enabled (the default), you still have a run-time +configuration option in WPrefs.

    +
    +

    --disable-mwm-hints

    +
    +

    Disable support for Motif's MWM Window Manager hints. These attributes were +introduced by the Motif toolkit to ask for special window appearance +requests. Nowadays this is covered by the NetWM/EWMH specification, but +there are still applications that rely on MWM Hints.

    +
    +

    --enable-wmreplace

    +
    +

    Add support for the ICCCM protocol for cooperative window manager +replacement. This feature is disabled by default because you probably don't +need to switch seamlessly the window manager; if you are making a package +for a distribution you'd probably want to enable this because it allows +users to give a try to different window managers without restarting +everything for an extra cost that is not really big.

    +
    +

    --disable-xdnd

    +
    +

    Disable support for dragging and dropping files on the dock, which launches +a user-specified command with that file. Starting from version 0.65.6 this +feature is enabled by default.

    +
    +

    --enable-ld-version-script

    +
    +

    This feature is auto-detected, and you should not use this option. When +compiling a library (wrlib, ...), gcc has the possibility to filter +the list of functions that will be visible, to keep only the public API, +because it helps running programs faster.

    +

    The configure script checks if this feature is available; if you specify +this option it will not check anymore and blindly trust you that it is +supposed to work, which is not a good idea as you may encounter problems +later when compiling.

    +
    +

    --enable-usermenu

    +
    +

    This feature, disabled by default, allows to add a user-defined custom menu +to applications; when choosing an entry of the menu it will send the key +combination defined by the user to that application. See <a +href="http://repo.or.cz/wmaker-crm.git/blob/HEAD:/NEWS">Application User +Menu</a> in NEWS for more information.

    +
    +

    --with-menu-textdomain=DOMAIN

    +
    +

    Selection of the domain used for translation of the menus; see Translations +for Menus in README.i18n.

    +
    +
    +
    +

    +2.4.5 Developer Stuff

    +

    These options are disabled by default:

    +

    --config-cache

    +
    +

    If you intend to re-run the configure script often, you probably want to +include this option, so it will save and re-use the status of what have been +detected in the file config.cache.

    +
    +

    --enable-debug

    +
    +

    Enable debugging features (debug symbol, some extra verbosity and checks) +and add a number of check flags (warnings) for the compiler (in gcc +fashion).

    +
    +

    --enable-lcov=DIRECTORY

    +
    +

    Enable generation of code coverage and profiling data; if the DIRECTORY +is not specified, use coverage-report.

    +

    This option was meant to be use with gcc; it was not used recently so it +is probable that is does not work anymore; the configure script will not +even check that your compiling environment has the appropriate requirements +and works with this. Despite all this, if you think there's a use for it +and feel in the mood to help, do not hesitate to discuss on the mailing list +wmaker-dev@lists.windowmaker.org to get it working.

    +
    +
    +
    +
    +
    +

    +3 Miscellaneous

    +
    +

    +3.1 Platform Specific Notes

    +
      +
    • +

      GNU/Linux in general

      +

      Make sure you have /usr/local/lib in /etc/ld.so.conf and that you run +ldconfig after installing. Uninstall any packaged version of WINDOW MAKER +before installing a new version.

      +
    • +
    • +

      RedHat GNU/Linux

      +

      RedHat systems have several annoying problems. If you use it, be sure to +follow the steps below or WINDOW MAKER will not work:

      +
        +
      • if you installed the WINDOW MAKER that comes with RedHat, uninstall it +before upgrading;

      • +
      • make sure you have /usr/local/bin in your PATH environment variable;

      • +
      • make sure you have /usr/local/lib in /etc/ld.so.conf before running ldconfig;

      • +
      +
    • +
    • +

      PowerPC MkLinux

      +

      You will need to have the latest version of Xpmac. Older versions seem to +have bugs that cause the system to hang.

      +
    • +
    • +

      Debian GNU/Linux

      +

      If you want JPEG and TIFF support, make sure you have libtiff-dev +and libjpeg-dev installed.

      +
    • +
    • +

      SuSE GNU/Linux

      +

      If you installed the WINDOW MAKER package from SuSE, uninstall it before +trying to compile Window Maker or you might have problems.

      +
    • +
    • +

      MetroX (unknown version)

      +

      MetroX has a bug that corrupts pixmaps that are set as window backgrounds. +If you use MetroX and have weird problems with textures, do not use +textures in title bars. Or use a different X server.

      +
    • +
    +
    +
    +

    +3.2 I don't have the root password :(

    +

    If you can't get superuser privileges (can't be root) you can install Window +Maker in your own home directory. For that, supply the --prefix option +when running configure in step 2 of building WINDOW MAKER. You will also need +to supply the --with-gnustepdir option, to specify the path for +WPrefs.app.

    +

    Example:

    +
    ./configure --prefix=/home/jshmoe --with-gnustepdir=/home/jshmoe/GNUstep/Applications
    +

    Then make /home/jshmoe/bin be included in your search PATH, add +/home/jshmoe/lib to your LD_LIBRARY_PATH environment variable and run +bin/wmaker.inst

    +

    Of course, /home/jshmoe is supposed to be replaced by your actual home +directory path.

    +
    +
    +

    +3.3 Upgrading

    +

    If you are upgrading from an older version of WINDOW MAKER:

    +
      +
    1. Configure and build WINDOW MAKER as always

    2. +
    3. Install WINDOW MAKER (but do not run wmaker.inst)

    4. +
    5. Read the NEWS file and update your configuration files if necessary.

    6. +
    +
    +
    +
    +
    +

    +4 Troubleshooting

    +

    When you have some trouble during configuration (while running configure), like +not being able to use a graphic format library you think you have installed, +look at the config.log file for clues of the problem.

    +
    +

    +4.1 Error with loading fonts, even if they exist

    +

    This is probably a problem with NLS (Native Language Support), you probably +want to look at the Troubleshooting in +README.i18n or try rebuilding without NLS support, which is done with:

    +
    ./configure LINGUAS=""
    +
    +
    +

    +4.2 configure doesn't detect libtiff, or other graphic libraries

    +

    Delete config.cache, then rerun configure adding the following options to +configure (among the other options you use):

    +
    --with-libs-from="-L/usr/local/lib"
    +--with-incs-from="-I/usr/local/include -I/usr/local/include/tiff"
    +

    Put the paths where your graphic libs and their corresponding header files are +located. You can put multiple paths in any of these options, as the example of +--with-incs-from shows. Just put a space between them.

    +
    +
    +

    +4.3 configure doesn't detect libXpm +

    +

    Check if you have a symbolic link from libXpm.so.4.9 to libXpm.so

    +

    Segmentation fault on startup

    +
      +
    • Check if the version of libXPM you have is at least 4.7

    • +
    • Check if you have an updated version of ~/GNUstep/Defaults/WindowMaker

    • +
    +

    If you're not sure, try renaming ~/GNUstep to ~/GNUtmp and then run +wmaker.inst

    +
    +
    +

    +4.4 "...: your machine is misconfigured. gethostname() returned (none)"

    +

    the host name of your machine is set to something invalid, that starts with a parenthesis. +Do a man hostname for info about how to set it.

    +
    +
    +

    +4.5 The root menu contains only 2 entries. ("XTerm" and "Exit...")

    +

    WINDOW MAKER could not read your menu definition file. You should check the +output of wmaker for an error, it may be visible in the console or in the +.xsession-errors file.

    +
    +
    +
    + +
    +
    +
    +
    Window Maker: Compilation and Installation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docs/wmaker_install.rst b/docs/wmaker_install.rst new file mode 100644 index 0000000..06354d4 --- /dev/null +++ b/docs/wmaker_install.rst @@ -0,0 +1,796 @@ + + + + Window Maker: Compilation and Installation + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    + ========================================= +Window Maker Compilation and Installation +========================================= + +A guide to configure, compile and install WINDOW MAKER from sources. + +.. sectnum:: +.. contents:: Table of Contents + :backlinks: none + +This manual is for Window Maker, version git#next. + +---- + +Prerequisites +------------- + +Supported Platforms +................... + +- Intel GNU/Linux Systems in general, `ix86` and `x86_64` but other + architectures should work +- BSD systems +- Solaris, at least on release 10 and 11 + +Patches to make it work on other platforms are welcome. + +Software Dependencies +..................... + +The following software is required to use WINDOW MAKER: + +- X11R6.x + + Window Maker can be compiled in older versions of *X*, like + *X11R5* (*Solaris*) or *X11R4* (*OpenWindows*) but + it will not work 100% correctly. In such servers there will not be + application icons and you'll have trouble using the dock. Upgrading the + client libraries (*Xlib*, *Xt*, etc.) will help if you + can't upgrade the server. + +The following is required to build WINDOW MAKER: + +- Basic obvious stuff + - *gcc* (or some other ANSI C compiler, supporting some C99 extensions) + - *glibc* development files (usually ``glibc-devel`` in Linux distributions) + - *X* development files (``XFree86-devel`` or something similar) + +- *Xft2* and its dependencies + + Dependencies include *freetype2* and *fontconfig*. You will also need the + development files for them (``xft2-devel``). Sources are available at: + http://www.freedesktop.org/wiki/Software/Xft + +**Note**: WINDOW MAKER is known to compile with *gcc* and *clang*; the code +source is mostly ANSI C (also known as C89 and C90) but is uses very few of the +C99 novelties; it also uses a few attributes introduced in the C11 standard but +those are detected automatically, so most compilers should work. + +Special Dependencies +.................... + +If you want to compile using the sources from the git repository instead of the +distribution package, you will also need: + +- *git* +- *autoconf* 2.69 +- *automake* 1.12 +- *libtool* 1.4.2 + +Optional Dependencies +..................... + +These libraries are not required to make WINDOW MAKER work, but +they are supported in case you want to use them. Version numbers are indicative, +but other versions might work too. + +- *libXPM* 4.7 or newer + + Older versions may not work! + + Available from http://xlibs.freedesktop.org/release + + There is built-in support for XPM files, but it will not load images + in some uncommon encodings. + +- *libpng* 0.96 or newer and *zlib* + + For *PNG* image support, http://www.libpng.org/pub/png/libpng.html + +- *libtiff* 3.4 or newer + + For *TIFF* image support, http://www.libtiff.org/ + + +- *libjpeg* 6.0.1 or newer + + For *JPEG* image support, http://www.ijg.org/ + + Note that if you don't have it, ``configure`` will issue a big warning in the + end, this is because JPEG images are often used in themes and for background + images so you probably want this format supported. + +- *libgif* 2.2 or *libungif* + + For *GIF* image support, http://giflib.sourceforge.net/ + +- *WebP* 0.4.1 or newer + + The reference library from *Google* for their image format, + https://developers.google.com/speed/webp/download + +- *GNU xgettext* + + If you want to use translated messages, you will need *GNU gettext*. + Other versions of *gettext* are not compatible and will not work. Get + the *GNU* version from http://www.gnu.org/software/gettext/ + +- *Pango* 1.36.8 or newer + + This library can be used by the *WINGs* toolkit to improve support for + *UTF-8* and for languages written in right-to-left direction, in some + widgets. You have to explicitly ask for its support through (see `Configure + Options <#configure-options>`__). You can get it from + http://www.pango.org/Download + +- *libbsd* + + This library can be used by the *WINGs* utility library to make use of + ``strlcat`` and ``strlcpy`` instead of using built-in functions if your system + does not provide them in its core *libc*. You should let WINDOW MAKER's + ``configure`` detect this for you. You can get it from + http://libbsd.freedesktop.org/wiki/ + +- *Inotify* + + If you have Linux's *inotify* support, WINDOW MAKER will use it to check for + configuration updates instead of polling regularly the file. The needed header + comes with the kernel, typical packages names include: + + - ``kernel-headers`` for *Slackware* and *Fedora* + - ``linux-userspace-headers`` for *Mageia* + - ``linux-libc-dev`` for *Debian* and *Ubuntu* + - ``linux-glibc-devel`` for *OpenSuSE* + +- *MagickWand* 6.8.9-9 or newer + + If found, then the library *WRaster* can use the *ImageMagick* library to let + WINDOW MAKER support more image formats, like *SVG*, *BMP*, *TGA*, ... You + can get it from http://www.imagemagick.org/ + +- *Boehm GC* + + This library can be used by the *WINGs* utility toolkit to use a + *Boehm-Demers-Weiser Garbage Collector* instead of the traditional + ``malloc``/``free`` functions from the *libc*. You have to explicitly ask for + its support though (see `Configure Options <#configure-options>`__). You can + get it from http://www.hboehm.info/gc/ + +---- + +Building WINDOW MAKER +--------------------- + +Getting the Sources +................... + +The latest version of WINDOW MAKER (``-crm``) can be downloaded from +http://www.windowmaker.org/ + +Alternatively, the development branch, called ``#next`` is in the *git* +repository at http://repo.or.cz/w/wmaker-crm.git + +If you want to use the *git* versions, you can get it with: + +.. code:: console + :class: highlight + + git clone -b next git://repo.or.cz/wmaker-crm.git + +then, assuming you have the dependencies listed in `Special Dependencies +<#special-dependencies>`__, you have to type: + +.. code:: console + :class: highlight + + ./autogen.sh + +to generate the configuration script. + + +Build and Install + +For a quick start, type the following in your shell prompt: + +.. code:: console + :class: highlight + + ./configure + make + +then, login as *root* and type: + +.. code:: console + :class: highlight + + make install + ldconfig + +or if you want to strip the debugging symbols from the binaries to make them +smaller, you can type instead: + +.. code:: console + :class: highlight + + make install-strip + ldconfig + +This will build and install WINDOW MAKER with default parameters. + +If you want to customise some compile-time options, you can do the following: + +1. (optional) Look at the `Configure Options <#configure-options>`__, for the + options available. Also run: + + .. code:: console + :class: highlight + + ./configure --help + + to get a complete list of options that are available. + + +1. Run configure with the options you want. For example, if you want to use the + ``--enable-modelock`` option, type: + + .. code:: console + :class: highlight + + ./configure --enable-modelock + +1. (optional) Edit ``src/wconfig.h`` with your favourite text editor and browse + through it for some options you might want to change. + +1. Compile. Just type: + + .. code:: console + :class: highlight + + make + +1. Login as root (if you can't do that, read the [I don't have the + *root*](#No-Root-Password)) and install WINDOW MAKER in your system: + + .. code:: console + :class: highlight + + su root + make install + +User specific configuration +........................... + +These instructions do not need to be followed when upgrading WINDOW MAKER +from an older version, unless stated differently in the *NEWS* file. + +Every user on your system that wishes to run WINDOW MAKER must do the +following: + +1. Install Window Maker configuration files in your home directory. Type: + + .. code:: console + + wmaker.inst + + ``wmaker.inst`` will install WINDOW MAKER configuration files and will setup + X to automatically launch WINDOW MAKER at startup. + +That's it! + +You can type ``man wmaker`` to get some general help for configuration and +other stuff. + +Read the *User Guide* for a more in-depth explanation of WINDOW MAKER. + +You might want to take a look at the *FAQ* too. + +Locales/Internationalisation +............................ + +WINDOW MAKER has national language support. The procedure to enable national +language support is described in the dedicated +`Enabling Languages support `__ +in ``README.i18n``. + +Configure Options +................. + +These options can be passed to the configure script to enable/disable some +WINDOW MAKER features. Example: + +.. code:: console + :class: highlight + + ./configure --enable-modelock --disable-gif + +will configure WINDOW MAKER with *modelock* supported and disable *gif* support. +Normally, you won't need any of them. + +To get the list of all options, run ``./configure --help`` + +Installation Directory +'''''''''''''''''''''' + +The default installation path will be in the ``/usr/local`` hierarchy; a number of +option can customise this: + + +- ``--prefix=PREFIX`` +- ``--exec-prefix=EPREFIX`` +- ``--bindir=DIR`` +- ``--sysconfdir=DIR`` +- ``--libdir=DIR`` +- ``--includedir=DIR`` +- ``--datarootdir=DIR`` +- ``--datadir=DIR`` +- ``--localedir=DIR`` +- ``--mandir=DIR`` + Standard options from *autoconf* to define target paths, you probably want to + read Installation Names in *`INSTALL`*. + +- ``--sbindir=DIR`` +- ``--libexecdir=DIR`` +- ``--sharedstatedir=DIR`` +- ``--localstatedir=DIR`` +- ``--oldincludedir=DIR`` +- ``--infodir=DIR`` +- ``--docdir=DIR`` +- ``--htmldir=DIR`` +- ``--dvidir=DIR`` +- ``--pdfdir=DIR`` +- ``--psdir=DIR`` + More standard options from *autoconf*, today these are not used by WINDOW + MAKER; they are provided automatically by *autoconf* for consistency. + +- ``--with-gnustepdir=PATH`` + Specific to WINDOW MAKER, defines the directory where WPrefs.app will be + installed, if you want to install it like a *GNUstep* applications. If not + specified, it will be installed like usual programs. + +- ``--with-pixmapdir=DIR`` + Specific to WINDOW MAKER, this option defines an additional path where + *pixmaps* will be searched. Nothing will be installed there; the default + path taken is ``DATADIR/pixmaps``, where ``ATADIR` is the path defined from + ``--datadir``. + +- ``--with-defsdatadir=DIR`` + Specific to WINDOW MAKER, defines the directory where system configuration + files, e.g., ``WindowMaker``, ``WMRootMenu``, etc., are installed. The + default value is ``SYSCONFDIR/WindowMaker``, where ``SYSCONFDIR`` is the + path defined from ``--sysconfdir``. + + +External Libraries +'''''''''''''''''' + +Unless specifically written, ``configure`` will try to detect automatically for +the libraries; if you explicitly provide ``--enable-FEATURE`` then it will +break with an error message if the library cannot be linked; if you specify +``--disable-FEATURE`` then it will not try to search for the library. You can +find more information about the libraries in the `Optional Dependencies +<#Optional-Dependencies>`__ + + +``--enable-boehm-gc`` + + Never enabled by default, use Boehm GC instead of the default *libc* + ``malloc()`` + +``--disable-gif`` + + Disable GIF support in *WRaster* library; when enabled use ``libgif`` or + ``libungif``. + +``--disable-jpeg`` + + Disable JPEG support in *WRaster* library; when enabled use ``libjpeg``. + +``--without-libbsd`` + + Refuse use of the ``libbsd`` compatibility library in *WINGs* utility + library, even if your system provides it. + +``--disable-magick`` + + Disable *ImageMagick's MagickWand* support in *WRaster*, used to support for + image formats. + +``--enable-pango`` + + Disabled by default, enable *Pango* text layout support in *WINGs*. + +``--disable-png`` + + Disable PNG support in *WRaster*; when enabled use ``libpng``. + +``--disable-tiff`` + + Disable TIFF support in *WRaster*. when enabled use ``libtiff``. + +``--disable-webp`` + + Disable WEBP support in *WRaster*. when enabled use ``libwebp``. + +``--disable-xpm`` + + Disable use of ``libXpm`` for XPM support in *WRaster*, use internal code + instead. + +The following options can be used to tell ``configure`` about extra paths that +needs to be used when compiling against libraries: + +``--with-libs-from`` + + specify additional paths for libraries to be searched. The ``-L`` flag must + precede each path, like: + + .. code:: + :class: highlight + + --with-libs-from="-L/opt/libs -L/usr/local/lib" + +``--with-incs-from`` + + specify additional paths for header files to be searched. The ``-I`` flag + must precede each paths, like: + + .. code:: + :class: highlight + + --with-incs-from="-I/opt/headers -I/usr/local/include" + +X11 and Extensions +'''''''''''''''''' + +``configure`` will try to detect automatically the compilation paths for X11 +headers and libraries, and which X Extensions support can be enabled. if you +explicitly provide ``--enable-FEATURE`` then it will break with an error +message if the extension cannot be used; if you specify ``--disable-FEATURE`` +then it will not check for the extension. + +- ``--x-includes=DIR`` +- ``--x-libraries=DIR`` + + *Autoconf*'s option to specify search paths for *X11*, for the case were it + would not have been able to detect it automatically. + +``--disable-xlocale`` + + If you activated support for Native Languages, then *X11* may use a hack to + also configure its locale support when the program configure the locale for + itself. The ``configure`` script detects if the *Xlib* supports this or + not; this options explicitly disable this initialisation mechanism. + +``--enable-modelock`` + + XKB language status lock support. If you don't know what it is you probably + don't need it. The default is to not enable it. + +``--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-shape`` + + Disables support for *shaped* windows (for ``oclock``, ``xeyes``, etc.). + +``--enable-xinerama`` + + The *Xinerama* extension provides information about the different screens + connected when running a multi-head setting (if you plug more than one + monitor). + +``--enable-randr`` + + The *RandR* extension provides feedback when changing the multiple-monitor + configuration in X11 and allows to re-configure how screens are organised. + + At current time, it is not enabled by default because it is NOT recommended + (buggy); WINDOW MAKER only restart itself when the configuration change, to + take into account the new screen size. + +Feature Selection +''''''''''''''''' + + +``--disable-animations`` + + Disable animations permanently, by not compiling the corresponding code into + WINDOW MAKER. When enabled (the default), you still have a run-time + configuration option in *WPrefs*. + +``--disable-mwm-hints`` + + Disable support for Motif's MWM Window Manager hints. These attributes were + introduced by the Motif toolkit to ask for special window appearance + requests. Nowadays this is covered by the NetWM/EWMH specification, but + there are still applications that rely on MWM Hints. + +``--enable-wmreplace`` + + Add support for the *ICCCM* protocol for cooperative window manager + replacement. This feature is disabled by default because you probably don't + need to switch seamlessly the window manager; if you are making a package + for a distribution you'd probably want to enable this because it allows + users to give a try to different window managers without restarting + everything for an extra cost that is not really big. + +``--disable-xdnd`` + + Disable support for dragging and dropping files on the dock, which launches + a user-specified command with that file. Starting from version 0.65.6 this + feature is enabled by default. + +``--enable-ld-version-script`` + + This feature is auto-detected, and you should not use this option. When + compiling a library (``wrlib``, ...), *gcc* has the possibility to filter + the list of functions that will be visible, to keep only the public API, + because it helps running programs faster. + + The ``configure`` script checks if this feature is available; if you specify + this option it will not check anymore and blindly trust you that it is + supposed to work, which is not a good idea as you may encounter problems + later when compiling. + +``--enable-usermenu`` + + This feature, disabled by default, allows to add a user-defined custom menu + to applications; when choosing an entry of the menu it will send the key + combination defined by the user to that application. See Application User + Menu in *NEWS* for more information. + +``--with-menu-textdomain=DOMAIN`` + + Selection of the domain used for translation of the menus; see `Translations + for Menus `__ in *README.i18n*. + + +Developer Stuff +''''''''''''''' + +These options are disabled by default: + +``--config-cache`` + + If you intend to re-run the ``configure`` script often, you probably want to + include this option, so it will save and re-use the status of what have been + detected in the file ``config.cache``. + + +``--enable-debug`` + + Enable debugging features (debug symbol, some extra verbosity and checks) + and add a number of check flags (warnings) for the compiler (in *gcc* + fashion). + +``--enable-lcov=DIRECTORY`` + + Enable generation of code coverage and profiling data; if the ``DIRECTORY`` + is not specified, use ``coverage-report``. + + This option was meant to be use with *gcc*; it was not used recently so it + is probable that is does not work anymore; the ``configure`` script will not + even check that your compiling environment has the appropriate requirements + and works with this. Despite all this, if you think there's a use for it + and feel in the mood to help, do not hesitate to discuss on the mailing list + `wmaker-dev@lists.windowmaker.org + `__ to get it working. + +Miscellaneous +------------- + +Platform Specific Notes +....................... + +- *GNU/Linux* in general + + Make sure you have ``/usr/local/lib`` in ``/etc/ld.so.conf`` and that you run + ``ldconfig`` after installing. Uninstall any packaged version of WINDOW MAKER + before installing a new version. + +- *RedHat GNU/Linux* + + *RedHat* systems have several annoying problems. If you use it, be sure to + follow the steps below or WINDOW MAKER will not work: + + + - if you installed the WINDOW MAKER that comes with *RedHat*, uninstall it + before upgrading; + + - make sure you have ``/usr/local/bin`` in your ``PATH`` environment variable; + + - make sure you have ``/usr/local/lib`` in ``/etc/ld.so.conf`` before running ``ldconfig``; + +- *PowerPC MkLinux* + + You will need to have the latest version of *Xpmac*. Older versions seem to + have bugs that cause the system to hang. + +- *Debian GNU/Linux* + + If you want *JPEG* and *TIFF* support, make sure you have ``libtiff-dev`` + and ``libjpeg-dev`` installed. + +- *SuSE GNU/Linux* + + If you installed the WINDOW MAKER package from *SuSE*, uninstall it before + trying to compile *Window Maker* or you might have problems. + +- *MetroX* (unknown version) + + *MetroX* has a bug that corrupts pixmaps that are set as window backgrounds. + If you use *MetroX* and have weird problems with textures, do not use + textures in title bars. Or use a different X server. + +I don't have the *root* password :( +................................... + +If you can't get superuser privileges (can't be *root*) you can install *Window +Maker* in your own home directory. For that, supply the ``--prefix`` option +when running configure in step 2 of building WINDOW MAKER. You will also need +to supply the ``--with-gnustepdir`` option, to specify the path for +``WPrefs.app``. + +Example: + +.. code:: console + :class: highlight + + ./configure --prefix=/home/jshmoe --with-gnustepdir=/home/jshmoe/GNUstep/Applications + +Then make ``/home/jshmoe/bin`` be included in your search ``PATH``, add +``/home/jshmoe/lib`` to your ``LD_LIBRARY_PATH`` environment variable and run +``bin/wmaker.inst`` + +Of course, ``/home/jshmoe`` is supposed to be replaced by your actual home +directory path. + + +Upgrading +......... + +If you are upgrading from an older version of WINDOW MAKER: + +#. Configure and build WINDOW MAKER as always +#. Install WINDOW MAKER (but do not run ``wmaker.inst``) +#. Read the *NEWS* file and update your configuration files if necessary. + +---- + +Troubleshooting +--------------- + +When you have some trouble during configuration (while running configure), like +not being able to use a graphic format library you think you have installed, +look at the ``config.log`` file for clues of the problem. + +Error with loading fonts, even if they exist +............................................ + +This is probably a problem with NLS (Native Language Support), you probably +want to look at the `Troubleshooting `__ in +*README.i18n* or try rebuilding without NLS support, which is done with: + + +.. code:: console + :class: highlight + + ./configure LINGUAS="" + +configure doesn't detect *libtiff*, or other graphic libraries +.............................................................. + +Delete ``config.cache``, then rerun configure adding the following options to +``configure`` (among the other options you use): + +.. code:: console + :class: highlight + + --with-libs-from="-L/usr/local/lib" + --with-incs-from="-I/usr/local/include -I/usr/local/include/tiff" + +Put the paths where your graphic libs and their corresponding header files are +located. You can put multiple paths in any of these options, as the example of +``--with-incs-from`` shows. Just put a space between them. + +configure doesn't detect *libXpm* +................................. + +Check if you have a symbolic link from ``libXpm.so.4.9`` to ``libXpm.so`` + +Segmentation fault on startup + +- Check if the version of *libXPM* you have is at least 4.7 +- Check if you have an updated version of ``~/GNUstep/Defaults/WindowMaker`` + +If you're not sure, try renaming ``~/GNUstep`` to ``~/GNUtmp`` and then run +``wmaker.inst`` + +"...: your machine is misconfigured. gethostname() returned (none)" +................................................................... + +the host name of your machine is set to something invalid, that starts with a parenthesis. +Do a ``man hostname`` for info about how to set it. + + +The root menu contains only 2 entries. ("XTerm" and "Exit...") +.............................................................. + +WINDOW MAKER could not read your menu definition file. You should check the +output of ``wmaker`` for an error, it may be visible in the console or in the +``.xsession-errors`` file. + +
    +
    +
    +
    Window Maker: Compilation and Installation
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..b1cfb3f Binary files /dev/null and b/favicon.ico differ diff --git a/features.html b/features.html new file mode 100644 index 0000000..e2697f4 --- /dev/null +++ b/features.html @@ -0,0 +1,138 @@ + + + + Window Maker: Features + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    Features

    + +

    Window Maker firmly adheres to the behavior and functionality of the +NeXTSTEP™ user interface. The +developers have put forth a great deal of effort in capturing the essence and +beauty of the original design, and have incorporated some new ideas of their +own. This has always followed the philosophy of keeping to those features which +fit well into the overall design, while limiting the amount of “feature creep” +that tends to bloat other window managers. A summary of the main Window Maker +features are presented below.

    + +

    Core (usability)

    + +
      +
    • Almost complete ICCM compliance.
    • +
    • National language I18N support (over 11 locales).
    • +
    • Built-in icon dithering with support for 4bpp and 8bpp displays.
    • +
    • Popup menus that support keyboard traversal, which can be “pinned” to the +root window.
    • +
    • Support for GNUstep, GNOME, and +KDE window hints to better integrate with those desktop +environments.
    • +
    • Support for Motif™ and OPEN LOOK™ window hints to better +interface with applications based on those toolkits.
    • +
    • Built-in GUI configuration utility that eliminates the need to hand edit +config files.
    • +
    • Application Dock (similar to +NEXTSTEP/MacOS X Dock) that can be configured using drag and drop.
    • +
    • Workspace Dock (aka Clip/Fiend) which is a workspace specific Dock extender.
    • +
    • Support for rudimentary session management.
    • +
    • Support for dockapps (equivalent of +applets or epplets).
    • +
    • Ability to change all preferences and menus on-the-fly without having to +restart the window manager.
    • +
    • Support for multiple workspaces (aka “virtual desktops”).
    • +
    • Multiple display support (Xinerama +and XRandR extensions)
    • +
    • Ability to maximize windows in half left/right/top/bottom of the screen and +also quarters.
    • +
    • Ability to display minimized window content as small preview (apercu).
    • +
    • Up to 9 buttons mouses support.
    • +
    • And more. You can go either through the git +log and/or +NEWS file.
    • +
    + +

    Extras (eye candy)

    + +
      +
    • Built-in themes support.
    • +
    • Over 13 types of window decorations, including custom defined.
    • +
    • Support for XPM, PNG, JPEG, TIFF, GIF and PPM icons (no conversions with +external programs) with an alpha-channel.
    • +
    • Additional format, which ImageMagick supports, +will be accessible if compiled with ImageMagick support.
    • +
    • Support for setting the root window background (via the wmsetbg utility). Even +differnt one per workspace.
    • +
    • Optional superfluous animations, such as window shading, customizeable icon +miniaturization effects, slide/scrolling menus, and much more.
    • +
    + +

    Despite all of these features, Window Maker is not resource intensive and +remains stable across many UNIX varients. It is extremely flexible, and many +options can be included or excluded at compile time. This means that you can +easily tailor Window Maker to meet your needs; whether you are a minimalist +wanting to save resources, or an extremist that likes to theme everything in +sight. A screenshot of a typical Window Maker workspace is +here.

    + +
    +
    +
    +
    Window Maker: Features
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/img/close.png b/img/close.png new file mode 100644 index 0000000..7fb60f5 Binary files /dev/null and b/img/close.png differ diff --git a/img/dock_devel.png b/img/dock_devel.png new file mode 100644 index 0000000..f7332dc Binary files /dev/null and b/img/dock_devel.png differ diff --git a/img/dock_dock.png b/img/dock_dock.png new file mode 100644 index 0000000..0ed3314 Binary files /dev/null and b/img/dock_dock.png differ diff --git a/img/dock_docs.png b/img/dock_docs.png new file mode 100644 index 0000000..92331a3 Binary files /dev/null and b/img/dock_docs.png differ diff --git a/img/dock_home.png b/img/dock_home.png new file mode 100644 index 0000000..434f133 Binary files /dev/null and b/img/dock_home.png differ diff --git a/img/dock_links.png b/img/dock_links.png new file mode 100644 index 0000000..8571c5e Binary files /dev/null and b/img/dock_links.png differ diff --git a/img/dock_mag.png b/img/dock_mag.png new file mode 100644 index 0000000..0f1441c Binary files /dev/null and b/img/dock_mag.png differ diff --git a/img/dock_mail.png b/img/dock_mail.png new file mode 100644 index 0000000..257dfe5 Binary files /dev/null and b/img/dock_mail.png differ diff --git a/img/dock_news.png b/img/dock_news.png new file mode 100644 index 0000000..3d8b09c Binary files /dev/null and b/img/dock_news.png differ diff --git a/img/dock_themes.png b/img/dock_themes.png new file mode 100644 index 0000000..5ed5ea3 Binary files /dev/null and b/img/dock_themes.png differ diff --git a/img/essential_dockapps.png b/img/essential_dockapps.png new file mode 100644 index 0000000..fec24f2 Binary files /dev/null and b/img/essential_dockapps.png differ diff --git a/img/gnustep.svg b/img/gnustep.svg new file mode 100644 index 0000000..5f4d197 --- /dev/null +++ b/img/gnustep.svg @@ -0,0 +1,261 @@ + + + + + GNUstep logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + GNUstep logo + 21-06-2014 + + + Roman "gryf" Dobosz + + + + + + + + + + Window Maker + wmaker + GNUstep + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/minimize.png b/img/minimize.png new file mode 100644 index 0000000..e66ab0e Binary files /dev/null and b/img/minimize.png differ diff --git a/img/prefs_devel.png b/img/prefs_devel.png new file mode 100644 index 0000000..684804a Binary files /dev/null and b/img/prefs_devel.png differ diff --git a/img/prefs_docs.png b/img/prefs_docs.png new file mode 100644 index 0000000..a0ca7fa Binary files /dev/null and b/img/prefs_docs.png differ diff --git a/img/prefs_home.png b/img/prefs_home.png new file mode 100644 index 0000000..5c41105 Binary files /dev/null and b/img/prefs_home.png differ diff --git a/img/prefs_links.png b/img/prefs_links.png new file mode 100644 index 0000000..71a1d3d Binary files /dev/null and b/img/prefs_links.png differ diff --git a/img/prefs_mag.png b/img/prefs_mag.png new file mode 100644 index 0000000..bc777eb Binary files /dev/null and b/img/prefs_mag.png differ diff --git a/img/prefs_mail.png b/img/prefs_mail.png new file mode 100644 index 0000000..a9892e5 Binary files /dev/null and b/img/prefs_mail.png differ diff --git a/img/prefs_news.png b/img/prefs_news.png new file mode 100644 index 0000000..dec1088 Binary files /dev/null and b/img/prefs_news.png differ diff --git a/img/prefs_themes.png b/img/prefs_themes.png new file mode 100644 index 0000000..f2b1e08 Binary files /dev/null and b/img/prefs_themes.png differ diff --git a/img/v0_95_1.png b/img/v0_95_1.png new file mode 100644 index 0000000..595b190 Binary files /dev/null and b/img/v0_95_1.png differ diff --git a/img/wmaker-screenshot.png b/img/wmaker-screenshot.png new file mode 100644 index 0000000..266511c Binary files /dev/null and b/img/wmaker-screenshot.png differ diff --git a/img/wmaker.png b/img/wmaker.png new file mode 100644 index 0000000..2f37b73 Binary files /dev/null and b/img/wmaker.png differ diff --git a/img/wmaker_thumb.png b/img/wmaker_thumb.png new file mode 100644 index 0000000..c7b4d87 Binary files /dev/null and b/img/wmaker_thumb.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..bf5ef4b --- /dev/null +++ b/index.html @@ -0,0 +1,114 @@ + + + + Window Maker: Home + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    Introduction

    + +

    Window Maker, often abbreviated to wmaker, is an X11 window +manager originally designed to +provide integration support for the GNUstep Desktop +Environment, although it can run stand alone. In every way possible, it +reproduces the elegant look and feel of the +NeXTSTEP user interface.

    + +

    Default Window Maker config

    + +

    Window Maker on first run

    + +

    The key features of Window Maker are:

    + +
      +
    • Stacking window manager with ability for semi-automatic tiling management
    • +
    • Lightweight and blazing fast
    • +
    • Easy to use
    • +
    • Highly configurable
    • +
    • Ability to bind keyboard shortcut to wide set of actions
    • +
    • Dynamic menu entries
    • +
    • Small, dockable apps (dockapps)
    • +
    • Human readable config files and GUI prefs application
    • +
    • Free and open source
    • +
    • Active community from all of the world
    • +
    + +

    See features section for more. In screenshots +section you can see examples of how users set up their desktops.

    + +

    Download

    + +

    Many distributions already have Window Maker included in their software +repositories, so it could be installed directly from there. Other sources are +listed below:

    + +
      +
    • Latest source of stable version is +0.95.9, released on +04.04.2020. See the NEWS section for more information.
    • +
    • Source code is also available through the +git repository
    • +
    + +
    +
    +
    +
    Window Maker: Home
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/links/index.html b/links/index.html new file mode 100644 index 0000000..964fd4e --- /dev/null +++ b/links/index.html @@ -0,0 +1,119 @@ + + + + Window Maker: Links + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    External links

    + + + +
      +
    • Dockapps – The home of the currently available +dockapps for the Window Maker,
    • +
    • WMLive CD – A remastered Ubuntu live CD +featuring Window Maker as default window manager,
    • +
    • OneStepBack +– Gnome 2 and 3 theme with a NextStep look,
    • +
    • Source code of +this very webpage.
    • +
    + + + + + +

    Blogs

    + + + +

    Outdated

    + + + +
    +
    +
    +
    Window Maker: Links
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/lists/index.html b/lists/index.html new file mode 100644 index 0000000..31d5a85 --- /dev/null +++ b/lists/index.html @@ -0,0 +1,142 @@ + + + + Window Maker: Community + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    Community

    + +

    There are couple of ways, how to reach Window Maker community.

    + +

    Mailing Lists

    + +

    Mailing lists are main point of contact, especially for development group which +is quite small, and often tend to be pretty quiet for couple of weeks.

    + +

    Listed below are the currently available Window Maker mailing lists. We have +switched our list over to Google Groups.

    + +

    Window Maker Developer List

    + +

    The Window Maker developer list is aimed at developers and others interested in +the inner workings of Window Maker.

    + + + +

    Window Maker User List

    + +

    The Window Maker user list is aimed at the end user for questions, tips, +suggestions and general discussion.

    + + + +

    Subscribe/Unsubscribe

    + +

    Please see the Google Groups +documentation.

    + +

    Etiquette

    + +

    The following rules of etiquette are to be followed when posting to any of the +lists:

    + +
      +
    • Do not top post.
    • +
    • Use of excessive quoting in E-mail replies is frowned upon.
    • +
    • HTML messages and non-text attachments will be rejected.
    • +
    • Please consider reading some of our documentation +before posting questions to the lists. The Window Maker source code comes +with a README, INSTALL, and NEWS file. There is also a +FAQ to read.
    • +
    • Please, please, and pretty please THINK before you post. Try very hard not +to intentionally provoke others and cause flame-wars. We reserve the right to +unsubscribe and ban any user that has a history of causing trouble.
    • +
    + +

    IRC

    + +

    There is a #windowmaker channel on +freenode, which can be reached using appropriate +client +or, simply by using freenode web interface. +Please be aware, that answers for questions asked there could take even couple +of hours, since there are people from different time zones.

    + +

    Reddit

    + +

    There is also a group on Reddit +dedicated to discussion on Window Maker.

    + +
    +
    +
    +
    Window Maker: Community
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/news/fulldiffstat.html b/news/fulldiffstat.html new file mode 100644 index 0000000..a9e827f --- /dev/null +++ b/news/fulldiffstat.html @@ -0,0 +1,871 @@ + + + + Window Maker: News - diff from version 0.92.0+ to 0.95.1 + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +
    $ git diff --stat --summary 688a56e8ab67b..wmaker-0.95.1
    +.cvsignore                                 |    8 -
    +.gitignore                                 |   98 +-
    +AUTHORS                                    |    2 +-
    +BUGFORM                                    |    6 +-
    +COPYING                                    |   31 +-
    +COPYING.OPL                                |   91 -
    +FAQ                                        |   63 +-
    +FAQ.I18N                                   |    2 +-
    +FAQ.I18N.cs                                |   64 -
    +FAQ.I18N.sk                                |   57 -
    +INSTALL                                    |  540 ---
    +INSTALL-WMAKER                             |  436 +++
    +INSTALL.cs                                 |  604 ---
    +INSTALL.es                                 |  594 ---
    +INSTALL.fr                                 |  631 ---
    +INSTALL.pt                                 |  557 ---
    +INSTALL.sk                                 |  601 ---
    +MIRRORS                                    |   90 -
    +Makefile.am                                |   55 +-
    +NEWS                                       |   73 +
    +README                                     |  224 +-
    +README.es                                  |  345 --
    +README.pt                                  |  351 --
    +TODO                                       |    1 -
    +The-perfect-Window-Maker-patch.txt         |  153 +
    +WINGs/.cvsignore                           |    4 -
    +WINGs/Documentation/.cvsignore             |    2 -
    +WINGs/Documentation/Makefile.am            |    4 +-
    +WINGs/Documentation/README.connection      |   51 -
    +WINGs/Examples/.cvsignore                  |    5 -
    +WINGs/Examples/Makefile.am                 |   23 +-
    +WINGs/Examples/connect.c                   |  172 -
    +WINGs/Examples/fontl.c                     |    9 +-
    +WINGs/Examples/puzzle.c                    |    4 +-
    +WINGs/Examples/server.c                    |  661 ----
    +WINGs/Extras/.cvsignore                    |    4 -
    +WINGs/Extras/Makefile.am                   |   26 +-
    +WINGs/Extras/test.c                        |    6 +-
    +WINGs/Extras/wtabledelegates.c             |   12 +-
    +WINGs/Makefile.am                          |  105 +-
    +WINGs/NEWS                                 |  157 +
    +WINGs/Resources/.cvsignore                 |    2 -
    +WINGs/Tests/.cvsignore                     |    4 -
    +WINGs/Tests/Makefile.am                    |   17 +-
    +WINGs/Tests/wtest.c                        |    2 +-
    +WINGs/WINGs/.cvsignore                     |    1 -
    +WINGs/WINGs/Makefile.am                    |   13 +-
    +WINGs/WINGs/WINGs.h                        |  129 +-
    +WINGs/WINGs/WINGsP.h                       |    5 +-
    +WINGs/WINGs/WUtil.h                        |  300 +--
    +WINGs/WINGs/proplist-compat.h              |  138 -
    +WINGs/bagtree.c                            |    6 -
    +WINGs/configuration.c                      |   16 +-
    +WINGs/connection.c                         |  958 -----
    +WINGs/dragcommon.c                         |    2 +-
    +WINGs/dragdestination.c                    |    6 +-
    +WINGs/dragsource.c                         |    4 +-
    +WINGs/error.c                              |  194 +-
    +WINGs/findfile.c                           |  197 +-
    +WINGs/get-wings-flags.in                   |   31 +
    +WINGs/get-wutil-flags.in                   |   31 +
    +WINGs/hashtable.c                          |    1 -
    +WINGs/host.c                               |  265 --
    +WINGs/international.c                      |    9 -
    +WINGs/memory.c                             |   53 +-
    +WINGs/notification.c                       |   11 +-
    +WINGs/po/.cvsignore                        |    4 -
    +WINGs/po/Makefile.am                       |    2 -
    +WINGs/proplist.c                           |  215 +-
    +WINGs/puzzle.c                             |  232 --
    +WINGs/python/.cvsignore                    |    5 -
    +WINGs/python/Makefile                      |   17 -
    +WINGs/python/README                        |   20 -
    +WINGs/python/WINGs.i                       |  699 ----
    +WINGs/python/WINGs.py                      |  643 ----
    +WINGs/python/setup.py                      |   71 -
    +WINGs/python/test.py                       |  159 -
    +WINGs/selection.c                          |    3 -
    +WINGs/snprintf.c                           |  941 -----
    +WINGs/string.c                             |  266 ++-
    +WINGs/tree.c                               |   59 +-
    +WINGs/userdefaults.c                       |  110 +-
    +WINGs/usleep.c                             |   53 +-
    +WINGs/wapplication.c                       |  132 +-
    +WINGs/wballoon.c                           |    1 -
    +WINGs/wbox.c                               |    3 +-
    +WINGs/wbrowser.c                           |   75 +-
    +WINGs/wcolor.c                             |    8 +-
    +WINGs/wcolorpanel.c                        |   80 +-
    +WINGs/wcolorwell.c                         |    1 -
    +WINGs/wconfig.h                            |    2 +-
    +WINGs/wevent.c                             |    2 +-
    +WINGs/wfilepanel.c                         |  291 +-
    +WINGs/wfont.c                              |    1 -
    +WINGs/wfont_noxft.c                        |  701 ----
    +WINGs/wfont_wchar.c                        |  543 ---
    +WINGs/wfontpanel.c                         |   17 +-
    +WINGs/wframe.c                             |    1 -
    +WINGs/wlabel.c                             |    1 -
    +WINGs/wlist.c                              |    7 +-
    +WINGs/wmenuitem.c                          |    1 -
    +WINGs/wmisc.c                              |   37 -
    +WINGs/wpanel.c                             |    5 +-
    +WINGs/wpopupbutton.c                       |    4 +-
    +WINGs/wprogressindicator.c                 |    1 -
    +WINGs/wruler.c                             |    2 -
    +WINGs/wscroller.c                          |   10 +-
    +WINGs/wscrollview.c                        |    2 -
    +WINGs/wslider.c                            |    2 -
    +WINGs/wsplitview.c                         |    8 +-
    +WINGs/wtabview.c                           |   12 +-
    +WINGs/wtext.c                              |    7 +-
    +WINGs/wtextfield.c                         |   22 +-
    +WINGs/wview.c                              |    2 -
    +WINGs/wwindow.c                            |   22 +-
    +WPrefs.app/.cvsignore                      |    4 -
    +WPrefs.app/Appearance.c                    |   29 +-
    +WPrefs.app/Configurations.c                |  125 +-
    +WPrefs.app/Expert.c                        |   54 +-
    +WPrefs.app/Focus.c                         |   12 +-
    +WPrefs.app/Font.c                          | 1981 ----------
    +WPrefs.app/FontSimple.c                    |    7 +-
    +WPrefs.app/Icons.c                         |    7 +-
    +WPrefs.app/KeyboardSettings.c              |    7 +-
    +WPrefs.app/KeyboardShortcuts.c             |   83 +-
    +WPrefs.app/Makefile.am                     |   28 +-
    +WPrefs.app/Menu.c                          |  130 +-
    +WPrefs.app/MenuPreferences.c               |    7 +-
    +WPrefs.app/MouseSettings.c                 |   19 +-
    +WPrefs.app/Paths.c                         |   12 +-
    +WPrefs.app/Preferences.c                   |   25 +-
    +WPrefs.app/README                          |    9 +-
    +WPrefs.app/TexturePanel.c                  |   11 +-
    +WPrefs.app/TexturePanel.h                  |    7 +-
    +WPrefs.app/Themes.c                        |    9 +-
    +WPrefs.app/WPrefs.c                        |   22 +-
    +WPrefs.app/WPrefs.h                        |   32 +-
    +WPrefs.app/WindowHandling.c                |  110 +-
    +WPrefs.app/Workspace.c                     |   11 +-
    +WPrefs.app/editmenu.c                      |   17 +-
    +WPrefs.app/editmenu.h                      |    7 +-
    +WPrefs.app/imagebrowser.c                  |  143 -
    +WPrefs.app/imagebrowser.h                  |   28 -
    +WPrefs.app/main.c                          |   10 +-
    +WPrefs.app/po/.cvsignore                   |    4 -
    +WPrefs.app/po/Makefile.am                  |    1 -
    +WPrefs.app/po/README                       |   16 +-
    +WPrefs.app/po/bg.po                        | 5738 ++++++++++++++--------------
    +WPrefs.app/po/ca.po                        |    4 +-
    +WPrefs.app/po/cs.po                        |    4 +-
    +WPrefs.app/po/de.po                        | 1087 +++---
    +WPrefs.app/po/es.po                        |    4 +-
    +WPrefs.app/po/et.po                        |    2 +-
    +WPrefs.app/po/fi.po                        |    4 +-
    +WPrefs.app/po/fr.po                        |    4 +-
    +WPrefs.app/po/hr.po                        |    4 +-
    +WPrefs.app/po/hu.po                        |    4 +-
    +WPrefs.app/po/it.po                        | 4292 +++++++++++-----------
    +WPrefs.app/po/ja.po                        |    4 +-
    +WPrefs.app/po/ko.po                        |    4 +-
    +WPrefs.app/po/pt.po                        |    4 +-
    +WPrefs.app/po/ru.po                        |    4 +-
    +WPrefs.app/po/sk.po                        |    4 +-
    +WPrefs.app/po/zh_CN.po                     |    4 +-
    +WPrefs.app/po/zh_TW.po                     |    4 +-
    +WPrefs.app/tiff/.cvsignore                 |    2 -
    +WPrefs.app/tiff/Makefile.am                |    5 +
    +WPrefs.app/tiff/README                     |    4 -
    +WPrefs.app/tiff/nextstyle.tiff             |  Bin 0 -&gt; 4004 bytes
    +WPrefs.app/tiff/noopaqueresize.tiff        |  Bin 0 -&gt; 9522 bytes
    +WPrefs.app/tiff/oldstyle.tiff              |  Bin 1044 -&gt; 4004 bytes
    +WPrefs.app/tiff/opaqueresize.tiff          |  Bin 0 -&gt; 9519 bytes
    +WPrefs.app/xmodifier.c                     |   85 +-
    +WPrefs.app/xpm/.cvsignore                  |    2 -
    +WPrefs.app/xpm/Makefile.am                 |    4 +
    +WPrefs.app/xpm/nextstyle.xpm               |  120 +
    +WPrefs.app/xpm/noopaqueresize.xpm          |  553 +++
    +WPrefs.app/xpm/oldstyle.xpm                |   94 +-
    +WPrefs.app/xpm/opaqueresize.xpm            |  549 +++
    +WindowMaker/.cvsignore                     |    2 -
    +WindowMaker/Backgrounds/.cvsignore         |    2 -
    +WindowMaker/Defaults/.cvsignore            |    3 -
    +WindowMaker/Defaults/Makefile.am           |   14 +-
    +WindowMaker/Defaults/WMGLOBAL              |    6 +-
    +WindowMaker/Defaults/WMWindowAttributes.in |    1 -
    +WindowMaker/Defaults/WindowMaker.in        |   19 +-
    +WindowMaker/IconSets/.cvsignore            |    3 -
    +WindowMaker/IconSets/Makefile.am           |    8 +-
    +WindowMaker/Icons/.cvsignore               |    2 -
    +WindowMaker/Icons/DefaultAppIcon.tiff      |  Bin 6832 -&gt; 0 bytes
    +WindowMaker/Icons/Makefile.am              |   86 +-
    +WindowMaker/Icons/Netscape.png             |  Bin 2418 -&gt; 0 bytes
    +WindowMaker/Icons/README                   |    2 +-
    +WindowMaker/Icons/sound.tiff               |  Bin 5608 -&gt; 0 bytes
    +WindowMaker/Icons/sound.xpm                |  263 --
    +WindowMaker/Makefile.am                    |   16 +-
    +WindowMaker/Pixmaps/.cvsignore             |    2 -
    +WindowMaker/Styles/.cvsignore              |    2 -
    +WindowMaker/Styles/Autumn.style            |   12 +-
    +WindowMaker/Styles/Black.style             |   12 +-
    +WindowMaker/Styles/BlackTexture.style      |   12 +-
    +WindowMaker/Styles/Blue.style              |   12 +-
    +WindowMaker/Styles/BlueDawn.style          |   12 +-
    +WindowMaker/Styles/BlueishGreen.style      |   12 +-
    +WindowMaker/Styles/Brown.style             |   12 +-
    +WindowMaker/Styles/Brownish.style          |   12 +-
    +WindowMaker/Styles/Chumbo.style            |   12 +-
    +WindowMaker/Styles/Copper.style            |   12 +-
    +WindowMaker/Styles/DarkBlue.style          |   12 +-
    +WindowMaker/Styles/DarkRed.style           |   12 +-
    +WindowMaker/Styles/Emerald.style           |   12 +-
    +WindowMaker/Styles/Fire.style              |   12 +-
    +WindowMaker/Styles/Food.style              |   12 +-
    +WindowMaker/Styles/Golden.style            |   12 +-
    +WindowMaker/Styles/Green.style             |   12 +-
    +WindowMaker/Styles/GreyBlue.style          |   12 +-
    +WindowMaker/Styles/Gtk.style               |   12 +-
    +WindowMaker/Styles/IRednBlue.style         |   12 +-
    +WindowMaker/Styles/Interlace.style         |   12 +-
    +WindowMaker/Styles/LightBlue.style         |   12 +-
    +WindowMaker/Styles/NewBlue.style           |   12 +-
    +WindowMaker/Styles/NightSky.style          |   12 +-
    +WindowMaker/Styles/Pastel.style            |   12 +-
    +WindowMaker/Styles/Pink.style              |   12 +-
    +WindowMaker/Styles/Pumpkin.style           |   12 +-
    +WindowMaker/Styles/Purple.style            |   12 +-
    +WindowMaker/Styles/Purplish.style          |   12 +-
    +WindowMaker/Styles/Red.style               |   12 +-
    +WindowMaker/Styles/RednBlue.style          |   12 +-
    +WindowMaker/Styles/Spring.style            |   12 +-
    +WindowMaker/Styles/Summer.style            |   12 +-
    +WindowMaker/Styles/Traditional.style       |   12 +-
    +WindowMaker/Styles/VioletBlue.style        |   12 +-
    +WindowMaker/Themes/.cvsignore              |    2 -
    +WindowMaker/Themes/Blau.style              |   54 +
    +WindowMaker/Themes/Default.style           |   12 +-
    +WindowMaker/Themes/Makefile.am             |    2 +-
    +WindowMaker/Themes/OpenStep.style          |   14 +-
    +WindowMaker/Themes/Pastel.style            |   12 +-
    +WindowMaker/Themes/SteelBlueSilk.style     |   12 +-
    +WindowMaker/appearance.menu                |   11 +
    +WindowMaker/background.menu                |   28 +
    +WindowMaker/menu.bg                        |  444 ++--
    +WindowMaker/plmenu                         |  212 +-
    +WindowMaker/plmenu.bg                      |  212 +-
    +WindowMaker/wmmacros                       |    1 -
    +WindowMaker/xtree.dat                      |  663 ----
    +acinclude.m4                               |  262 --
    +autogen.sh                                 |   44 +-
    +configure.ac                               |  740 ++---
    +contrib/.cvsignore                         |    3 -
    +contrib/Makefile.am                        |    4 -
    +contrib/README                             |   32 -
    +contrib/WindowMaker.spec.in                |   87 -
    +contrib/single_click.diff                  |  201 -
    +contrib/workspace_flip.patch               |  126 -
    +contrib/yubn_moveres.diff                  |   72 -
    +debian/Debian.theme                        |   26 +
    +debian/Debian.theme.txt                    |   20 +
    +debian/README.Debian                       |  255 ++
    +debian/README.build                        |   78 +
    +debian/TODO                                |   11 +
    +debian/WMWindowAttributes                  |   56 +
    +debian/WindowMaker.default                 |  143 +
    +debian/appearance.menu-method              |   26 +
    +debian/changelog                           | 2119 ++++++++++
    +debian/compat                              |    1 +
    +debian/control                             |  139 +
    +debian/copyright                           |   85 +
    +debian/debian.tiff.uu                      | 5683 +++++++++++++++++++++++++++
    +debian/libwings-dev.install                |   11 +
    +debian/libwings-dev.manpages               |    2 +
    +debian/libwings2.install                   |    1 +
    +debian/libwings2.symbols                   |  606 +++
    +debian/libwmaker0-dev.install              |    2 +
    +debian/libwraster3-dev.docs                |    3 +
    +debian/libwraster3-dev.install             |    4 +
    +debian/libwraster3-dev.manpages            |    1 +
    +debian/libwraster3.install                 |    1 +
    +debian/libwraster3.postinst                |   20 +
    +debian/libwraster3.symbols                 |   56 +
    +debian/libwutil2.install                   |    1 +
    +debian/libwutil2.symbols                   |  230 ++
    +debian/nightly_build.sh                    |  108 +
    +debian/patches/.keepme                     |    1 +
    +debian/patches/50_def_config_paths.diff    |   16 +
    +debian/patches/51_wmaker_man.diff          |   34 +
    +debian/patches/52_libwmaker0dev.diff       |  863 +++++
    +debian/patches/series                      |    3 +
    +debian/rules                               |  244 ++
    +debian/source/format                       |    1 +
    +debian/source/options                      |    2 +
    +debian/upgrade-windowmaker-defaults        |  153 +
    +debian/watch                               |    2 +
    +debian/wmaker-common.desktop               |    8 +
    +debian/wmaker-common.dirs                  |    8 +
    +debian/wmaker-common.docs                  |    9 +
    +debian/wmaker-common.install               |  163 +
    +debian/wmaker-common.links                 |    1 +
    +debian/wmaker-common.lintian-overrides     |    1 +
    +debian/wmaker-common.manpages              |    5 +
    +debian/wmaker-common.postinst              |   46 +
    +debian/wmaker-common.postrm                |   42 +
    +debian/wmaker-dbg.dirs                     |    1 +
    +debian/wmaker.dirs                         |    2 +
    +debian/wmaker.install                      |   14 +
    +debian/wmaker.links                        |    2 +
    +debian/wmaker.lintian-overrides            |    4 +
    +debian/wmaker.menu                         |   69 +
    +debian/wmaker.menu-method                  |   45 +
    +debian/wmaker.postinst                     |   39 +
    +debian/wmaker.postrm                       |   35 +
    +debian/wmaker.prerm                        |   22 +
    +debian/wmaker.sh                           |   76 +
    +doc/.cvsignore                             |    2 -
    +doc/Makefile.am                            |    2 +-
    +doc/WPrefs.1x                              |   56 +
    +doc/WindowMaker.1x                         |    1 +
    +doc/cs/getstyle.1x                         |    2 +-
    +doc/cs/wmsetbg.1x                          |   32 +-
    +doc/get-wings-flags.1                      |   32 +
    +doc/get-wraster-flags.1                    |   32 +
    +doc/get-wutil-flags.1                      |   32 +
    +doc/getstyle.1x                            |    2 +-
    +doc/ru/Makefile.am                         |   16 +
    +doc/ru/geticonset.1x                       |   37 +
    +doc/ru/getstyle.1x                         |   64 +
    +doc/ru/seticons.1x                         |   39 +
    +doc/ru/setstyle.1x                         |   59 +
    +doc/ru/wdwrite.1x                          |   40 +
    +doc/ru/wmaker.1x                           |  144 +
    +doc/ru/wmsetbg.1x                          |   78 +
    +doc/ru/wxcopy.1x                           |   43 +
    +doc/ru/wxpaste.1x                          |   43 +
    +doc/sk/.cvsignore                          |    2 -
    +doc/sk/getstyle.1x                         |    2 +-
    +doc/sk/wmsetbg.1x                          |   32 +-
    +doc/upgrade-windowmaker-defaults.8         |   23 +
    +doc/wdread.1                               |   31 +
    +doc/wmagnify.1x                            |   48 +
    +doc/wmaker.1x                              |   49 +-
    +doc/wmgenmenu.1                            |   32 +
    +doc/wmmenugen.1                            |   24 +
    +doc/wmsetbg.1x                             |   38 +-
    +email-clients.txt                          |  237 ++
    +install-sh                                 |  251 --
    +m4/ax_cflags_gcc_option.m4                 |  221 ++
    +m4/ld-version-script.m4                    |   44 +
    +m4/windowmaker.m4                          |   58 +
    +missing                                    |  283 --
    +mkinstalldirs                              |   40 -
    +mkpatch                                    |  389 --
    +plugins/.cvsignore                         |    2 -
    +plugins/libwmfun/.cvsignore                |    5 -
    +plugins/libwmfun/Makefile                  |  340 --
    +plugins/libwmfun/bilinear.c                |   83 -
    +plugins/libwmfun/fade.c                    |  127 -
    +plugins/libwmfun/generic.c                 |  121 -
    +plugins/libwmfun/generic.h                 |   66 -
    +plugins/libwmfun/getopt.c                  |  679 ----
    +plugins/libwmfun/getopt.h                  |  125 -
    +plugins/libwmfun/getopt1.c                 |  162 -
    +plugins/libwmfun/wave.c                    |  133 -
    +po/.cvsignore                              |    4 -
    +po/Makefile.am                             |    4 +-
    +po/README                                  |    3 +-
    +po/be.po                                   |    6 +-
    +po/bg.po                                   |    6 +-
    +po/bs.po                                   |    4 +-
    +po/ca.po                                   |    6 +-
    +po/cs.po                                   |    6 +-
    +po/da.po                                   |    4 +-
    +po/de.po                                   |  934 +++---
    +po/el.po                                   |    4 +-
    +po/es.po                                   |    4 +-
    +po/et.po                                   |    6 +-
    +po/fi.po                                   |    6 +-
    +po/fr.po                                   |    6 +-
    +po/gl.po                                   |    8 +-
    +po/hr.po                                   |    4 +-
    +po/hu.po                                   |    4 +-
    +po/hy.po                                   | 1911 +++++++++
    +po/it.po                                   |    6 +-
    +po/ja.po                                   |    4 +-
    +po/ko.po                                   |    4 +-
    +po/ms.po                                   |    4 +-
    +po/pl.po                                   |    4 +-
    +po/pt.po                                   |    4 +-
    +po/ru.po                                   |    4 +-
    +po/sk.po                                   |    6 +-
    +po/zh_CN.po                                |    4 +-
    +po/zh_TW.po                                |    6 +-
    +src/.cvsignore                             |    5 -
    +src/GNUstep.h                              |    7 +-
    +src/Makefile.am                            |   49 +-
    +src/WindowMaker.h                          |  125 +-
    +src/actions.c                              |  814 ++---
    +src/actions.h                              |   22 +-
    +src/appicon.c                              |  100 +-
    +src/appicon.h                              |   10 +-
    +src/application.c                          |   87 +-
    +src/application.h                          |   41 +-
    +src/appmenu.c                              |   34 +-
    +src/appmenu.h                              |    7 +-
    +src/balloon.c                              |    8 +-
    +src/balloon.h                              |    7 +-
    +src/client.c                               |   34 +-
    +src/client.h                               |    7 +-
    +src/colormap.c                             |    7 +-
    +src/cycling.c                              |  206 +-
    +src/def_pixmaps.h                          |  266 ++
    +src/defaults.c                             |  832 ++---
    +src/defaults.h                             |    9 +-
    +src/dialog.c                               |  723 ++--
    +src/dialog.h                               |    8 +-
    +src/dock.c                                 |  122 +-
    +src/dock.h                                 |    7 +-
    +src/dockedapp.c                            |    8 +-
    +src/event.c                                |  363 +-
    +src/extend_pixmaps.h                       |   74 +
    +src/framewin.c                             |  110 +-
    +src/framewin.h                             |    9 +-
    +src/funcs.h                                |   22 +-
    +src/icon.c                                 |  147 +-
    +src/icon.h                                 |   14 +-
    +src/keybind.h                              |  146 +-
    +src/main.c                                 |  277 +-
    +src/menu.c                                 |  182 +-
    +src/menu.h                                 |    7 +-
    +src/menureader.c                           |  391 --
    +src/misc.c                                 |  331 +--
    +src/monitor.c                              |   18 +-
    +src/motif.c                                |  123 +-
    +src/motif.h                                |    7 +-
    +src/moveres.c                              |  214 +-
    +src/osdep_bsd.c                            |  178 +
    +src/osdep_darwin.c                         |   96 +
    +src/osdep_linux.c                          |   84 +
    +src/osdep_stub.c                           |   29 +
    +src/pixmap.c                               |  113 +-
    +src/pixmap.h                               |    9 +-
    +src/placement.c                            |  189 +-
    +src/properties.c                           |   75 +-
    +src/properties.h                           |   12 +-
    +src/resources.c                            |    9 +-
    +src/resources.h                            |    7 +-
    +src/rootmenu.c                             |  289 +-
    +src/rootmenu.h                             |   17 +-
    +src/screen.c                               |  223 +-
    +src/screen.h                               |   29 +-
    +src/session.c                              |  671 +----
    +src/session.h                              |   18 +-
    +src/shutdown.c                             |   35 +-
    +src/stacking.c                             |   77 +-
    +src/stacking.h                             |   11 +-
    +src/startup.c                              |  134 +-
    +src/superfluous.c                          |  632 +---
    +src/superfluous.h                          |   20 +-
    +src/switchmenu.c                           |   19 +-
    +src/switchpanel.c                          |   61 +-
    +src/switchpanel.h                          |    9 +-
    +src/text.c                                 |  606 ---
    +src/texture.c                              |  141 +-
    +src/texture.h                              |   10 +-
    +src/usermenu.c                             |   12 +-
    +src/usermenu.h                             |    7 +-
    +src/wconfig.h.in                           |  343 +--
    +src/wcore.c                                |    7 +-
    +src/wcore.h                                |    8 +-
    +src/wdefaults.c                            |   41 +-
    +src/wdefaults.h                            |   20 +-
    +src/window.c                               |  578 ++--
    +src/window.h                               |   35 +-
    +src/winmenu.c                              |  151 +-
    +src/winspector.c                           |  140 +-
    +src/winspector.h                           |    7 +-
    +src/wmspec.c                               |  161 +-
    +src/wmspec.h                               |   11 +-
    +src/workspace.c                            |  708 +---
    +src/workspace.h                            |   31 +-
    +src/wsmap.c                                |   83 -
    +src/wsound.c                               |   37 -
    +src/wsound.h                               |   43 -
    +src/xdnd.c                                 |    2 +-
    +src/xinerama.c                             |   49 +-
    +src/xinerama.h                             |    7 +-
    +src/xmodifier.c                            |  115 +-
    +src/xmodifier.h                            |    7 +-
    +test/.cvsignore                            |    4 -
    +test/Makefile.am                           |   25 -
    +test/notest.c                              |  122 -
    +test/wtest.c                               |  159 -
    +util/.cvsignore                            |    5 -
    +util/Makefile.am                           |   65 +-
    +util/convertfonts.c                        |  128 +-
    +util/directjpeg.c                          |    9 +-
    +util/fontconv.c                            |   57 +-
    +util/geticonset.c                          |  105 +-
    +util/getstyle.c                            |  450 +--
    +util/po/Makefile.am                        |   42 +
    +util/po/de.po                              |  207 +
    +util/po/es.po                              | 1457 +++++++
    +util/po/fr.po                              | 1457 +++++++
    +util/seticons.c                            |  125 +-
    +util/setstyle.c                            |  358 +--
    +util/wdread.c                              |  127 +-
    +util/wdwrite.c                             |  132 +-
    +util/wmagnify.c                            |   28 +-
    +util/wmaker.inst.in                        |  166 +-
    +util/wmgenmenu.c                           |  490 +++
    +util/wmgenmenu.h                           |  503 +++
    +util/wmmenugen.c                           |  325 ++
    +util/wmmenugen.h                           |   61 +
    +util/wmmenugen_misc.c                      |  171 +
    +util/wmmenugen_parse_wmconfig.c            |  290 ++
    +util/wmmenugen_parse_xdg.c                 |  539 +++
    +util/wmsetbg.c                             |  210 +-
    +util/wmsetup.c                             |  375 --
    +util/wxcopy.c                              |   54 +-
    +util/wxpaste.c                             |   45 +-
    +wmlib/.cvsignore                           |    3 -
    +wmlib/COPYING.LIB                          |  481 ---
    +wmlib/Makefile.am                          |   41 -
    +wmlib/WMaker.h                             |  161 -
    +wmlib/app.c                                |   79 -
    +wmlib/app.h                                |   40 -
    +wmlib/command.c                            |   74 -
    +wmlib/event.c                              |   86 -
    +wmlib/menu.c                               |  238 --
    +wmlib/menu.h                               |   75 -
    +wrlib/.cvsignore                           |    5 -
    +wrlib/CmapAlloc.c                          |  325 --
    +wrlib/CrCmap.c                             |  484 ---
    +wrlib/DelCmap.c                            |   63 -
    +wrlib/LookupCmap.c                         |  298 --
    +wrlib/Makefile.am                          |   78 +-
    +wrlib/NEWS                                 |    6 +
    +wrlib/StdCmap.c                            |  216 --
    +wrlib/StdCmap.h                            |  112 -
    +wrlib/alloca.c                             |  477 ---
    +wrlib/alpha_combine.c                      |   66 +
    +wrlib/bench.h                              |   68 -
    +wrlib/configure.in                         |  105 -
    +wrlib/context.c                            |   53 +-
    +wrlib/convert.c                            |  123 +-
    +wrlib/convolve.c                           |  181 -
    +wrlib/draw.c                               |  109 +-
    +wrlib/get-wraster-flags.in                 |   31 +
    +wrlib/gif.c                                |    2 +-
    +wrlib/jpeg.c                               |    2 +-
    +wrlib/libwraster.map                       |   97 +
    +wrlib/load.c                               |   49 +-
    +wrlib/misc.c                               |   55 +-
    +wrlib/nxpm.c                               |  111 +-
    +wrlib/png.c                                |   44 +-
    +wrlib/ppm.c                                |   10 +-
    +wrlib/raster.c                             |  170 +-
    +wrlib/scale.c                              |  145 +-
    +wrlib/tests/.cvsignore                     |    4 -
    +wrlib/tests/Makefile.am                    |   13 +-
    +wrlib/tests/testgrad.c                     |   56 -
    +wrlib/tiff.c                               |    2 +-
    +wrlib/wraster.h                            |    5 +
    +wrlib/x86_specific.c                       |  511 ---
    +wrlib/xpm.c                                |    2 +-
    +wrlib/xutil.c                              |    2 +-
    +566 files changed, 37676 insertions(+), 41817 deletions(-)
    +delete mode 100644 .cvsignore
    +delete mode 100644 COPYING.OPL
    +delete mode 100644 FAQ.I18N.cs
    +delete mode 100644 FAQ.I18N.sk
    +delete mode 100644 INSTALL
    +create mode 100644 INSTALL-WMAKER
    +delete mode 100644 INSTALL.cs
    +delete mode 100644 INSTALL.es
    +delete mode 100644 INSTALL.fr
    +delete mode 100644 INSTALL.pt
    +delete mode 100644 INSTALL.sk
    +delete mode 100644 MIRRORS
    +delete mode 100644 README.es
    +delete mode 100644 README.pt
    +create mode 100644 The-perfect-Window-Maker-patch.txt
    +delete mode 100644 WINGs/.cvsignore
    +delete mode 100644 WINGs/Documentation/.cvsignore
    +delete mode 100644 WINGs/Documentation/README.connection
    +delete mode 100644 WINGs/Examples/.cvsignore
    +delete mode 100644 WINGs/Examples/connect.c
    +delete mode 100644 WINGs/Examples/server.c
    +delete mode 100644 WINGs/Extras/.cvsignore
    +delete mode 100644 WINGs/Resources/.cvsignore
    +delete mode 100644 WINGs/Tests/.cvsignore
    +delete mode 100644 WINGs/WINGs/.cvsignore
    +delete mode 100644 WINGs/WINGs/proplist-compat.h
    +delete mode 100644 WINGs/connection.c
    +create mode 100644 WINGs/get-wings-flags.in
    +create mode 100644 WINGs/get-wutil-flags.in
    +delete mode 100644 WINGs/host.c
    +delete mode 100644 WINGs/international.c
    +delete mode 100644 WINGs/po/.cvsignore
    +delete mode 100644 WINGs/puzzle.c
    +delete mode 100644 WINGs/python/.cvsignore
    +delete mode 100644 WINGs/python/Makefile
    +delete mode 100644 WINGs/python/README
    +delete mode 100644 WINGs/python/WINGs.i
    +delete mode 100644 WINGs/python/WINGs.py
    +delete mode 100755 WINGs/python/setup.py
    +delete mode 100755 WINGs/python/test.py
    +delete mode 100644 WINGs/snprintf.c
    +delete mode 100644 WINGs/wfont_noxft.c
    +delete mode 100644 WINGs/wfont_wchar.c
    +delete mode 100644 WPrefs.app/.cvsignore
    +delete mode 100644 WPrefs.app/Font.c
    +delete mode 100644 WPrefs.app/imagebrowser.c
    +delete mode 100644 WPrefs.app/imagebrowser.h
    +delete mode 100644 WPrefs.app/po/.cvsignore
    +delete mode 100644 WPrefs.app/tiff/.cvsignore
    +create mode 100644 WPrefs.app/tiff/nextstyle.tiff
    +create mode 100644 WPrefs.app/tiff/noopaqueresize.tiff
    +create mode 100644 WPrefs.app/tiff/opaqueresize.tiff
    +delete mode 100644 WPrefs.app/xpm/.cvsignore
    +create mode 100644 WPrefs.app/xpm/nextstyle.xpm
    +create mode 100644 WPrefs.app/xpm/noopaqueresize.xpm
    +create mode 100644 WPrefs.app/xpm/opaqueresize.xpm
    +delete mode 100644 WindowMaker/.cvsignore
    +delete mode 100644 WindowMaker/Backgrounds/.cvsignore
    +delete mode 100644 WindowMaker/Defaults/.cvsignore
    +delete mode 100644 WindowMaker/IconSets/.cvsignore
    +delete mode 100644 WindowMaker/Icons/.cvsignore
    +delete mode 100644 WindowMaker/Icons/DefaultAppIcon.tiff
    +delete mode 100644 WindowMaker/Icons/Netscape.png
    +delete mode 100644 WindowMaker/Icons/sound.tiff
    +delete mode 100644 WindowMaker/Icons/sound.xpm
    +delete mode 100644 WindowMaker/Pixmaps/.cvsignore
    +delete mode 100644 WindowMaker/Styles/.cvsignore
    +delete mode 100644 WindowMaker/Themes/.cvsignore
    +create mode 100644 WindowMaker/Themes/Blau.style
    +create mode 100644 WindowMaker/appearance.menu
    +create mode 100644 WindowMaker/background.menu
    +delete mode 100644 WindowMaker/xtree.dat
    +delete mode 100644 acinclude.m4
    +delete mode 100644 contrib/.cvsignore
    +delete mode 100644 contrib/Makefile.am
    +delete mode 100644 contrib/README
    +delete mode 100644 contrib/WindowMaker.spec.in
    +delete mode 100644 contrib/single_click.diff
    +delete mode 100644 contrib/workspace_flip.patch
    +delete mode 100644 contrib/yubn_moveres.diff
    +create mode 100644 debian/Debian.theme
    +create mode 100644 debian/Debian.theme.txt
    +create mode 100644 debian/README.Debian
    +create mode 100644 debian/README.build
    +create mode 100644 debian/TODO
    +create mode 100644 debian/WMWindowAttributes
    +create mode 100644 debian/WindowMaker.default
    +create mode 100644 debian/appearance.menu-method
    +create mode 100644 debian/changelog
    +create mode 100644 debian/compat
    +create mode 100644 debian/control
    +create mode 100644 debian/copyright
    +create mode 100644 debian/debian.tiff.uu
    +create mode 100644 debian/libwings-dev.install
    +create mode 100644 debian/libwings-dev.manpages
    +create mode 100644 debian/libwings2.install
    +create mode 100644 debian/libwings2.symbols
    +create mode 100644 debian/libwmaker0-dev.install
    +create mode 100644 debian/libwraster3-dev.docs
    +create mode 100644 debian/libwraster3-dev.install
    +create mode 100644 debian/libwraster3-dev.manpages
    +create mode 100644 debian/libwraster3.install
    +create mode 100644 debian/libwraster3.postinst
    +create mode 100644 debian/libwraster3.symbols
    +create mode 100644 debian/libwutil2.install
    +create mode 100644 debian/libwutil2.symbols
    +create mode 100755 debian/nightly_build.sh
    +create mode 100644 debian/patches/.keepme
    +create mode 100644 debian/patches/50_def_config_paths.diff
    +create mode 100644 debian/patches/51_wmaker_man.diff
    +create mode 100644 debian/patches/52_libwmaker0dev.diff
    +create mode 100644 debian/patches/series
    +create mode 100755 debian/rules
    +create mode 100644 debian/source/format
    +create mode 100644 debian/source/options
    +create mode 100644 debian/upgrade-windowmaker-defaults
    +create mode 100644 debian/watch
    +create mode 100644 debian/wmaker-common.desktop
    +create mode 100644 debian/wmaker-common.dirs
    +create mode 100644 debian/wmaker-common.docs
    +create mode 100644 debian/wmaker-common.install
    +create mode 100644 debian/wmaker-common.links
    +create mode 100644 debian/wmaker-common.lintian-overrides
    +create mode 100644 debian/wmaker-common.manpages
    +create mode 100644 debian/wmaker-common.postinst
    +create mode 100644 debian/wmaker-common.postrm
    +create mode 100644 debian/wmaker-dbg.dirs
    +create mode 100644 debian/wmaker.dirs
    +create mode 100644 debian/wmaker.install
    +create mode 100644 debian/wmaker.links
    +create mode 100644 debian/wmaker.lintian-overrides
    +create mode 100644 debian/wmaker.menu
    +create mode 100644 debian/wmaker.menu-method
    +create mode 100644 debian/wmaker.postinst
    +create mode 100644 debian/wmaker.postrm
    +create mode 100644 debian/wmaker.prerm
    +create mode 100644 debian/wmaker.sh
    +delete mode 100644 doc/.cvsignore
    +create mode 100644 doc/WPrefs.1x
    +create mode 100644 doc/WindowMaker.1x
    +create mode 100644 doc/get-wings-flags.1
    +create mode 100644 doc/get-wraster-flags.1
    +create mode 100644 doc/get-wutil-flags.1
    +create mode 100644 doc/ru/Makefile.am
    +create mode 100644 doc/ru/geticonset.1x
    +create mode 100644 doc/ru/getstyle.1x
    +create mode 100644 doc/ru/seticons.1x
    +create mode 100644 doc/ru/setstyle.1x
    +create mode 100644 doc/ru/wdwrite.1x
    +create mode 100644 doc/ru/wmaker.1x
    +create mode 100644 doc/ru/wmsetbg.1x
    +create mode 100644 doc/ru/wxcopy.1x
    +create mode 100644 doc/ru/wxpaste.1x
    +delete mode 100644 doc/sk/.cvsignore
    +create mode 100644 doc/upgrade-windowmaker-defaults.8
    +create mode 100644 doc/wdread.1
    +create mode 100644 doc/wmagnify.1x
    +create mode 100644 doc/wmgenmenu.1
    +create mode 100644 doc/wmmenugen.1
    +create mode 100644 email-clients.txt
    +delete mode 100755 install-sh
    +create mode 100644 m4/ax_cflags_gcc_option.m4
    +create mode 100644 m4/ld-version-script.m4
    +create mode 100644 m4/windowmaker.m4
    +delete mode 100755 missing
    +delete mode 100755 mkinstalldirs
    +delete mode 100755 mkpatch
    +delete mode 100644 plugins/.cvsignore
    +delete mode 100644 plugins/libwmfun/.cvsignore
    +delete mode 100644 plugins/libwmfun/Makefile
    +delete mode 100644 plugins/libwmfun/bilinear.c
    +delete mode 100644 plugins/libwmfun/fade.c
    +delete mode 100644 plugins/libwmfun/generic.c
    +delete mode 100644 plugins/libwmfun/generic.h
    +delete mode 100644 plugins/libwmfun/getopt.c
    +delete mode 100644 plugins/libwmfun/getopt.h
    +delete mode 100644 plugins/libwmfun/getopt1.c
    +delete mode 100644 plugins/libwmfun/wave.c
    +delete mode 100644 po/.cvsignore
    +create mode 100644 po/hy.po
    +delete mode 100644 src/.cvsignore
    +delete mode 100644 src/menureader.c
    +create mode 100644 src/osdep_bsd.c
    +create mode 100644 src/osdep_darwin.c
    +create mode 100644 src/osdep_linux.c
    +create mode 100644 src/osdep_stub.c
    +delete mode 100644 src/text.c
    +delete mode 100644 src/wsmap.c
    +delete mode 100644 src/wsound.c
    +delete mode 100644 src/wsound.h
    +delete mode 100644 test/.cvsignore
    +delete mode 100644 test/Makefile.am
    +delete mode 100644 test/notest.c
    +delete mode 100644 test/wtest.c
    +delete mode 100644 util/.cvsignore
    +create mode 100644 util/po/Makefile.am
    +create mode 100644 util/po/de.po
    +create mode 100644 util/po/es.po
    +create mode 100644 util/po/fr.po
    +create mode 100644 util/wmgenmenu.c
    +create mode 100644 util/wmgenmenu.h
    +create mode 100644 util/wmmenugen.c
    +create mode 100644 util/wmmenugen.h
    +create mode 100644 util/wmmenugen_misc.c
    +create mode 100644 util/wmmenugen_parse_wmconfig.c
    +create mode 100644 util/wmmenugen_parse_xdg.c
    +delete mode 100644 util/wmsetup.c
    +delete mode 100644 wmlib/.cvsignore
    +delete mode 100644 wmlib/COPYING.LIB
    +delete mode 100644 wmlib/Makefile.am
    +delete mode 100644 wmlib/WMaker.h
    +delete mode 100644 wmlib/app.c
    +delete mode 100644 wmlib/app.h
    +delete mode 100644 wmlib/command.c
    +delete mode 100644 wmlib/event.c
    +delete mode 100644 wmlib/menu.c
    +delete mode 100644 wmlib/menu.h
    +delete mode 100644 wrlib/.cvsignore
    +delete mode 100644 wrlib/CmapAlloc.c
    +delete mode 100644 wrlib/CrCmap.c
    +delete mode 100644 wrlib/DelCmap.c
    +delete mode 100644 wrlib/LookupCmap.c
    +delete mode 100644 wrlib/StdCmap.c
    +delete mode 100644 wrlib/StdCmap.h
    +delete mode 100644 wrlib/alloca.c
    +create mode 100644 wrlib/alpha_combine.c
    +delete mode 100644 wrlib/bench.h
    +delete mode 100644 wrlib/configure.in
    +create mode 100644 wrlib/get-wraster-flags.in
    +create mode 100644 wrlib/libwraster.map
    +delete mode 100644 wrlib/tests/.cvsignore
    +delete mode 100644 wrlib/x86_specific.c
    +
    + +
    +
    +
    +
    Window Maker: News - diff from version 0.92.0+ to 0.95.1
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/news/index.html b/news/index.html new file mode 100644 index 0000000..cf3d05e --- /dev/null +++ b/news/index.html @@ -0,0 +1,273 @@ + + + + Window Maker: News + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    News

    + +

    Version 0.95.9 released

    + +

    Window Maker 0.95.9 was released on April 4th 2020

    + +
      +
    • SwitchPanel is now more configurable: you can configure the switch +panel icon size by setting the “SwitchPanelIconSize” option to your +preferred value in ~/GNUstep/Defaults/WindowMaker. The font size used +in this panel now is also sensible to changes in the system font.
    • +
    • New user configuration directory environment variable. In previous +versions, the GNUstep directory used to store a user’s Window Maker +configuration files was specified by the GNUSTEP_USER_ROOT environment +variable, which defaulted to ~/GNUstep. However, this environment +variable was deprecated in gnustep-make v2. Therefore, it has been +replaced by the WMAKER_USER_ROOT environment variable.
    • +
    • libXmu is now an optional dependency.If the library is not found, +compilation work, the only limitation will arise when trying to +install the standard colormap on displays which are not TrueColor. +Please note that if you have the library but not the headers, +configure will still stop; there is no user option to explicitly +disable the library use.
    • +
    + +

    Version 0.95.8 released

    + +

    Window Maker 0.95.8 was released on March 11th 2017.

    + +
      +
    • See the NEWS file +and/or the git logs for an overview of the changes.
    • +
    + +

    Version 0.95.7 released

    + +

    Window Maker 0.95.7 was released on August 2nd 2015.

    + +
      +
    • Window snapping feature +has been added, which allows one to “snap” a window to one side of the screen +by dragging it to that side (Doug Torrance).
    • +
    • New mouse actions configuration were +added to WPrefs (David +Maciejak).
    • +
    • New button and wheel mouse +actions (David Maciejak).
    • +
    • Many code cleanups and refactoring by Christophe Curris.
    • +
    + +

    Version 0.95.6 released

    + +

    Window Maker 0.95.6 was released on August 30th 2014.

    + +
      +
    • Window Maker can now load WebP images and support ImageMagick library to +support even more formats like SVG, BMP, TGA, … (David Maciejak)
    • +
    • Add mini-window apercu, +a small preview of window contents (David Maciejak)
    • +
    • Support for up to 9-buttons mouse added (David Maciejak)
    • +
    • Many configuration options added to WPrefs.app (Doug Torrance)
    • +
    • Add wmiv, an image viewer application (David Maciejak)
    • +
    • Bug fixes and code cleanups by various people.
    • +
    + +

    Version 0.95.5 released

    + +

    Window Maker 0.95.5 was released on August 29th 2013.

    + +
      +
    • Window Maker can now maximize windows to the top/bottom halves of the +screen as well as to the corners (top left, top right etc). The keyboard +shortcuts to do that can be configured via WPrefs (Renan Traba).
    • +
    • Support for drawers in the dock +has been added (Daniel Dechelotte).
    • +
    • Keyboard shortcuts to move windows between workspaces (Iain Patterson).
    • +
    • Window border colours and width are now configurable (Iain Patterson).
    • +
    • The menu is now able to parse command-generated +proplist style menus. +WPrefs support for this has been added too (Andreas Bierfert).
    • +
    • Plus a few other new features and a lot of bug fixes and code cleanups by +various people.
    • +
    + +

    Version 0.95.4 released

    + +

    Window Maker 0.95.4 was released on January 3rd 2013. There was a major code +cleanup related to icons, some changes in WPrefs, the addition of a new +“Center” placement strategy, support for _NET_FRAME_EXTENTS, the removal of CPP +dependency to process menu files and small fixes and improvements all around.

    + +

    Version 0.95.3 released

    + +

    Window Maker 0.95.3 was released on May 16th 2012. This release fixes a +regression which would cause more than one instance of an application to start +(under some circumstances) when using menu shortcuts. The window maximization +procedures now have a more intuitive behavior with respect to remembering the +old geometry and going back to it. Furthermore, there are some other small +fixes and cleanups.

    + +

    Version 0.95.2 released

    + +

    Window Maker 0.95.2 was released on February 14th 2012, and it contains just a +few commits on top of 0.95.1. They were necessary to fix a few issues like +‘make dist’ not compiling. Furthermore a few more code cleanups slipped in.

    + +

    Version 0.95.1 released

    + +

    Window Maker 0.95.1 was released on January 29th 2012.

    + +

    The last official Window Maker release was version 0.92.0 from 2005, and +version 0.95.1 contains many bug fixes and also a few new features.

    + +

    New features and highlights

    + +

    The following list is incomplete, but should give a first-order approximation +to the new features in this release. For the truly curious among you, reading +through git log is the only complete source of information.

    + + + +

    Bug fixes

    + +

    Window Maker 0.92.0 was already very stable, but many bugs were fixed in this +release. A very incomplete list is given below, and as time permits it will +be updated (including links to the commits) in the future. But the message now +is that if you don’t like bugs, use version 0.95.1.

    + + + +

    Summary of changes

    + +

    A lot of effort was put into cleaning up the code, with lots of code removal and +tidying things up. The following output should give you an idea of the +development in the last cycle:

    + +
    git diff --shortstat wmaker-0.92.0+..wmaker-0.95.1
    + 592 files changed, 118361 insertions(+), 133342 deletions(-)
    +git diff --shortstat 688a56e8ab67b..wmaker-0.95.1
    + 566 files changed, 37676 insertions(+), 41817 deletions(-)
    +
    + +

    The first shortstat is really everything, including the (huge) patch generated +in this commit from 2009, +which changed the old sources to the linux kernel coding style. The second +shortstat contains the summary of development afterwards – but included is the +addition of a debian folder with files summing around ~20k lines. The full +diffstat for the second command can be seen here.

    + +

    Info v0.95.1

    + +
    +
    +
    +
    Window Maker: News
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/pub/source/release/WindowMaker-0.95.8.tar.gz b/pub/source/release/WindowMaker-0.95.8.tar.gz new file mode 100644 index 0000000..9ebb299 Binary files /dev/null and b/pub/source/release/WindowMaker-0.95.8.tar.gz differ diff --git a/pub/source/release/WindowMaker-0.95.9.tar.gz b/pub/source/release/WindowMaker-0.95.9.tar.gz new file mode 100644 index 0000000..f6bb27d Binary files /dev/null and b/pub/source/release/WindowMaker-0.95.9.tar.gz differ diff --git a/screenshots/GoldUtop.png b/screenshots/GoldUtop.png new file mode 100644 index 0000000..6e58563 Binary files /dev/null and b/screenshots/GoldUtop.png differ diff --git a/screenshots/GoldUtop_thumb.jpg b/screenshots/GoldUtop_thumb.jpg new file mode 100644 index 0000000..e9719b5 Binary files /dev/null and b/screenshots/GoldUtop_thumb.jpg differ diff --git a/screenshots/bikki_1.png b/screenshots/bikki_1.png new file mode 100644 index 0000000..d6c1094 Binary files /dev/null and b/screenshots/bikki_1.png differ diff --git a/screenshots/bikki_1_thumb.jpg b/screenshots/bikki_1_thumb.jpg new file mode 100644 index 0000000..a600fa6 Binary files /dev/null and b/screenshots/bikki_1_thumb.jpg differ diff --git a/screenshots/bikki_2.png b/screenshots/bikki_2.png new file mode 100644 index 0000000..a6cf888 Binary files /dev/null and b/screenshots/bikki_2.png differ diff --git a/screenshots/bikki_2_thumb.jpg b/screenshots/bikki_2_thumb.jpg new file mode 100644 index 0000000..6e9e68f Binary files /dev/null and b/screenshots/bikki_2_thumb.jpg differ diff --git a/screenshots/gryf-bloodline.png b/screenshots/gryf-bloodline.png new file mode 100644 index 0000000..e182dc3 Binary files /dev/null and b/screenshots/gryf-bloodline.png differ diff --git a/screenshots/gryf-bloodline_thumb.jpg b/screenshots/gryf-bloodline_thumb.jpg new file mode 100644 index 0000000..45e2e95 Binary files /dev/null and b/screenshots/gryf-bloodline_thumb.jpg differ diff --git a/screenshots/gryf-clearloks.png b/screenshots/gryf-clearloks.png new file mode 100644 index 0000000..e112436 Binary files /dev/null and b/screenshots/gryf-clearloks.png differ diff --git a/screenshots/gryf-clearloks_thumb.jpg b/screenshots/gryf-clearloks_thumb.jpg new file mode 100644 index 0000000..8b07d53 Binary files /dev/null and b/screenshots/gryf-clearloks_thumb.jpg differ diff --git a/screenshots/index.html b/screenshots/index.html new file mode 100644 index 0000000..6f97e11 --- /dev/null +++ b/screenshots/index.html @@ -0,0 +1,96 @@ + + + + Window Maker: Screenshots + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    Screenshots

    + +

    To get an impression how Window Maker could look like, here are couple of +screenshots.

    + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    Window Maker: Screenshots
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/screenshots/khamsin1.jpg b/screenshots/khamsin1.jpg new file mode 100644 index 0000000..2dd64a5 Binary files /dev/null and b/screenshots/khamsin1.jpg differ diff --git a/screenshots/khamsin1_thumb.jpg b/screenshots/khamsin1_thumb.jpg new file mode 100644 index 0000000..f0c978e Binary files /dev/null and b/screenshots/khamsin1_thumb.jpg differ diff --git a/screenshots/khamsin2.png b/screenshots/khamsin2.png new file mode 100644 index 0000000..2e98c52 Binary files /dev/null and b/screenshots/khamsin2.png differ diff --git a/screenshots/khamsin2_thumb.jpg b/screenshots/khamsin2_thumb.jpg new file mode 100644 index 0000000..53bcb9e Binary files /dev/null and b/screenshots/khamsin2_thumb.jpg differ diff --git a/screenshots/khamsin3.jpg b/screenshots/khamsin3.jpg new file mode 100644 index 0000000..5afe828 Binary files /dev/null and b/screenshots/khamsin3.jpg differ diff --git a/screenshots/khamsin3_thumb.jpg b/screenshots/khamsin3_thumb.jpg new file mode 100644 index 0000000..692fea9 Binary files /dev/null and b/screenshots/khamsin3_thumb.jpg differ diff --git a/screenshots/khamsin4.png b/screenshots/khamsin4.png new file mode 100644 index 0000000..b6bd22c Binary files /dev/null and b/screenshots/khamsin4.png differ diff --git a/screenshots/khamsin4_thumb.jpg b/screenshots/khamsin4_thumb.jpg new file mode 100644 index 0000000..a241102 Binary files /dev/null and b/screenshots/khamsin4_thumb.jpg differ diff --git a/screenshots/lumpi-wmaker.png b/screenshots/lumpi-wmaker.png new file mode 100644 index 0000000..bd4cd76 Binary files /dev/null and b/screenshots/lumpi-wmaker.png differ diff --git a/screenshots/lumpi-wmaker_thumb.jpg b/screenshots/lumpi-wmaker_thumb.jpg new file mode 100644 index 0000000..6749c03 Binary files /dev/null and b/screenshots/lumpi-wmaker_thumb.jpg differ diff --git a/style.css b/style.css new file mode 100644 index 0000000..54805b1 --- /dev/null +++ b/style.css @@ -0,0 +1,476 @@ +/* common */ +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 0; + background-color: #515171; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; +} + +header { + padding: 1em; + margin-top: 0; + margin-bottom: 0; + padding-bottom: 0; +} + +h1 {font-size: 1.7em} +a:link {color: #1e527e} +a:hover {color: #2c7abc} +a:visited {color: #371e7e} +a:visited {color: #574882} +img {max-width: 100%} + +pre { + color: #dddddd; + overflow-x: auto; + padding: 0.3em; +} + +.caption { + font-style: italic; + font-size: 0.8em; + line-height: 5px; + margin-bottom: 3em; +} + +.caption {text-align: center} + +.center:not(.section), .center>h1, .center>h2{ text-align: center } + +p.screenshot a img { + border: 1px solid black; + box-shadow: 3px 7px 7px #606060; + top: 0; + bottom:0; + left: 0; + right:0; + margin: auto; +} + +/* guided tour */ + +#window-maker h1.title { text-align: center } +#window-maker #guided-tour img { + display:block; + margin-left: auto; + margin-right: auto; +} + +/* gallery */ + +p.gallery { + float: left; + margin: 5px; + width: 300px; +} + +p.gallery a img { + border: 1px solid black; + box-shadow: 3px 7px 7px #606060; + top: 0; + bottom:0; + left: 0; + right:0; + margin: auto; +} + +div.gallery img { + width: 100%; + height: auto; +} + +.clear { + clear: left; +} + +div.figure img { + display: block; + border: 1px solid black; + box-shadow: 3px 7px 7px #606060; + margin: 0 auto; +} + +div.figure.borderless img { + border: 0 +} + +/* logo */ +header h1 a { + font-family: "DejaVu Sans", sans-serif; + text-shadow: 0 4px 4px #666; + display: block; + padding-left: 1.4em; + background-image: url(/img/gnustep.svg); + background-position: left center; + background-repeat: no-repeat; + background-size: auto 100%; + text-decoration: none; + color: black; + font-size: 1.8em; +} + +header h1 a:link {text-decoration: none} +header h1 a span.second {color: white} +header h1 a span.first {color: black} + +/* wrapper decorations */ +#minimize, #close { + margin: 0; + padding: 0; + height: 20px; + width: 21px; + border-left: 1px solid #b6b6b6; + border-top: 1px solid #b6b6b6; + border-right: 1px solid #616161; + border-bottom: 1px solid #616161; + background-repeat: no-repeat; + background-position: center center; +} + +#minimize { + margin-right: 1px; + background-image: url(/img/minimize.png); +} + +#close { + margin-left: 1px; + background-image: url(/img/close.png); +} + +#titlebar { + position: absolute; + top: 0px; + display: inline-flex; + width: 100%; + margin: 0; + margin-top: 0px; + padding: 0; + background: black; + height: 23px; +} + +#titlebar-inner { + margin: 0; + padding: 0; + margin-top: 0px; + background: black; + height: 20px; + width: 100%; + border-left: 1px solid #b6b6b6; + border-top: 1px solid #b6b6b6; + border-right: 1px solid #616161; + border-bottom: 1px solid #616161; + font-size: 0.8em; + color: white; + font-weight: bold; + text-align: center; + line-height: 19px; +} + +#wrapper { + position: relative; + width: 800px; + margin: 0 auto; + margin-top: 1em; + margin-bottom: 1em; + box-shadow: 0 0 15px #000000; + background-color: #aeaaae; + border: 1px solid black; +} + +#resizel, #resizer { + margin: 0; + padding: 0; + height: 6px; + width: 28px; + border-left: 1px solid white; + border-top: 1px solid white; + border-right: 1px solid #555555; +} + +#resizebar { + position: absolute; + bottom: 2px; + display: inline-flex; + width: 100%; + margin: 0; + margin-top: 0px; + padding: 0; + background: #aaaaaa; + height: 5px; + border-top: 1px solid #555555; +} + +#resizebar-inner { + margin: 0; + padding: 0; + margin-top: 0px; + height: 6px; + width: 100%; + border-left: 1px solid white; + border-top: 1px solid white; + border-right: 1px solid #555555; +} + +/* TOC */ +.contents p { + margin: 0.2em; +} + +/* pre/code highlighted theme - taken from wombat256grf vim colorscheme */ +.highlight { background-color: #242424 } +.highlight .c { color: #99968b; font-style: italic} /* Comment */ +.highlight .err { color: #dddddd} /* Error */ +.highlight .g { color: #dddddd } /* Generic */ +.highlight .k { color: #87afff } /* Keyword */ +.highlight .l { color: #dddddd } /* Literal */ +.highlight .n { color: #dddddd } /* Name */ +.highlight .o { color: #dddddd } /* Operator */ +.highlight .x { color: #dddddd } /* Other */ +.highlight .p { color: #dddddd } /* Punctuation */ +.highlight .cm { color: #99968b; font-style: italic} /* Comment.Multiline */ +.highlight .cp { color: #e5786d } /* Comment.Preproc */ +.highlight .c1 { color: #99968b; font-style: italic} /* Comment.Single */ +.highlight .cs { color: #99968b; font-style: italic} /* Comment.Special */ +.highlight .gd { color: #dddddd } /* Generic.Deleted */ +.highlight .ge { color: #dddddd } /* Generic.Emph */ +.highlight .gr { color: #dddddd } /* Generic.Error */ +.highlight .gh { color: #f6f3e8; font-weight: bold} /* Generic.Heading */ +.highlight .gi { color: #dddddd } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #dddddd } /* Generic.Prompt */ +.highlight .gs { color: #dddddd } /* Generic.Strong */ +.highlight .gu { color: #f6f3e8; font-weight: bold} /* Generic.Subheading */ +.highlight .gt { color: #dddddd } /* Generic.Traceback */ +.highlight .kc { color: #87afff } /* Keyword.Constant */ +.highlight .kd { color: #87afff } /* Keyword.Declaration */ +.highlight .kn { color: #87afff } /* Keyword.Namespace */ +.highlight .kp { color: #87afff } /* Keyword.Pseudo */ +.highlight .kr { color: #87afff } /* Keyword.Reserved */ +.highlight .kt { color: #caeb82 } /* Keyword.Type */ +.highlight .ld { color: #dddddd } /* Literal.Date */ +.highlight .m { color: #e5786d } /* Literal.Number */ +.highlight .s { color: #95e454; font-style: italic} /* Literal.String */ +.highlight .na { color: #caeb82 } /* Name.Attribute */ +.highlight .nb { color: #dddddd } /* Name.Builtin */ +.highlight .nc { color: #dddddd } /* Name.Class */ +.highlight .no { color: #e5786d } /* Name.Constant */ +.highlight .nd { color: #dddddd } /* Name.Decorator */ +.highlight .ni { color: #ffdead } /* Name.Entity */ +.highlight .ne { color: #dddddd } /* Name.Exception */ +.highlight .nf { color: #caeb82 } /* Name.Function */ +.highlight .nl { color: #dddddd } /* Name.Label */ +.highlight .nn { color: #dddddd } /* Name.Namespace */ +.highlight .nx { color: #dddddd } /* Name.Other */ +.highlight .py { color: #dddddd } /* Name.Property */ +.highlight .nt { color: #87afff } /* Name.Tag */ +.highlight .nv { color: #caeb82 } /* Name.Variable */ +.highlight .ow { color: #dddddd } /* Operator.Word */ +.highlight .w { color: #dddddd } /* Text.Whitespace */ +.highlight .mf { color: #e5786d } /* Literal.Number.Float */ +.highlight .mh { color: #e5786d } /* Literal.Number.Hex */ +.highlight .mi { color: #e5786d } /* Literal.Number.Integer */ +.highlight .mo { color: #e5786d } /* Literal.Number.Oct */ +.highlight .sb { color: #95e454; font-style: italic } /* Literal.String.Backtick */ +.highlight .sc { color: #95e454; font-style: italic } /* Literal.String.Char */ +.highlight .sd { color: #95e454; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #95e454; font-style: italic } /* Literal.String.Double */ +.highlight .se { color: #95e454; font-style: italic } /* Literal.String.Escape */ +.highlight .sh { color: #95e454; font-style: italic } /* Literal.String.Heredoc */ +.highlight .si { color: #95e454; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #95e454; font-style: italic } /* Literal.String.Other */ +.highlight .sr { color: #95e454; font-style: italic } /* Literal.String.Regex */ +.highlight .s1 { color: #95e454; font-style: italic } /* Literal.String.Single */ +.highlight .ss { color: #95e454; font-style: italic } /* Literal.String.Symbol */ +.highlight .bp { color: #dddddd } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #caeb82 } /* Name.Variable.Class */ +.highlight .vg { color: #caeb82 } /* Name.Variable.Global */ +.highlight .vi { color: #caeb82 } /* Name.Variable.Instance */ +.highlight .il { color: #e5786d } /* Literal.Number.Integer.Long */ + +.gutter{ + background-color: black; + color: #857b6f; +} + +.post > .highlight .lineno { + display:inline-block; + padding: 0 5px; + border-right:1px solid #ccc; +} + +.post > .highlight pre code { + display: block; + white-space: pre; + overflow-x: auto; + word-wrap: normal; +} + +/* main content */ +article {padding: 1em} + +/* + * size specific styles + */ + +/* large screens. size: 64 * 2 + width of the wrapper (800) == 928 + margin */ +@media screen and (min-width: 940px) { + + /* menu as a vertical dock */ + aside { + position: fixed; + right: 0; + top: 0; + width: 64px; + } + + nav.menu li#dock {background-image: url(/img/dock_dock.png)} + nav.menu li#home {background-image: url(/img/dock_home.png)} + nav.menu li#news {background-image: url(/img/dock_news.png)} + nav.menu li#docs {background-image: url(/img/dock_docs.png)} + nav.menu li#devel {background-image: url(/img/dock_devel.png)} + nav.menu li#screenshots {background-image: url(/img/dock_mag.png)} + nav.menu li#themes {background-image: url(/img/dock_themes.png)} + nav.menu li#links {background-image: url(/img/dock_links.png)} + nav.menu li#mail {background-image: url(/img/dock_mail.png)} + + nav.menu {padding: 0} + + nav.menu ul { + padding: 0; + margin: 0; + list-style:none; + } + + nav.menu li { + float: left; + margin: 0; + padding: 0; + list-style: none; + display: inline; + } + + nav.menu a { + padding: 3px 12px; + text-decoration: none; + color: #999; + line-height: 100%; + } + + nav.menu a:hover {color: #BBB} + + nav.menu form {display: inline} + + nav.menu .current a {color: #fff} + + nav.menu li { + display: block; + width: 64px; + height: 64px; + border: 0; + padding:0; + } + + nav.menu li a { + display: block; + width: 64px; + height: 64px; + border: 0; + padding:0; + line-height: 0; + font-size: 0; + color: transparent; + } + +} + +/* small screens */ +@media screen and (max-width: 939px) { + + #wrapper { + width: 100%; + margin: 0; + border: 0; + } + + /* menu as a horizontal, scrollable icon list */ + article {width: auto} + + nav.menu {padding: 0 1em 0 1em} + + nav.menu ul { + border: 3px groove black; + padding: 0; + margin: 0; + list-style:none; + display: flex; + flex-wrap: nowrap; + overflow-x: auto; + } + + nav.menu li { + float: left; + margin: 0; + padding: 0; + list-style: none; + display: inline; + } + + nav.menu a { + padding: 3px 12px; + text-decoration: none; + color: #999; + line-height: 100%; + } + + nav.menu a:hover {color: #BBB} + nav.menu form {display: inline} + nav.menu .current a {color: #fff} + + nav.menu li { + display: block; + width: 64px; + height: 64px; + border: 0; + padding:0; + } + + nav.menu li a { + display: block; + width: 64px; + height: 64px; + border: 0; + padding:0; + line-height: 0; + font-size: 0; + color: transparent; + } + + nav.menu li#dock {display: none} + nav.menu li#home {background-image: url(/img/prefs_home.png)} + nav.menu li#news {background-image: url(/img/prefs_news.png)} + nav.menu li#docs {background-image: url(/img/prefs_docs.png)} + nav.menu li#devel {background-image: url(/img/prefs_devel.png)} + nav.menu li#screenshots {background-image: url(/img/prefs_mag.png)} + nav.menu li#themes {background-image: url(/img/prefs_themes.png)} + nav.menu li#links {background-image: url(/img/prefs_links.png)} + nav.menu li#mail {background-image: url(/img/prefs_mail.png)} + + .highlight { + padding: 0; + margin: 0; + } + +} + +/* very small - usually mobile phone screens */ +@media screen and (max-width: 600px) { + + header h1 a {font-size: 1.5em} + +} diff --git a/themes/Themes/NeXT-Retro.tar.gz b/themes/Themes/NeXT-Retro.tar.gz new file mode 100644 index 0000000..7f0ee3e Binary files /dev/null and b/themes/Themes/NeXT-Retro.tar.gz differ diff --git a/themes/Themes/NeXT-Retro_README.txt b/themes/Themes/NeXT-Retro_README.txt new file mode 100644 index 0000000..65b57cd --- /dev/null +++ b/themes/Themes/NeXT-Retro_README.txt @@ -0,0 +1,13 @@ +NeXT-style "retro" theme for WindowMaker + +This is the them I'm using at work. It is a mixture of styles I ran across, and it +does not try to be "modern" in any way (I like the old look), however I do like some +eye candy, thus I added a nice background image. The background was taken from the +wonderful "Fenris" theme found at [1]. + +I distribute the theme under the GNU general public license [2]. + +[1] http://lonelymachines.org/windowmaker-themes/pastoral-themes/ +[2] http://www.gnu.org/licenses/gpl.txt + +Martin Dietze (martin at the-little-red-haired-girl.org) diff --git a/themes/Themes/NeXT-Retro_dockapps.txt b/themes/Themes/NeXT-Retro_dockapps.txt new file mode 100644 index 0000000..fadf311 --- /dev/null +++ b/themes/Themes/NeXT-Retro_dockapps.txt @@ -0,0 +1,8 @@ +Dockapps used in this screenshot (from above): + +- fookb-wmaker +- wmtime +- wmcube +- wmacpi +- wmmixer +- docker diff --git a/themes/example-lsm.txt b/themes/example-lsm.txt new file mode 100644 index 0000000..0d8b897 --- /dev/null +++ b/themes/example-lsm.txt @@ -0,0 +1,7 @@ +Theme Name : Foobar +Author : Chuck Effbiesdee +Description : A theme about being Chuck and stuff such as that. +Copyright : Chuck Effbiesdee background is courtesy of + www.chuck-effbiesdee.com + Background is in .jpg format. + Colors, tiles and title/menu bars are courtesy of me. diff --git a/themes/index.html b/themes/index.html new file mode 100644 index 0000000..8035cc6 --- /dev/null +++ b/themes/index.html @@ -0,0 +1,94 @@ + + + + Window Maker: Themes + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + + +
    +
    +
    Window Maker: Themes
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/themes/screenshots/NeXT-Retro.png b/themes/screenshots/NeXT-Retro.png new file mode 100644 index 0000000..c8e6148 Binary files /dev/null and b/themes/screenshots/NeXT-Retro.png differ diff --git a/themes/screenshots/thumb_NeXT-Retro.png b/themes/screenshots/thumb_NeXT-Retro.png new file mode 100644 index 0000000..a305253 Binary files /dev/null and b/themes/screenshots/thumb_NeXT-Retro.png differ diff --git a/themes/theme-HOWTO-dirs.html b/themes/theme-HOWTO-dirs.html new file mode 100644 index 0000000..75ae2d3 --- /dev/null +++ b/themes/theme-HOWTO-dirs.html @@ -0,0 +1,80 @@ + + + + Window Maker: Theme HOWTO - Directories + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +
    +
    + +Please use only Window Maker standard directory sructures. This means don't + stick your titlebars in a directory under "~/GNUstep/Library/WindowMaker/Titlebars" + and your Tiles under "~/GNUstep/Library/WindowMaker/Tiles". Please use + ~/GNUstep/Library/WindowMaker/Pixmaps for all tiles and menu/titlebar images, + ~/GNUstep/Library/WindowMaker/Icons for any icons you include + and ~/GNUstep/Library/WindowMaker/Backgrounds for your backgrounds. +

    + +
    +
    +
    +
    Window Maker: Theme HOWTO - Directories
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/themes/theme-HOWTO-gifs.html b/themes/theme-HOWTO-gifs.html new file mode 100644 index 0000000..0f6329d --- /dev/null +++ b/themes/theme-HOWTO-gifs.html @@ -0,0 +1,85 @@ + + + + Window Maker: Theme HOWTO - GIFs + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +
    +
    + + Please do not use gifs or other large file formats as your background images. + Although Window Maker does now include .gif support, + most backgrounds (unless they are small tiles) are at least 640x480. + and this makes for a huge gif file, generally in the 1meg+ range.
    + The same file as a .jpg could be as much as 95% smaller or more!
    + (also see here for another good + reason not to use GIFs), +

    + Also when using an image as the Background, if you choose to remove the file + extension, please include the file format of it in the .lsm for your theme. + See here for an example readme.lsm file. +

    + +
    +
    +
    +
    Window Maker: Theme HOWTO - GIFs
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/themes/theme-HOWTO-tar.html b/themes/theme-HOWTO-tar.html new file mode 100644 index 0000000..3d4663e --- /dev/null +++ b/themes/theme-HOWTO-tar.html @@ -0,0 +1,107 @@ + + + + Window Maker: Theme HOWTO - Tar'ing your theme + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +
    +
    + + + Here's a quick guide to tar'ing your theme up:
    + cd to your ~/GNUstep/Library/WindowMaker/ directory, and type something like + the following: (replacing the file names appropriately for your theme) + +

    + +

      +
    1. tar -cvf Foo.tar Foo.lsm Backgrounds/FooBG.jpg Pixmaps/FooTile.xpm + Icons/FooIcon.xpm Themes/Foo +

      +
    2. gzip -9 Foo.tar +

      +
    + + This should leave you with a nice new Foo.tar.gz theme which includes (in this case), + the theme file (Themes/Foo), the background wallpaper (Backgrounds/FooBG.jpg), + a tile (Pixmaps/FooTile.xpm), an icon for the dock (Icons/FooIcon.xpm) + and a readme file (Foo.lsm).
    + LSM files for your themes are a must. The format of the LSM file is + easy. Click here for an example. +

    + If you're having trouble, try typing 'man tar' or ask for help on irc + in the #WindowMaker channel on EFnet. If all else fails, you can + contact us and we'll try and help you out, + but please try the other methods first. Thanks. +

    + Also, your theme file should NOT include your ~/GNUstep/Defaults/WindowMaker + file! This will overwrite the person who downloads the theme's keybindings + and other personalized settings. + Also do NOT include any files other those from the directories I mentioned + above. For example, do NOT include your menu file or anything from your + ~/GNUstep/Defaults/ directory. ONLY include files from the directories + listed above and the readme.lsm file. + +

    +
    +
    +
    Window Maker: Theme HOWTO - Tar'ing your theme
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/themes/theme-HOWTO.html b/themes/theme-HOWTO.html new file mode 100644 index 0000000..1c8e5e6 --- /dev/null +++ b/themes/theme-HOWTO.html @@ -0,0 +1,115 @@ + + + + Window Maker: Theme HOWTO + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +
    +
    + +

    Theme HOWTO

    +WARNING: This is for OLD style theme's only as is OUT OF DATE. Support for this format may be dropped +eventually and is not actively supported. Use this at your own risk!! Unless you have reason to do otherwise, +PLEASE use the new ThemePack format!!! + +

    + +For those of you that like to get in there and do it yourselves, or just want a theme +that is truely yours, here are some helpful guidelines to follow to have your theme +be as simple, standard and user friendly as possible. See here +for info on the new ThemePack format. + +

    +Have fun!
    + + + +-Largo + +

    + +
    + +
      +
    • + tar up your theme so that if the user untars it while in his/her + ~/GNUstep/Library/WindowMaker...the theme will instantly appear in their menu. + Here's a quick guide to tar'ing your theme up. +

      + +
    • Please use only Window Maker standard directory sructures. details +

      + +
    • + Please use jpeg's as your background images. details +

      + +
    + +All set! Now you can share it with your friends. :)
    +If you have any further questions, or comments on possible additions to this HOWTO, please +let us know. Thanks! + +
    +
    +
    +
    Window Maker: Theme HOWTO
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/themes/themepacks.html b/themes/themepacks.html new file mode 100644 index 0000000..6343208 --- /dev/null +++ b/themes/themepacks.html @@ -0,0 +1,158 @@ + + + + Window Maker: ThemePacks HOWTO + + + + + + + +
    +
    +

    + + WindowMaker + +

    +
    + +
    +

    ThemePacks HOWTO

    + +

    Themes (Theme Packs) 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.50.0 or newer. +See here for information on themes for WindowMaker-0.20.3 +and earlier.

    + +

    How To Install a Theme Pack

    +

    To install a theme, unpack your theme into your WindowMaker directory (the same +as old-style themes), usually ~/GNUstep/Library/WindowMaker

    + +
    cd ~/GNUstep/Library/WindowMaker
    +gzip -dc "xyztheme.tar.gz" | tar xvf -
    +
    + +

    You can also do this in your system-wide WindowMaker directory (usually +/usr/local/share/WindowMaker) to have the themes be available to all your +users. This will probably need to be done with root access.

    + +

    How To Load a Theme

    +

    After installing a theme, it will automatically show up in your menu under +Appearance -> Themes -> ThemeName. (unless of course you have manually +changed your menu to remove this) If you have your Themes menu already opened +and pinned to your desktop, you may need to close it and reopen it to have it +show the new theme.

    + +

    To manually load the new theme from the command line, use the setstyle +command. 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 ~/GNUstep/Library/WindowMaker/Themes/MyTheme
    +
    + +

    This will create a theme pack (a new directory in either the current directory +or a directory you specify) named MyTheme.themed, containing everything it +requires, including all pixmap files. In this example, the new theme pack would +be made in your themes directory and be immediately available in your “Themes” +menu.

    + +

    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. This +is preferably done from the same directory that you unpack the themes from to +maintain consistancy with the old theme format.

    + +

    Example:

    + +
    cd ~/GNUstep/Library/WindowMaker
    +tar cvf MyTheme.tar Themes/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
    +
    + +
    +
    +
    +
    Window Maker: ThemePacks HOWTO
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +