Here is a switcher patch to disable window list:

It's very useful if you set opacity to 0. Then, window just bring to front one 
by one while switching. It's much more usable, i think, that small miniatures 
in a list where you don't see anything.

While making this patch, a question come into my head, nobody know on 
compiz.biz and some people are as curious as me.

Two code example:

/**********/
 case SWITCH_SCREEN_OPTION_MIPMAP: 
 case SWITCH_SCREEN_OPTION_ICON: 
 case SWITCH_SCREEN_OPTION_MINIMIZED: 
         if (compSetBoolOption (o, value)) 
             return TRUE; 
         break; 
/**********/


/**********/
case SWITCH_SCREEN_OPTION_BRINGTOFRONT: 
         if (compSetBoolOption (o, value)) 
         { 
             ss->bringToFront = o->value.b; 
             return TRUE; 
         } 
/**********/

At first look, i tell me: "How plugin know that MINIMIZED option had change if 
we do nothing more than returning TRUE. After looking the code, i saw this:

ss->opt[SWITCH_SCREEN_OPTION_MINIMIZED].value.b

So my question is:
When do i have to directly read CompOption?
When do i have to add a member to my plugin struct and update it in 
pluginSetScreenOption() ?

Cedric
--- compiz_orig/plugins/switcher.c	2006-11-11 23:26:22.010968361 +0100
+++ compiz/plugins/switcher.c	2006-11-11 23:21:44.211200345 +0100
@@ -83,6 +83,8 @@
 
 #define SWITCH_MINIMIZED_DEFAULT TRUE
 
+#define SWITCH_SHOW_WINDOW_LIST_DEFAULT TRUE
+
 static char *winType[] = {
     N_("Toolbar"),
     N_("Utility"),
@@ -110,18 +112,19 @@
     Atom selectWinAtom;
 } SwitchDisplay;
 
-#define SWITCH_SCREEN_OPTION_SPEED	  0
-#define SWITCH_SCREEN_OPTION_TIMESTEP	  1
-#define SWITCH_SCREEN_OPTION_WINDOW_TYPE  2
-#define SWITCH_SCREEN_OPTION_MIPMAP	  3
-#define SWITCH_SCREEN_OPTION_SATURATION	  4
-#define SWITCH_SCREEN_OPTION_BRIGHTNESS	  5
-#define SWITCH_SCREEN_OPTION_OPACITY	  6
-#define SWITCH_SCREEN_OPTION_BRINGTOFRONT 7
-#define SWITCH_SCREEN_OPTION_ZOOM	  8
-#define SWITCH_SCREEN_OPTION_ICON	  9
-#define SWITCH_SCREEN_OPTION_MINIMIZED	  10
-#define SWITCH_SCREEN_OPTION_NUM	  11
+#define SWITCH_SCREEN_OPTION_SPEED	  	0
+#define SWITCH_SCREEN_OPTION_TIMESTEP	  	1
+#define SWITCH_SCREEN_OPTION_WINDOW_TYPE  	2
+#define SWITCH_SCREEN_OPTION_MIPMAP	  	3
+#define SWITCH_SCREEN_OPTION_SATURATION	  	4
+#define SWITCH_SCREEN_OPTION_BRIGHTNESS	  	5
+#define SWITCH_SCREEN_OPTION_OPACITY	  	6
+#define SWITCH_SCREEN_OPTION_BRINGTOFRONT 	7
+#define SWITCH_SCREEN_OPTION_ZOOM	  	8
+#define SWITCH_SCREEN_OPTION_ICON	  	9
+#define SWITCH_SCREEN_OPTION_MINIMIZED	  	10
+#define SWITCH_SCREEN_OPTION_SHOW_WINDOW_LIST	11
+#define SWITCH_SCREEN_OPTION_NUM	  	12
 
 typedef struct _SwitchScreen {
     PreparePaintScreenProc preparePaintScreen;
@@ -171,6 +174,7 @@
 
     Bool bringToFront;
     Bool allWindows;
+    Bool showWindowList;
 } SwitchScreen;
 
 #define MwmHintsDecorations (1L << 1)
@@ -252,7 +256,7 @@
     int	        index;
 
     SWITCH_SCREEN (screen);
-
+	                
     o = compFindOption (ss->opt, NUM_OPTIONS (ss), name, &index);
     if (!o)
 	return FALSE;
@@ -285,6 +289,13 @@
 	if (compSetBoolOption (o, value))
 	    return TRUE;
 	break;
+    case SWITCH_SCREEN_OPTION_SHOW_WINDOW_LIST:
+	if (compSetBoolOption (o, value))
+	{
+	    ss->showWindowList = o->value.b;
+            return TRUE;
+        }
+	break;	
     case SWITCH_SCREEN_OPTION_SATURATION:
 	if (compSetIntOption (o, value))
 	{
@@ -443,6 +454,13 @@
     o->longDesc	  = N_("Show minimized windows");
     o->type	  = CompOptionTypeBool;
     o->value.b    = SWITCH_MINIMIZED_DEFAULT;
+
+    o = &ss->opt[SWITCH_SCREEN_OPTION_SHOW_WINDOW_LIST];
+    o->name	  = "window_list";
+    o->shortDesc  = N_("Window list");
+    o->longDesc	  = N_("Show window list");
+    o->type	  = CompOptionTypeBool;
+    o->value.b    = SWITCH_SHOW_WINDOW_LIST_DEFAULT;
 }
 
 static void
@@ -776,42 +794,50 @@
 	attr.colormap	      = XCreateColormap (dpy, s->root, visual,
 						 AllocNone);
 
