Quoth Carlos R. Mafra,

Patch 2 gives me this:

[scary stuff]

The warning is caused by patch 1 not patch 2. Try the attached compiler food.

patch 8 is nice but it doesn't apply without the rest

  Now it does.
From b44c8ec3faf12a82f7455ed767b9d22b8072433f Mon Sep 17 00:00:00 2001
From: Iain Patterson <[email protected]>
Date: Fri, 7 Jun 2013 19:00:06 +0100
Subject: [PATCH 1/2] Compiler food.

WMArray elements are stored as pointers.  We only need to store chars
for switchpanel flags.
---
 src/switchpanel.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/switchpanel.c b/src/switchpanel.c
index 60afb41..758c09d 100644
--- a/src/switchpanel.c
+++ b/src/switchpanel.c
@@ -20,6 +20,7 @@
 
 #include "wconfig.h"
 
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/time.h>
@@ -113,7 +114,7 @@ static void changeImage(WSwitchPanel *panel, int idecks, int selected, Bool dim,
 {
 	WMFrame *icon = WMGetFromArray(panel->icons, idecks);
 	RImage *image = WMGetFromArray(panel->images, idecks);
-	char flags = (char) WMGetFromArray(panel->flags, idecks);
+	char flags = (char) (uintptr_t) WMGetFromArray(panel->flags, idecks);
 	char desired = 0;
 
 	if (selected)
@@ -124,7 +125,7 @@ static void changeImage(WSwitchPanel *panel, int idecks, int selected, Bool dim,
 	if (flags == desired && !force)
 		return;
 
-	WMReplaceInArray(panel->flags, idecks, desired);
+	WMReplaceInArray(panel->flags, idecks, (void *) (uintptr_t) desired);
 
 	if (!panel->bg && !panel->tile && !selected)
 		WMSetFrameRelief(icon, WRFlat);
@@ -223,7 +224,7 @@ static void scrollIcons(WSwitchPanel *panel, int delta)
 	for (i = panel->firstVisible; i < panel->firstVisible + panel->visibleCount; i++) {
 		if (i == panel->current)
 			continue;
-		dim = ((char) WMGetFromArray(panel->flags, i) & ICON_DIM);
+		dim = ((char) (uintptr_t) WMGetFromArray(panel->flags, i) & ICON_DIM);
 		changeImage(panel, i, 0, dim, True);
 	}
 }
-- 
1.8.1.4

From cbabc98623e49de141046fa5476facf0bfcc055a Mon Sep 17 00:00:00 2001
From: Iain Patterson <[email protected]>
Date: Sun, 2 Jun 2013 15:33:27 +0100
Subject: [PATCH 2/2] Preference to open the switchpanel without selecting a
 window.

If the new preference SwitchPanelOnlyOpen is set to YES, pressing
alt-tab or similar shortcut will only open the panel without
automatically switching to the next window.  Shortcuts will continue to
function normally once the panel is open.

Users can enable the new preference if they find themselves regularly
opening the switchpanel just to visualise which windows are open, or to
initiate same-class cycling.

The default value of the new preference is NO.  Behaviour is unchanged
unless the preference is explicitly enabled with the following command:

  $ wdwrite WindowMaker SwitchPanelOnlyOpen YES
---
 NEWS              | 6 ++++++
 src/WindowMaker.h | 1 +
 src/cycling.c     | 2 +-
 src/defaults.c    | 2 ++
 4 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index ed03cf0..499c3c0 100644
--- a/NEWS
+++ b/NEWS
@@ -81,6 +81,12 @@ command:
 
 $ wdwrite WindowMaker StrictWindozeCycling NO
 
+If you find yourself regularly opening the switchpanel just to visualise open
+windows, you can run the following command to force the first "FocusNextKey"
+or similar shortcut to open the panel without switching to a new window.
+
+$ wdwrite WindowMaker SwitchPanelOnlyOpen YES
+
 
 --- 0.95.2
 
diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index bc034d9..100f75b 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -419,6 +419,7 @@ typedef struct WPreferences {
     char cycle_active_head_only;        /* Cycle only windows on the active 
head */
     char cycle_ignore_minimized;        /* Ignore minimized windows when 
cycling */
     char strict_windoze_cycle;          /* don't close switchpanel when shift 
is released */
+    char panel_only_open;               /* Only open the switchpanel; don't 
switch */
 
     /* All delays here are in ms. 0 means instant auto-action. */
     int clip_auto_raise_delay;         /* Delay after which the clip will be 
raised when entered */
diff --git a/src/cycling.c b/src/cycling.c
index bae12be..78449b4 100644
--- a/src/cycling.c
+++ b/src/cycling.c
@@ -129,7 +129,7 @@ void StartWindozeCycle(WWindow * wwin, XEvent * event, Bool 
next, Bool class_onl
 
        if (swpanel) {
 
-               if (wwin->flags.mapped)
+               if (wwin->flags.mapped && !wPreferences.panel_only_open)
                        newFocused = wSwitchPanelSelectNext(swpanel, !next, 
True, False);
                else
                        newFocused = wSwitchPanelSelectFirst(swpanel, False);
diff --git a/src/defaults.c b/src/defaults.c
index 50db1d4..dde87b5 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -478,6 +478,8 @@ WDefaultEntry optionList[] = {
            &wPreferences.single_click, getBool, NULL, NULL, NULL},
        {"StrictWindozeCycle",  "YES",  NULL,
            &wPreferences.strict_windoze_cycle, getBool, NULL, NULL, NULL},
+       {"SwitchPanelOnlyOpen", "NO",   NULL,
+           &wPreferences.panel_only_open, getBool, NULL, NULL, NULL},
 
        /* style options */
 
-- 
1.8.1.4

Reply via email to