summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-wm/windowmaker')
-rw-r--r--x11-wm/windowmaker/Manifest13
-rw-r--r--x11-wm/windowmaker/files/0.91.0/64bit+endian-fixes-0.9x.patch166
-rw-r--r--x11-wm/windowmaker/files/0.91.0/maximize-fix-0.9x.patch33
-rw-r--r--x11-wm/windowmaker/files/0.91.0/menufocus.patch37
-rw-r--r--x11-wm/windowmaker/files/0.91.0/singleclick-shadeormaxopts-0.9x.patch2222
-rw-r--r--x11-wm/windowmaker/files/0.91.0/wlist-0.9x.patch92
-rw-r--r--x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-configure.patch23
-rw-r--r--x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-fullscreen.patch15
-rw-r--r--x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-gcc41.patch131
-rw-r--r--x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-qtdialogsfix.patch84
-rw-r--r--x11-wm/windowmaker/files/wmaker.desktop8
-rw-r--r--x11-wm/windowmaker/windowmaker-0.92.0-r4.ebuild123
12 files changed, 947 insertions, 0 deletions
diff --git a/x11-wm/windowmaker/Manifest b/x11-wm/windowmaker/Manifest
new file mode 100644
index 0000000..3724548
--- /dev/null
+++ b/x11-wm/windowmaker/Manifest
@@ -0,0 +1,13 @@
+AUX 0.91.0/64bit+endian-fixes-0.9x.patch 4831 RMD160 3faeee2ee8c812808bd88a95cdce395ca84843e9 SHA1 a599063bc73a7cb5bdadeba7c112fff1271746ce SHA256 f39eff1216a2207f72ebd95785759627e7cf8fc723bafce987633b85dec616c0
+AUX 0.91.0/maximize-fix-0.9x.patch 1245 RMD160 21b035369a382c189917fbc5090d05138cbd38d7 SHA1 80d5a99337c11123b8966ffd58ef7afc9cc072d5 SHA256 7883bb2ff68aee3411a3048b025541731c1dac710132dca30a511fa17f8588f1
+AUX 0.91.0/menufocus.patch 1554 RMD160 dc9e73943b3d36e0fa71d85c51e19555465224a8 SHA1 3b6bdf49c3c5ad4d0cf5efc5b4f46d9e4fc6e8cf SHA256 e334b8ac57fd5995e90047ef5cb0268a8dcfd64b008c957d1f05b823903bb484
+AUX 0.91.0/singleclick-shadeormaxopts-0.9x.patch2 7788 RMD160 c448c6ac9269650b89dfcc87bcf3bbbf9fb20fd8 SHA1 6c97d5467f749ce8e183355e5ff0fe7606f95b23 SHA256 4cdf6629afeaec576864f6738ffa62497e63a429d2db69ea5db01dbde3894f49
+AUX 0.91.0/wlist-0.9x.patch 2980 RMD160 903fb1977228f651868515ca9719343b6f03ed4b SHA1 d29e5dc6c2f9fee2bc1200496fac6136ded21f53 SHA256 5f9ba4d49371e517834f9c8e1718cab943a682c43c573b1e6b6541bbf96b8a5d
+AUX 0.92.0/windowmaker-0.92.0-configure.patch 1003 RMD160 cd91114ae8d8a3e96ac04887ccdfcb128d7936b7 SHA1 66e9a3cacf1a5aed75ff8903a5536a1c8ace4639 SHA256 a71a4245be52013bb985b63508727fb19a379fbcbebfa89cdb00c02dbd796089
+AUX 0.92.0/windowmaker-0.92.0-fullscreen.patch 500 RMD160 9502957cd4affa92441911bacfd0fdf9b0c226ca SHA1 cfbc5f6cde4decd56987f1a604084fb19cbc33f0 SHA256 28dfdcac0c073bc08c06042ccc5ea97f6833c948238085321f80e3a4b3c0683c
+AUX 0.92.0/windowmaker-0.92.0-gcc41.patch 5212 RMD160 087111b64a199ad56faa7fcc0e90c91540e35666 SHA1 6acf7ac5a0c25b6fc842c6f7e1e03f7a10de6860 SHA256 aef2a3b6e3e74fad11e0c3cc338446b40e90af3f3a1b0d15d97c5e5d79449858
+AUX 0.92.0/windowmaker-0.92.0-qtdialogsfix.patch 2071 RMD160 6b66f1f4c91196dae32876c5adb0eeb54733fbba SHA1 41051888180dd490cb0f65a7e02667ee7be723a2 SHA256 5f442989d9d0ba352a8c327e4ffaa39e72362eb1719d9b50e5bb90f63c9b096f
+AUX wmaker.desktop 221 RMD160 501ba6451f7e756cc3d07682d728bcd6fe55366d SHA1 acd95a41645fbef358459f8f4753056cb321497e SHA256 40359d3c61117f0dbc5eb547e4c369982427e8bc3174c95002d34eb30f9a4a84
+DIST WindowMaker-0.92.0.tar.gz 2758524 RMD160 b8bebed6a34696625ae0ae7c0ebcfdfc0ba09cdd SHA1 6f545356acde7e9bf4c11345ac1359b451a9d1bc SHA256 9edaa8d9ee6e6beb06f4c391c0aec5cd0e5b5494456cae2cdcfd49656177afc6
+DIST WindowMaker-extra-0.1.tar.gz 238018 RMD160 94334c2c12d20a8fd0cd2a70e54cd3689f043038 SHA1 80f34cb3af705ec0f79d727b82cef28ee50fc4e7 SHA256 acd6e1fb790485b107daf2b710da372367b41383c55d9c8bdfdac521d850edc4
+EBUILD windowmaker-0.92.0-r4.ebuild 3600 RMD160 13df1a9ce625917a2ef8cb39d47d865bbea6043a SHA1 6a815c942e802b0edc7a67af968a08ca344ed71b SHA256 d58cc4d07a6ff8a212aa3c8526c8aef3ca7205080e983b6a07f3d252bd237784
diff --git a/x11-wm/windowmaker/files/0.91.0/64bit+endian-fixes-0.9x.patch b/x11-wm/windowmaker/files/0.91.0/64bit+endian-fixes-0.9x.patch
new file mode 100644
index 0000000..c922fc9
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.91.0/64bit+endian-fixes-0.9x.patch
@@ -0,0 +1,166 @@
+diff -ur WindowMaker-0.91.0/src/wmspec.c WindowMaker-0.91.0-test/src/wmspec.c
+--- WindowMaker-0.91.0/src/wmspec.c 2004-10-24 15:36:15.000000000 -0400
++++ WindowMaker-0.91.0-test/src/wmspec.c 2005-03-13 14:25:18.860008096 -0500
+@@ -27,6 +27,7 @@
+
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
++#include <X11/Xarch.h>
+ #include <string.h>
+
+ #include "WindowMaker.h"
+@@ -314,15 +315,15 @@
+ void
+ wNETWMUpdateDesktop(WScreen *scr)
+ {
+- CARD32 *views, sizes[2];
++ long *views, sizes[2];
+ int count, i;
+
+ if (scr->workspace_count==0)
+ return;
+
+ count = scr->workspace_count * 2;
+- views = wmalloc(sizeof(CARD32) * count);
+- /*memset(views, 0, sizeof(CARD32) * count);*/
++ views = wmalloc(sizeof(long) * count);
++ /*memset(views, 0, sizeof(long) * count);*/
+
+ #ifdef VIRTUAL_DESKTOP
+ sizes[0] = scr->workspaces[scr->current_workspace]->width;
+@@ -362,7 +363,7 @@
+ 0, 1, &count);
+ if (prop)
+ {
+- int desktop= *(CARD32*)prop;
++ int desktop= *(long*)prop;
+ XFree(prop);
+ return desktop;
+ }
+@@ -382,40 +383,54 @@
+ &nitems_return, &bytes_after_return, &prop_return);
+
+ if (rc==Success && prop_return) {
+- unsigned int *data = (unsigned int *)prop_return;
++ unsigned long *data = (unsigned long *)prop_return;
+ unsigned int pos = 0, len = 0;
+ unsigned int best_pos = 0, best_tmp = ~0;
++ unsigned int tmp;
+ extern WPreferences wPreferences;
+ unsigned int pref_size = wPreferences.icon_size;
+ unsigned int pref_sq = pref_size*pref_size;
+- char *src, *dst;
++ unsigned char *src, *dst;
+ RImage *new_rimage;
+
+ do {
+ len = data[pos+0]*data[pos+1];
+- unsigned int tmp = pref_sq-len;
++ tmp = pref_sq-len;
+ if (tmp < best_tmp && tmp > 0) {
+ best_tmp = tmp;
+- best_pos = pos;
++ best_pos = pos+2;
+ }
+ pos += 2+len;
+ } while (pos < nitems_return && len != 0);
+
+- new_rimage = RCreateImage(data[best_pos+0], data[best_pos+1], True);
+- len = data[best_pos+0] * data[best_pos+1];
+- src = (char*)&data[best_pos+2];
+- dst = new_rimage->data;
+- for (pos=0; pos<len; ++pos, src+=4, dst+=4) {
+- dst[0] = src[2]; /* R */
+- dst[1] = src[1]; /* G */
+- dst[2] = src[0]; /* B */
+- dst[3] = src[3]; /* A */
+- }
++ if ( best_pos < 2 ) best_pos = 2;
++
++ new_rimage = RCreateImage(data[best_pos-2], data[best_pos-1], True);
+
+ if (new_rimage) {
+- if (wwin->net_icon_image)
+- RReleaseImage(wwin->net_icon_image);
+- wwin->net_icon_image = new_rimage;
++ len = data[best_pos-2] * data[best_pos-1];
++ dst = new_rimage->data;
++
++ for (pos = best_pos; pos < best_pos + len; pos++, dst += 4) {
++ src = (unsigned char *) &data[pos];
++
++#if BYTE_ORDER == BIG_ENDIAN
++ src += sizeof(unsigned long) - 4;
++ dst[0] = src[1]; /* R */
++ dst[1] = src[2]; /* G */
++ dst[2] = src[3]; /* B */
++ dst[3] = src[0]; /* A */
++#else /* Little endian */
++ dst[0] = src[2]; /* R */
++ dst[1] = src[1]; /* G */
++ dst[2] = src[0]; /* B */
++ dst[3] = src[3]; /* A */
++#endif /* endianness */
++ }
++
++ if (wwin->net_icon_image)
++ RReleaseImage(wwin->net_icon_image);
++ wwin->net_icon_image = new_rimage;
+ }
+
+ XFree(prop_return);
+@@ -426,7 +441,7 @@
+ static void
+ updateShowDesktop(WScreen * scr, Bool show)
+ {
+- CARD32 foo;
++ long foo;
+
+ foo = (show == True);
+ XChangeProperty(dpy, scr->root_win, net_showing_desktop, XA_CARDINAL, 32,
+@@ -599,7 +614,7 @@
+ void
+ wNETWMUpdateWorkarea(WScreen *scr, WArea usableArea)
+ {
+- CARD32 *area;
++ long *area;
+ int count, i;
+
+ /* XXX: not Xinerama compatible,
+@@ -609,7 +624,7 @@
+ return;
+
+ count = scr->workspace_count * 4;
+- area = wmalloc(sizeof(CARD32) * count);
++ area = wmalloc(sizeof(long) * count);
+ for (i=0; i<scr->workspace_count; i++) {
+ area[4*i + 0] = usableArea.x1;
+ area[4*i + 1] = usableArea.y1;
+@@ -732,7 +747,7 @@
+ static void
+ updateWorkspaceCount(WScreen *scr) /* changeable */
+ {
+- CARD32 count;
++ long count;
+
+ count = scr->workspace_count;
+
+@@ -744,7 +759,7 @@
+ static void
+ updateCurrentWorkspace(WScreen *scr) /* changeable */
+ {
+- CARD32 count;
++ long count;
+
+ count = scr->current_workspace;
+
+@@ -791,7 +806,7 @@
+ static void
+ updateWorkspaceHint(WWindow *wwin, Bool fake, Bool del)
+ {
+- CARD32 l;
++ long l;
+
+ if (del) {
+ XDeleteProperty(dpy, wwin->client_win, net_wm_desktop);
+Only in WindowMaker-0.91.0-test/src: wmspec.c.orig
diff --git a/x11-wm/windowmaker/files/0.91.0/maximize-fix-0.9x.patch b/x11-wm/windowmaker/files/0.91.0/maximize-fix-0.9x.patch
new file mode 100644
index 0000000..553b05c
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.91.0/maximize-fix-0.9x.patch
@@ -0,0 +1,33 @@
+--- WindowMaker-0.91.0/src/actions.c_old 2005-06-12 15:37:16.000000000 +0200
++++ WindowMaker-0.91.0/src/actions.c 2005-06-12 15:38:44.000000000 +0200
+@@ -474,7 +474,7 @@
+ void
+ wUnmaximizeWindow(WWindow *wwin)
+ {
+- int restore_x, restore_y;
++ int x, y, w, h;
+
+ if (!wwin->flags.maximized)
+ return;
+@@ -483,13 +483,17 @@
+ wwin->flags.skip_next_animation = 1;
+ wUnshadeWindow(wwin);
+ }
+- restore_x = (wwin->flags.maximized & MAX_HORIZONTAL) ?
++ x = ((wwin->flags.maximized & MAX_HORIZONTAL) && wwin->old_geometry.x) ?
+ wwin->old_geometry.x : wwin->frame_x;
+- restore_y = (wwin->flags.maximized & MAX_VERTICAL) ?
++ y = ((wwin->flags.maximized & MAX_VERTICAL) && wwin->old_geometry.y) ?
+ wwin->old_geometry.y : wwin->frame_y;
++ w = wwin->old_geometry.width ?
++ wwin->old_geometry.width : wwin->client.width;
++ h = wwin->old_geometry.height ?
++ wwin->old_geometry.height : wwin->client.height;
++
+ wwin->flags.maximized = 0;
+- wWindowConfigure(wwin, restore_x, restore_y,
+- wwin->old_geometry.width, wwin->old_geometry.height);
++ wWindowConfigure(wwin, x, y, w, h);
+
+ WMPostNotificationName(WMNChangedState, wwin, "maximize");
+
diff --git a/x11-wm/windowmaker/files/0.91.0/menufocus.patch b/x11-wm/windowmaker/files/0.91.0/menufocus.patch
new file mode 100644
index 0000000..f913777
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.91.0/menufocus.patch
@@ -0,0 +1,37 @@
+diff -Naur ./WindowMaker-0.91.0/src/switchmenu.c WindowMaker-0.91.0.mod2/src/switchmenu.c
+--- ./WindowMaker-0.91.0/src/switchmenu.c 2004-10-18 19:41:54.000000000 -0700
++++ WindowMaker-0.91.0.mod2/src/switchmenu.c 2004-11-22 03:56:48.540567984 -0800
+@@ -231,7 +231,11 @@
+ char *t;
+ int idx;
+
+- if (wwin->flags.internal_window || WFLAGP(wwin, skip_window_list))
++ if (wwin->flags.internal_window || WFLAGP(wwin, skip_window_list)
++ || ((wwin->wm_gnustep_attr
++ && wwin->wm_gnustep_attr->flags & GSWindowLevelAttr)
++ && (wwin->wm_gnustep_attr->window_level == WMMainMenuWindowLevel
++ || wwin->wm_gnustep_attr->window_level == WMSubmenuWindowLevel)))
+ return;
+
+ if (wwin->frame->title)
+diff -Naur ./WindowMaker-0.91.0/src/window.c WindowMaker-0.91.0.mod2/src/window.c
+--- ./WindowMaker-0.91.0/src/window.c 2004-10-22 20:11:10.000000000 -0700
++++ WindowMaker-0.91.0.mod2/src/window.c 2004-11-22 03:56:48.540567984 -0800
+@@ -340,17 +340,6 @@
+ wwin->client_flags.no_appicon = 1;
+ }
+
+- /* temporary solution to avoid GS menus in our window list.
+- * it's temporary because it's not the proper way: windows at the
+- * floating level are also skipped from the window list with this.
+- * Fix it -Dan */
+- if (gs_hints->flags & GSWindowLevelAttr) {
+- if (gs_hints->window_level == WMMainMenuWindowLevel ||
+- gs_hints->window_level == WMSubmenuWindowLevel) {
+- wwin->client_flags.skip_window_list = 1;
+- }
+- }
+-
+ }
+
+
diff --git a/x11-wm/windowmaker/files/0.91.0/singleclick-shadeormaxopts-0.9x.patch2 b/x11-wm/windowmaker/files/0.91.0/singleclick-shadeormaxopts-0.9x.patch2
new file mode 100644
index 0000000..dd37b92
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.91.0/singleclick-shadeormaxopts-0.9x.patch2
@@ -0,0 +1,222 @@
+--- WindowMaker-0.91.0/WPrefs.app/Expert.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/WPrefs.app/Expert.c 2005-05-21 16:10:41.000000000 -0700
+@@ -54,9 +54,10 @@
+ WMSetButtonSelected(panel->swi[4], GetBoolForKey("DontConfirmKill"));
+ WMSetButtonSelected(panel->swi[5], GetBoolForKey("DisableBlinking"));
+ WMSetButtonSelected(panel->swi[6], GetBoolForKey("AntialiasedText"));
++ WMSetButtonSelected(panel->swi[7], GetBoolForKey("DCMaximize"));
++ WMSetButtonSelected(panel->swi[8], GetBoolForKey("SingleClickLaunch"));
+ }
+
+-
+ static void
+ createPanel(Panel *p)
+ {
+@@ -66,10 +67,10 @@
+ panel->box = WMCreateBox(panel->parent);
+ WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
+
+- for (i=0; i<7; i++) {
++ for (i=0; i<9; i++) {
+ panel->swi[i] = WMCreateSwitchButton(panel->box);
+ WMResizeWidget(panel->swi[i], FRAME_WIDTH-40, 25);
+- WMMoveWidget(panel->swi[i], 20, 20+i*25);
++ WMMoveWidget(panel->swi[i], 20, 20+i*23);
+ }
+
+ WMSetButtonText(panel->swi[0], _("Disable miniwindows (icons for minimized windows). For use with KDE/GNOME."));
+@@ -81,6 +82,9 @@
+ WMSetButtonText(panel->swi[6], _("Smooth font edges (needs restart)."));
+
+ WMSetButtonEnabled(panel->swi[6], True);
++ WMSetButtonText(panel->swi[7], _("Double click on title bar maximize"));
++ WMSetButtonText(panel->swi[8], _("Launch applications and restore windows with a single click"));
++
+
+ WMRealizeWidget(panel->box);
+ WMMapSubwidgets(panel->box);
+@@ -103,6 +107,8 @@
+ SetBoolForKey(WMGetButtonSelected(panel->swi[4]), "DontConfirmKill");
+ SetBoolForKey(WMGetButtonSelected(panel->swi[5]), "DisableBlinking");
+ SetBoolForKey(WMGetButtonSelected(panel->swi[6]), "AntialiasedText");
++ SetBoolForKey(WMGetButtonSelected(panel->swi[7]), "DCMaximize");
++ SetBoolForKey(WMGetButtonSelected(panel->swi[8]), "SingleClickLaunch");
+ }
+
+
+--- WindowMaker-0.91.0/src/WindowMaker.h 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/WindowMaker.h 2005-05-21 16:10:41.000000000 -0700
+@@ -466,6 +466,12 @@
+ /* shading animation */
+ signed char shade_speed;
+
++ /* double click on title bar maximize */
++ char dc_maximize;
++
++ /* single click to lauch applications */
++ char single_click;
++
+ int edge_resistance;
+ char attract;
+
+--- WindowMaker-0.91.0/src/appicon.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/appicon.c 2005-05-21 16:10:41.000000000 -0700
+@@ -585,6 +585,7 @@
+ int shad_x = 0, shad_y = 0, docking=0, dockable, collapsed = 0;
+ int ix, iy;
+ int clickButton = event->xbutton.button;
++ Bool hasMoved = False;
+ Pixmap ghost = None;
+ Window wins[2];
+ Bool movingSingle = False;
+@@ -665,6 +666,7 @@
+ break;
+
+ case MotionNotify:
++ hasMoved = True;
+ if (!grabbed) {
+ if (abs(dx-ev.xmotion.x)>=MOVE_THRESHOLD
+ || abs(dy-ev.xmotion.y)>=MOVE_THRESHOLD) {
+@@ -802,6 +804,9 @@
+ if (wPreferences.auto_arrange_icons)
+ wArrangeIcons(scr, True);
+
++ if (!hasMoved && wPreferences.single_click)
++ iconDblClick(desc, event);
++
+ done = 1;
+ break;
+ }
+--- WindowMaker-0.91.0/src/defaults.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/defaults.c 2005-05-21 16:10:41.000000000 -0700
+@@ -556,6 +556,12 @@
+ {"DisableBlinking", "NO", NULL,
+ &wPreferences.dont_blink, getBool, NULL
+ },
++ {"DCMaximize", "NO", NULL,
++ &wPreferences.dc_maximize, getBool, NULL
++ },
++ {"SingleClickLaunch", "NO", NULL,
++ &wPreferences.single_click, getBool, NULL
++ },
+ /* style options */
+ {"MenuStyle", "normal", seMenuStyles,
+ &wPreferences.menu_style, getEnum, setMenuStyle
+--- WindowMaker-0.91.0/src/dock.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/dock.c 2005-05-21 16:12:58.000000000 -0700
+@@ -3758,7 +3758,7 @@
+
+
+
+-static void
++static Bool
+ handleIconMove(WDock *dock, WAppIcon *aicon, XEvent *event)
+ {
+ WScreen *scr = dock->screen_ptr;
+@@ -3774,6 +3774,7 @@
+ int tmp;
+ Pixmap ghost = None;
+ Bool docked;
++ Bool hasMoved = False;
+ int superfluous = wPreferences.superfluous; /* we catch it to avoid problems */
+ int omnipresent = aicon->omnipresent; /* this must be cached!!! */
+
+@@ -3828,6 +3829,7 @@
+ break;
+
+ case MotionNotify:
++ hasMoved = True;
+ if (!grabbed) {
+ if (abs(ofs_x-ev.xmotion.x)>=MOVE_THRESHOLD
+ || abs(ofs_y-ev.xmotion.y)>=MOVE_THRESHOLD) {
+@@ -3977,7 +3979,7 @@
+ #ifdef DEBUG
+ puts("End icon move");
+ #endif
+- return;
++ return hasMoved;
+ }
+ }
+ }
+@@ -4114,10 +4116,13 @@
+ if (getClipButton(event->xbutton.x, event->xbutton.y)!=CLIP_IDLE
+ && dock->type==WM_CLIP)
+ handleClipChangeWorkspace(scr, event);
+- else
+- handleDockMove(dock, aicon, event);
+- } else
+- handleIconMove(dock, aicon, event);
++ else
++ handleDockMove(dock, aicon, event);
++ } else {
++ Bool hasMoved = handleIconMove(dock, aicon, event);
++ if (!hasMoved && wPreferences.single_click)
++ iconDblClick(desc, event);
++ }
+
+ } else if (event->xbutton.button==Button2 && dock->type==WM_CLIP &&
+ aicon==scr->clip_icon) {
+--- WindowMaker-0.91.0/src/icon.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/icon.c 2005-05-21 16:10:41.000000000 -0700
+@@ -891,6 +891,7 @@
+ int dx=event->xbutton.x, dy=event->xbutton.y;
+ int grabbed=0;
+ int clickButton=event->xbutton.button;
++ Bool hasMoved = False;
+
+ if (WCHECK_STATE(WSTATE_MODAL))
+ return;
+@@ -942,6 +943,7 @@
+ break;
+
+ case MotionNotify:
++ hasMoved = True;
+ if (!grabbed) {
+ if (abs(dx-ev.xmotion.x)>=MOVE_THRESHOLD
+ || abs(dy-ev.xmotion.y)>=MOVE_THRESHOLD) {
+@@ -979,6 +981,9 @@
+
+ if (wPreferences.auto_arrange_icons)
+ wArrangeIcons(wwin->screen_ptr, True);
++ if (!hasMoved && wPreferences.single_click)
++ miniwindowDblClick(desc, event);
++
+ return;
+
+ }
+--- WindowMaker-0.91.0/src/window.c 2005-05-21 17:04:42.000000000 -0700
++++ /tmp/WindowMaker-0.91.0/src/window.c 2005-05-21 16:10:41.000000000 -0700
+@@ -3089,13 +3089,29 @@
+
+ if (event->xbutton.button==Button1) {
+ if (event->xbutton.state == 0) {
+- if (!WFLAGP(wwin, no_shadeable)) {
++ /* check preferences, maximize or shade */
++ if (wPreferences.dc_maximize) {
++ if (!WFLAGP(wwin, no_resizable)) {
++ /* maximize window */
++ if (wwin->flags.maximized != 0) {
++ wUnmaximizeWindow(wwin);
++ wwin->flags.maximized = 0;
++ }
++ else {
++ wMaximizeWindow(wwin, MAX_VERTICAL|MAX_HORIZONTAL);
++ wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL;
++ }
++ }
++ }
++ else {
++ if (!WFLAGP(wwin, no_shadeable)) {
+ /* shade window */
+ if (wwin->flags.shaded)
+- wUnshadeWindow(wwin);
++ wUnshadeWindow(wwin);
+ else
+- wShadeWindow(wwin);
+- }
++ wShadeWindow(wwin);
++ }
++ }
+ } else {
+ int dir = 0;
+
diff --git a/x11-wm/windowmaker/files/0.91.0/wlist-0.9x.patch b/x11-wm/windowmaker/files/0.91.0/wlist-0.9x.patch
new file mode 100644
index 0000000..c165cce
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.91.0/wlist-0.9x.patch
@@ -0,0 +1,92 @@
+diff -ur WindowMaker-0.91.0/WINGs/wlist.c WindowMaker-0.91.0-test/WINGs/wlist.c
+--- WindowMaker-0.91.0/WINGs/wlist.c 2004-10-12 14:36:42.000000000 -0400
++++ WindowMaker-0.91.0-test/WINGs/wlist.c 2005-03-13 13:37:39.914633856 -0500
+@@ -4,6 +4,8 @@
+
+ #include "WINGsP.h"
+
++#include <X11/keysym.h>
++
+ char *WMListDidScrollNotification = "WMListDidScrollNotification";
+ char *WMListSelectionDidChangeNotification = "WMListSelectionDidChangeNotification";
+
+@@ -44,6 +46,7 @@
+ unsigned int redrawPending:1;
+ unsigned int buttonPressed:1;
+ unsigned int buttonWasPressed:1;
++ unsigned int focused:1;
+ } flags;
+ } List;
+
+@@ -141,10 +144,10 @@
+ lPtr->view->delegate = &_ListViewDelegate;
+
+ WMCreateEventHandler(lPtr->view, ExposureMask|StructureNotifyMask
+- |ClientMessageMask, handleEvents, lPtr);
++ |FocusChangeMask|ClientMessageMask, handleEvents, lPtr);
+
+ WMCreateEventHandler(lPtr->view, ButtonPressMask|ButtonReleaseMask
+- |EnterWindowMask|LeaveWindowMask|ButtonMotionMask,
++ |EnterWindowMask|LeaveWindowMask|ButtonMotionMask|KeyPressMask,
+ handleActionEvents, lPtr);
+
+ lPtr->itemHeight = WMFontHeight(scrPtr->normalFont) + 1;
+@@ -1044,6 +1047,11 @@
+ int topItem = lPtr->topItem;
+ static int lastClicked = -1, prevItem = -1;
+
++ /* for arrow keys handling */
++ char buffer[64];
++ KeySym ksym;
++ int count, row;
++
+ CHECK_CLASS(data, WC_List);
+
+ switch (event->type) {
+@@ -1096,6 +1104,10 @@
+ case ButtonPress:
+ if (event->xbutton.x <= WMWidgetWidth(lPtr->vScroller))
+ break;
++ /* need focus for keyboard events */
++ if (!lPtr->flags.focused);
++ WMSetFocusToWidget(lPtr);
++
+ if (event->xbutton.button == WINGsConfiguration.mouseWheelDown ||
+ event->xbutton.button == WINGsConfiguration.mouseWheelUp) {
+ int amount = 0;
+@@ -1202,6 +1214,34 @@
+ prevItem = tmp;
+ }
+ break;
++ case KeyPress:
++ /* handle arrow keys, space and return */
++ count = XLookupString(&event->xkey, buffer, 63, &ksym, NULL);
++ buffer[count] = '\0';
++ switch(ksym) {
++ case XK_Up:
++ row = WMGetListSelectedItemRow(lPtr);
++ WMSelectListItem(lPtr, row - 1);
++ if (row <= topItem)
++ scrollByAmount(lPtr, -1);
++ break;
++ case XK_Down:
++ row = WMGetListSelectedItemRow(lPtr);
++ WMSelectListItem(lPtr, row + 1);
++ if (row - topItem >= lPtr->fullFitLines)
++ scrollByAmount(lPtr, 1);
++ break;
++ case XK_space:
++ if (lPtr->action)
++ (*lPtr->action)(lPtr, lPtr->clientData);
++ break;
++ case XK_Return:
++ if (lPtr->doubleAction)
++ (*lPtr->doubleAction)(lPtr, lPtr->clientData);
++ break;
++ }
++ break;
++
+ }
+ if (lPtr->topItem != topItem)
+ WMPostNotificationName(WMListDidScrollNotification, lPtr, NULL);
+Only in WindowMaker-0.91.0-test/WINGs: wlist.c.orig
diff --git a/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-configure.patch b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-configure.patch
new file mode 100644
index 0000000..e3b50ac
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-configure.patch
@@ -0,0 +1,23 @@
+--- configure.ac.orig 2007-08-27 00:51:31.000000000 +0200
++++ configure.ac 2007-08-27 00:52:14.000000000 +0200
+@@ -197,7 +197,7 @@
+
+ AC_CACHE_CHECK(whether gcc supports x86 inline asm,
+ ac_cv_c_inline_asm,
+- [AC_TRY_LINK(,[{int x; asm volatile("movl %%eax, %%ebx\n"::
++ [AC_TRY_LINK(,[{int x; asm volatile("movl %%eax, %%ebx\n\t pushal\n\t popal"::
+ "m" (x),"m" (x),"m" (x),"m" (x),"m" (x),"m" (x),
+ "m" (x),"m" (x),"m" (x),"m" (x),"m" (x),"m" (x));}],
+ ac_cv_c_inline_asm=yes,
+@@ -840,11 +840,6 @@
+ else
+ gnustepdir=$appspath
+
+- if test "x$GNUSTEP_LOCAL_ROOT" != "x" ; then
+- gnustepdir=`echo "$GNUSTEP_LOCAL_ROOT" | sed -e "s|^${prefix}|prefix|"`
+- gnustepdir=`echo $gnustepdir | sed -e 's|^prefix|${prefix}|'`
+- fi
+-
+ wprefs_base_dir=$gnustepdir/Applications
+ wprefs_datadir=$wprefs_base_dir/WPrefs.app
+ wprefs_bindir=$wprefs_base_dir/WPrefs.app
diff --git a/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-fullscreen.patch b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-fullscreen.patch
new file mode 100644
index 0000000..cbb4c0a
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-fullscreen.patch
@@ -0,0 +1,15 @@
+Index: src/event.c
+===================================================================
+--- src/event.c (revision 41)
++++ src/event.c (working copy)
+@@ -559,6 +559,10 @@
+ wwin->flags.skip_next_animation = 1;
+ wIconifyWindow(wwin);
+ }
++ if (wwin->flags.fullscreen) {
++ wwin->flags.fullscreen = 0;
++ wFullscreenWindow(wwin);
++ }
+ if (wwin->flags.hidden) {
+ WApplication *wapp = wApplicationOf(wwin->main_window);
+
diff --git a/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-gcc41.patch b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-gcc41.patch
new file mode 100644
index 0000000..4312435
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-gcc41.patch
@@ -0,0 +1,131 @@
+--- NEW FILE windowmaker-gcc4-x86_64.patch ---
+--- WindowMaker-0.92.0/wrlib/x86_specific.c 2004-10-31 02:44:01.000000000 +0100
++++ WindowMaker-0.92.0/wrlib/x86_specific.c 2005-08-22 21:07:57.000000000 +0200
+@@ -98,15 +98,23 @@
+ int height,
+ int line_offset)
+ {
+- long long rrggbbaa;
+- long long pixel;
++ union {
++ long long rrggbbaa;
++ struct {short int rr, gg, bb, aa;} words;
++ } rrggbbaa;
++
++ union {
++ long long pixel;
++ struct {short int rr, gg, bb, aa;} words;
++ } pixel;
++
+ short *tmp_err;
+ short *tmp_nerr;
+ int x;
+
+ asm volatile
+ (
+- "pushal \n\t"
++ "pushl %%ebx \n\t"
+
+ // pack dr, dg and db into mm6
+ "movl %7, %%eax \n\t"
+@@ -290,7 +298,7 @@
+
+ ".Enda: \n\t" // THE END
+ "emms \n\t"
+- "popal \n\t"
++ "popl %%ebx \n\t"
+ :
+ :
+ "m" (image), // %0
+@@ -309,17 +317,18 @@
+ "m" (width), // %13
+ "m" (height), // %14
+ "m" (line_offset), // %15
+- "m" (rrggbbaa), // %16 (access to rr)
+- "m" ((*((short*)(&rrggbbaa)+1))), // %17 (access to gg)
+- "m" ((*((short*)(&rrggbbaa)+2))), // %18 (access to bb)
+- "m" ((*((short*)(&rrggbbaa)+3))), // %19 (access to aa)
+- "m" (pixel), // %20 (access to pixel.r)
+- "m" ((*((short*)(&pixel)+1))), // %21 (access to pixel.g)
+- "m" ((*((short*)(&pixel)+2))), // %22 (access to pixel.b)
+- "m" ((*((short*)(&pixel)+3))), // %23 (access to pixel.a)
++ "m" (rrggbbaa.rrggbbaa), // %16 (access to rr)
++ "m" (rrggbbaa.words.gg), // %17 (access to gg)
++ "m" (rrggbbaa.words.bb), // %18 (access to bb)
++ "m" (rrggbbaa.words.aa), // %19 (access to aa)
++ "m" (pixel.pixel), // %20 (access to pixel.r)
++ "m" (pixel.words.gg), // %21 (access to pixel.g)
++ "m" (pixel.words.bb), // %22 (access to pixel.b)
++ "m" (pixel.words.aa), // %23 (access to pixel.a)
+ "m" (tmp_err), // %24
+ "m" (tmp_nerr), // %25
+ "m" (x) // %26
++ : "eax", "ecx", "edx", "esi", "edi"
+ );
+ }
+
+@@ -342,8 +351,15 @@
+ int height,
+ int line_offset)
+ {
+- long long rrggbbaa;
+- long long pixel;
++ union {
++ long long rrggbbaa;
++ struct {short int rr, gg, bb, aa;} words;
++ } rrggbbaa;
++
++ union {
++ long long pixel;
++ struct {short int rr, gg, bb, aa;} words;
++ } pixel;
+
+ short *tmp_err;
+ short *tmp_nerr;
+@@ -354,7 +370,7 @@
+
+ asm volatile
+ (
+- "pushal \n\t"
++ "pushl %%ebx \n\t"
+
+ "movl %13, %%eax \n\t" // eax = width
+ "movl %%eax, %%ebx \n\t"
+@@ -424,7 +440,7 @@
+
+ ".Endc: \n\t" // THE END
+ "emms \n\t"
+- "popal \n\t"
++ "popl %%ebx \n\t"
+ :
+ :
+ "m" (image), // %0
+@@ -443,19 +459,20 @@
+ "m" (width), // %13
+ "m" (height), // %14
+ "m" (line_offset), // %15
+- "m" (rrggbbaa), // %16 (access to rr)
+- "m" ((*((short*)(&rrggbbaa)+1))), // %17 (access to gg)
+- "m" ((*((short*)(&rrggbbaa)+2))), // %18 (access to bb)
+- "m" ((*((short*)(&rrggbbaa)+3))), // %19 (access to aa)
+- "m" (pixel), // %20 (access to pixel.r)
+- "m" ((*((short*)(&pixel)+1))), // %21 (access to pixel.g)
+- "m" ((*((short*)(&pixel)+2))), // %22 (access to pixel.b)
+- "m" ((*((short*)(&pixel)+3))), // %23 (access to pixel.a)
++ "m" (rrggbbaa.rrggbbaa), // %16 (access to rr)
++ "m" (rrggbbaa.words.gg), // %17 (access to gg)
++ "m" (rrggbbaa.words.bb), // %18 (access to bb)
++ "m" (rrggbbaa.words.aa), // %19 (access to aa)
++ "m" (pixel.pixel), // %20 (access to pixel.r)
++ "m" (pixel.words.gg), // %21 (access to pixel.g)
++ "m" (pixel.words.bb), // %22 (access to pixel.b)
++ "m" (pixel.words.aa), // %23 (access to pixel.a)
+ "m" (tmp_err), // %24
+ "m" (tmp_nerr), // %25
+ "m" (x), // %26
+ "m" (w1), // %27
+ "m" (w2) // %28
++ : "eax", "ecx", "edx", "esi", "edi"
+ );
+ }
+
diff --git a/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-qtdialogsfix.patch b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-qtdialogsfix.patch
new file mode 100644
index 0000000..626630e
--- /dev/null
+++ b/x11-wm/windowmaker/files/0.92.0/windowmaker-0.92.0-qtdialogsfix.patch
@@ -0,0 +1,84 @@
+--- src/wmspec.c.sav 2004-10-24 21:36:15.000000000 +0200
++++ src/wmspec.c 2005-01-26 17:13:54.266216856 +0100
+@@ -314,15 +314,15 @@
+ void
+ wNETWMUpdateDesktop(WScreen *scr)
+ {
+- CARD32 *views, sizes[2];
++ long *views, sizes[2];
+ int count, i;
+
+ if (scr->workspace_count==0)
+ return;
+
+ count = scr->workspace_count * 2;
+- views = wmalloc(sizeof(CARD32) * count);
+- /*memset(views, 0, sizeof(CARD32) * count);*/
++ views = wmalloc(sizeof(long) * count);
++ /*memset(views, 0, sizeof(long) * count);*/
+
+ #ifdef VIRTUAL_DESKTOP
+ sizes[0] = scr->workspaces[scr->current_workspace]->width;
+@@ -362,7 +362,7 @@
+ 0, 1, &count);
+ if (prop)
+ {
+- int desktop= *(CARD32*)prop;
++ int desktop= *(long*)prop;
+ XFree(prop);
+ return desktop;
+ }
+@@ -426,7 +426,7 @@
+ static void
+ updateShowDesktop(WScreen * scr, Bool show)
+ {
+- CARD32 foo;
++ long foo;
+
+ foo = (show == True);
+ XChangeProperty(dpy, scr->root_win, net_showing_desktop, XA_CARDINAL, 32,
+@@ -599,7 +599,7 @@
+ void
+ wNETWMUpdateWorkarea(WScreen *scr, WArea usableArea)
+ {
+- CARD32 *area;
++ long *area;
+ int count, i;
+
+ /* XXX: not Xinerama compatible,
+@@ -609,7 +609,7 @@
+ return;
+
+ count = scr->workspace_count * 4;
+- area = wmalloc(sizeof(CARD32) * count);
++ area = wmalloc(sizeof(long) * count);
+ for (i=0; i<scr->workspace_count; i++) {
+ area[4*i + 0] = usableArea.x1;
+ area[4*i + 1] = usableArea.y1;
+@@ -732,7 +732,7 @@
+ static void
+ updateWorkspaceCount(WScreen *scr) /* changeable */
+ {
+- CARD32 count;
++ long count;
+
+ count = scr->workspace_count;
+
+@@ -744,7 +744,7 @@
+ static void
+ updateCurrentWorkspace(WScreen *scr) /* changeable */
+ {
+- CARD32 count;
++ long count;
+
+ count = scr->current_workspace;
+
+@@ -791,7 +791,7 @@
+ static void
+ updateWorkspaceHint(WWindow *wwin, Bool fake, Bool del)
+ {
+- CARD32 l;
++ long l;
+
+ if (del) {
+ XDeleteProperty(dpy, wwin->client_win, net_wm_desktop);
diff --git a/x11-wm/windowmaker/files/wmaker.desktop b/x11-wm/windowmaker/files/wmaker.desktop
new file mode 100644
index 0000000..1bda476
--- /dev/null
+++ b/x11-wm/windowmaker/files/wmaker.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Encoding=UTF-8
+# The names/descriptions should really be better
+Name=GNUStep WindowMaker
+Comment=Use this session to run WindowMaker as your desktop environment
+Exec=/usr/bin/wmaker
+Icon=
+Type=Application
diff --git a/x11-wm/windowmaker/windowmaker-0.92.0-r4.ebuild b/x11-wm/windowmaker/windowmaker-0.92.0-r4.ebuild
new file mode 100644
index 0000000..24d4a38
--- /dev/null
+++ b/x11-wm/windowmaker/windowmaker-0.92.0-r4.ebuild
@@ -0,0 +1,123 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+inherit autotools eutils gnustep-base flag-o-matic
+
+S=${WORKDIR}/${P/windowm/WindowM}
+
+DESCRIPTION="The fast and light GNUstep window manager"
+SRC_URI="ftp://ftp.windowmaker.info/pub/source/release/${P/windowm/WindowM}.tar.gz
+ http://www.windowmaker.info/pub/source/release/WindowMaker-extra-0.1.tar.gz"
+HOMEPAGE="http://www.windowmaker.info/"
+
+IUSE="gif gnustep jpeg nls png tiff modelock xinerama"
+DEPEND="x11-libs/libXv
+ x11-libs/libXft
+ x11-libs/libXt
+ media-libs/fontconfig
+ gif? ( >=media-libs/giflib-4.1.0-r3 )
+ png? ( >=media-libs/libpng-1.2.1 )
+ jpeg? ( >=media-libs/jpeg-6b-r2 )
+ tiff? ( >=media-libs/tiff-3.6.1-r2 )
+ gnustep? ( gnustep-base/gnustep-make )"
+RDEPEND="${DEPEND}
+ nls? ( >=sys-devel/gettext-0.10.39 )"
+
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="~alpha ~amd64 ~hppa ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+
+src_unpack() {
+ is-flag -fstack-protector && filter-flags -fstack-protector \
+ && ewarn "CFLAG -fstack-protector has been disabled, as it is known to cause bugs with WindowMaker (bug #78051)" && ebeep 2
+ replace-flags "-Os" "-O2"
+ replace-flags "-O3" "-O2"
+
+ unpack ${A}
+ cd "${S}"
+ epatch ${FILESDIR}/${PV/0.92/0.91}/singleclick-shadeormaxopts-0.9x.patch2
+ epatch ${FILESDIR}/${PV/0.92/0.91}/wlist-0.9x.patch
+ epatch ${FILESDIR}/${PV}/${P}-configure.patch
+ epatch ${FILESDIR}/${PV}/${P}-gcc41.patch
+ epatch ${FILESDIR}/${PV}/${P}-fullscreen.patch
+ epatch ${FILESDIR}/${PV}/${P}-qtdialogsfix.patch
+
+ # Fix some paths
+ for file in ${S}/WindowMaker/*menu*; do
+ if [ -r $file ]; then
+ if use gnustep ; then
+ egnustep_env
+ sed -i "s:/usr/local/GNUstep/Applications:${GNUSTEP_SYSTEM_APPS}:g" $file
+ else
+ sed -i "s:/usr/local/GNUstep/Applications/WPrefs.app:/usr/bin/:g;" $file
+ fi
+
+ sed -i 's:/usr/local/share/WindowMaker:/usr/share/WindowMaker:g;' $file
+ sed -i 's:/opt/share/WindowMaker:/usr/share/WindowMaker:g;' $file
+ fi;
+ done;
+
+ eautoreconf || die "eautoreconf failed"
+}
+
+src_compile() {
+ local myconf
+
+ # image format types
+ # xpm is provided by X itself
+ myconf="--enable-xpm $(use_enable png) $(use_enable jpeg) $(use_enable gif) $(use_enable tiff)"
+
+ # non required X capabilities
+ myconf="${myconf} $(use_enable modelock) $(use_enable xinerama)"
+
+ if use gnustep ; then
+ egnustep_env
+ myconf="${myconf} --with-gnustepdir=${GNUSTEP_SYSTEM_ROOT}"
+ fi
+
+ if use nls; then
+ [ -z "$LINGUAS" ] && export LINGUAS="`ls po/*.po | sed 's:po/\(.*\)\.po$:\1:'`"
+ else
+ myconf="${myconf} --disable-locale"
+ fi
+
+ # default settings with $myconf appended
+ econf \
+ --sysconfdir=/etc/X11 \
+ --with-x \
+ --enable-usermenu \
+ --with-pixmapdir=/usr/share/pixmaps \
+ --with-nlsdir=/usr/share/locale \
+ ${myconf} || die
+
+ emake || die "windowmaker: make has failed"
+
+ # WindowMaker Extra Package (themes and icons)
+ cd ../WindowMaker-extra-0.1
+ econf || die "windowmaker-extra: configure has failed"
+ emake || die "windowmaker-extra: make has failed"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "windowmaker: install has failed."
+
+ dodoc AUTHORS BUGFORM BUGS ChangeLog COPYING* INSTALL* FAQ* \
+ MIRRORS README* NEWS TODO
+
+ # WindowMaker Extra
+ cd ../WindowMaker-extra-0.1
+ emake DESTDIR="${D}" install || die "windowmaker-extra: install failed"
+
+ newdoc README README.extra
+
+ # create wmaker session shell script
+ echo "#!/bin/bash" > wmaker
+ echo "/usr/bin/wmaker" >> wmaker
+ exeinto /etc/X11/Sessions/
+ doexe wmaker
+
+ insinto /etc/X11/dm/Sessions
+ doins ${FILESDIR}/wmaker.desktop
+ make_desktop_entry /usr/bin/wmaker
+}