-	ss->popupWindow =
-	    XCreateWindow (dpy, s->root,
-			   s->width  / 2 - xsh.width / 2,
-			   s->height / 2 - xsh.height / 2,
-			   xsh.width, xsh.height, 0,
-			   32, InputOutput, visual,
-			   CWBackPixel | CWBorderPixel | CWColormap, &attr);
-
-	XSetWMProperties (dpy, ss->popupWindow, NULL, NULL,
-			  programArgv, programArgc,
-			  &xsh, &xwmh, NULL);
-
-	mwmHintsAtom = XInternAtom (dpy, "_MOTIF_WM_HINTS", 0);
-
-	memset (&mwmHints, 0, sizeof (mwmHints));
-
-	mwmHints.flags	     = MwmHintsDecorations;
-	mwmHints.decorations = 0;
-
-	XChangeProperty (dpy, ss->popupWindow, mwmHintsAtom, mwmHintsAtom,
-			 8, PropModeReplace, (unsigned char *) &mwmHints,
-			 sizeof (mwmHints));
-
-	state[nState++] = s->display->winStateAboveAtom;
-	state[nState++] = s->display->winStateStickyAtom;
-	state[nState++] = s->display->winStateSkipTaskbarAtom;
-	state[nState++] = s->display->winStateSkipPagerAtom;
-
-	XChangeProperty (dpy, ss->popupWindow,
-			 XInternAtom (dpy, "_NET_WM_STATE", 0),
-			 XA_ATOM, 32, PropModeReplace,
-			 (unsigned char *) state, nState);
-
-	setWindowProp (s->display, ss->popupWindow,
-		       s->display->winDesktopAtom,
-		       0xffffffff);
+	if (!ss->showWindowList && ss->popupWindow)
+	{
+	    XUnmapWindow (s->display->display, ss->popupWindow);
+	}
+
+	if (ss->showWindowList) 
+	{	
+	    ss->popupWindow =
+	        XCreateWindow (dpy, s->root,
+		  	       s->width  / 2 - xsh.width / 2,
+			       s->height / 2 - xsh.height / 2,
+			       xsh.width, xsh.height, 0,
+			       32, InputOutput, visual,
+			       CWBackPixel | CWBorderPixel | CWColormap, &attr);
+
+	    XSetWMProperties (dpy, ss->popupWindow, NULL, NULL,
+			      programArgv, programArgc,
+			      &xsh, &xwmh, NULL);
+
+	    mwmHintsAtom = XInternAtom (dpy, "_MOTIF_WM_HINTS", 0);
+
+	    memset (&mwmHints, 0, sizeof (mwmHints));
+
+	    mwmHints.flags	     = MwmHintsDecorations;
+	    mwmHints.decorations = 0;
+
+	    XChangeProperty (dpy, ss->popupWindow, mwmHintsAtom, mwmHintsAtom,
+			     8, PropModeReplace, (unsigned char *) &mwmHints,
+			     sizeof (mwmHints));
+
+	    state[nState++] = s->display->winStateAboveAtom;
+	    state[nState++] = s->display->winStateStickyAtom;
+	    state[nState++] = s->display->winStateSkipTaskbarAtom;
+	    state[nState++] = s->display->winStateSkipPagerAtom;
+
+	    XChangeProperty (dpy, ss->popupWindow,
+			     XInternAtom (dpy, "_NET_WM_STATE", 0),
+			     XA_ATOM, 32, PropModeReplace,
+			     (unsigned char *) state, nState);
+
+	    setWindowProp (s->display, ss->popupWindow,
+		           s->display->winDesktopAtom,
+		           0xffffffff);
+	}
     }
 
     if (!ss->grabIndex)
@@ -843,7 +869,8 @@
 		}
 	    }
 
-	    setSelectedWindowHint (s);
+	    if (ss->showWindowList)
+                setSelectedWindowHint (s);
 	}
 
 	damageScreen (s);
@@ -1276,6 +1303,11 @@
 {
     SWITCH_SCREEN (s);
 
+    if (!ss->showWindowList && ss->popupWindow)
+    {
+        XUnmapWindow (s->display->display, ss->popupWindow);
+    }
+
     if (ss->moreAdjust)
     {
 	int   steps, m;
@@ -2041,7 +2073,8 @@
 
     ss->bringToFront = SWITCH_BRINGTOFRONT_DEFAULT;
     ss->allWindows   = FALSE;
-
+    ss->showWindowList      = SWITCH_SHOW_WINDOW_LIST_DEFAULT;
+    
     switchScreenInitOptions (ss);
 
     addScreenAction (s, &sd->opt[SWITCH_DISPLAY_OPTION_NEXT].value.action);
--- compiz_orig/plugins/compiz.schemas.in	2006-11-11 14:23:04.473547296 +0100
+++ compiz/plugins/compiz.schemas.in	2006-11-11 14:26:21.811547360 +0100
@@ -32138,6 +32138,18 @@
         </schema>
 
         <schema>
+            <key>/schemas/apps/compiz/plugins/zoom/screen0/options/zoom_factor</key>
+            <applyto>/apps/compiz/plugins/zoom/screen0/options/zoom_factor</applyto>
+            <owner>compiz</owner>
+            <type>float</type>
+            <default>2.000000</default>
+            <locale name="C">
+                <short>Zoom factor</short>
+                <long>Zoom factor (1.01-3.0)</long>
+            </locale>
+	</schema>
+
+        <schema>
             <key>/schemas/apps/compiz/plugins/zoom/screen0/options/filter_linear</key>
             <applyto>/apps/compiz/plugins/zoom/screen0/options/filter_linear</applyto>
             <owner>compiz</owner>
_______________________________________________
compiz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/compiz

Reply via email to