> Please do that unless you plan do update the patch again before
> recommend that I include it.
> 
here workspaces keybindings patch, you were faster for terminal patch ;)

> I'm a bit concerned about a plugin moving a window like that when it's
> minimized. It can definitely cause viewport switching issues. The
> input-transform branch that will be available soon is going to provide
> a
> proper way to do this.

Sure,vignettes plugin isn't really ready to be to use seriously, it's
only a beginning. I have already removed the hack for minimized windows
and await patiently for the input-transform. 

In this moment, I play with so that it functions with the Xembed
protocol, I have a small question in addition on this subject. It's
normal that I can intercept only ClientMessage Xembed when they are sent
in broadcast ? Perhaps it's a mistake, wanting to intercept
ClientMessage Xembed in compiz ?

> - David
> 
> �
> 
Nicolas
-- 
gandalfn <[EMAIL PROTECTED]>
commit 22ba938c602661ce7cfb7123c88ea5f7ce3a9a41
Author: Nicolas Bruguier <[EMAIL PROTECTED]>
Date:   Wed Feb 14 00:18:52 2007 +0100

    Add workspaces keybindings

diff --git a/include/compiz.h b/include/compiz.h
index cee019d..fb88780 100644
--- a/include/compiz.h
+++ b/include/compiz.h
@@ -546,7 +546,39 @@ typedef int CompFileWatchHandle;
 #define COMP_DISPLAY_OPTION_TERMINAL			  56
 #define COMP_DISPLAY_OPTION_RUN_TERMINAL		  57
 #define COMP_DISPLAY_OPTION_PING_DELAY			  58
-#define COMP_DISPLAY_OPTION_NUM				  59
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1            59
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2            60
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3            61
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4            62
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5            63
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6            64
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7            65
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8            66
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9            67
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10           68
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11           69
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12           70
+#define COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP         71
+#define COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP        72
+#define COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP           73
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP         74
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1_WINDOW     75
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2_WINDOW     76
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3_WINDOW     77
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4_WINDOW     78
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5_WINDOW     79
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6_WINDOW     80
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7_WINDOW     81
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8_WINDOW     82
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9_WINDOW     83
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10_WINDOW    84
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11_WINDOW    85
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12_WINDOW    86
+#define COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP_WINDOW  87
+#define COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP_WINDOW 88
+#define COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP_WINDOW    89
+#define COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP_WINDOW  90
+#define COMP_DISPLAY_OPTION_NUM                            91
 
 typedef CompOption *(*GetDisplayOptionsProc) (CompDisplay *display,
 					      int	  *count);
@@ -2145,6 +2177,13 @@ getWindowProp32 (CompDisplay	*display,
 		 Atom		property,
 		 unsigned short defaultValue);
 
+Bool
+getWindowPropList (CompDisplay  *display,
+		 Window	    id,
+	     	 Atom	    property,
+	         unsigned long **list,
+		 unsigned long *nb);
+		 
 void
 setWindowProp32 (CompDisplay    *display,
 		 Window         id,
diff --git a/src/display.c b/src/display.c
index c20246d..5565744 100644
--- a/src/display.c
+++ b/src/display.c
@@ -46,6 +46,13 @@
 
 #include <compiz.h>
 
+typedef enum _CompDisplayDirection {
+	COMP_DISPLAY_DIRECTION_LEFT,
+	COMP_DISPLAY_DIRECTION_RIGHT,
+	COMP_DISPLAY_DIRECTION_UP,
+	COMP_DISPLAY_DIRECTION_DOWN
+} CompDisplayDirection;
+
 static unsigned int virtualModMask[] = {
     CompAltMask, CompMetaMask, CompSuperMask, CompHyperMask,
     CompModeSwitchMask, CompNumLockMask, CompScrollLockMask
@@ -219,6 +226,85 @@ freeDisplayPrivateIndex (int index)
 }
 
 static Bool
+getDesktopLayout(CompDisplay *d,
+				 Window root,
+				 unsigned int *cols,
+				 unsigned int *rows)
+{
+	unsigned long *list, nb;
+	Atom 	   net_desktop_layout;
+				
+	net_desktop_layout = XInternAtom (d->display, "_NET_DESKTOP_LAYOUT", 0);
+    			
+	if (getWindowPropList(d, root, net_desktop_layout, &list, &nb))
+	{
+		if (nb >= 3)
+		{
+			*cols = (unsigned int)list[list[0] ? 2 : 1];
+			*rows = (unsigned int)list[list[0] ? 1 : 2];
+		}
+		XFree(list);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+static unsigned int
+calcDesktopIndex(CompDisplay 			*d,
+				 Window		 			root,
+				 CompDisplayDirection 	direction)
+{
+	CompScreen *s;
+	unsigned int cols = 0, rows = 0;
+	int desktop = 0, current_col = 0;
+	
+	s = findScreenAtDisplay (d, root);		
+	if (s && s->nDesktop > 1 && getDesktopLayout(d, root, &cols, &rows) && rows)
+	{
+		switch (direction)
+		{
+			case COMP_DISPLAY_DIRECTION_LEFT:
+				if (cols == 0)
+					cols = s->nDesktop / rows;
+				current_col = s->currentDesktop / cols;
+				desktop = s->currentDesktop - 1;
+			
+				if ((desktop / cols) != current_col)
+					desktop = s->currentDesktop + cols - 1;
+				break;
+			case COMP_DISPLAY_DIRECTION_RIGHT:
+				if (cols == 0)
+					cols = s->nDesktop / rows;
+				current_col = s->currentDesktop / cols;
+				desktop = s->currentDesktop + 1;
+			
+				if ((desktop / cols) != current_col)
+					desktop = s->currentDesktop - cols + 1;
+				break;
+			case COMP_DISPLAY_DIRECTION_UP:
+				if (cols == 0)
+					cols = s->nDesktop / rows;
+				desktop = s->currentDesktop - cols;
+			
+				if (desktop < 0)
+					desktop = s->nDesktop - cols;
+				break;
+			case COMP_DISPLAY_DIRECTION_DOWN:
+				if (cols == 0)
+					cols = s->nDesktop / rows;
+				desktop = s->currentDesktop + cols;
+			
+				if (desktop >= s->nDesktop)
+					desktop -= s->nDesktop;
+				break;
+			default:
+				break;
+		}
+	}
+	return desktop;
+}
+
+static Bool
 closeWin (CompDisplay     *d,
 	  CompAction      *action,
 	  CompActionState state,
@@ -745,6 +831,154 @@ shade (CompDisplay     *d,
     return TRUE;
 }
 
+static Bool
+switchToDesktopDirection (CompDisplay     *d,
+			   CompAction      *action,
+		 	   CompActionState state,
+			   CompOption      *option,
+			   int		    nOption)
+{
+	CompScreen *s;
+	Window     xid;
+							  
+	xid = getIntOptionNamed (option, nOption, "root", 0);
+	
+	s = findScreenAtDisplay (d, xid);
+	if (s) 
+	{
+	CompDisplayDirection direction = -1;
+	int	   i = COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP;
+
+	while (i <= COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP)
+	{
+	    if (action == &d->opt[i].value.action)
+	    {
+		direction = i - COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP;
+		break;
+	    }
+
+	    i++;
+	}
+	if (direction >= COMP_DISPLAY_DIRECTION_LEFT)
+		setCurrentDesktop(s, calcDesktopIndex(d, xid, direction));
+	}
+	
+	return FALSE;
+}
+
+static Bool
+switchToDesktop (CompDisplay     *d,
+		  CompAction      *action,
+		  CompActionState state,
+		  CompOption      *option,
+		  int		    nOption)
+{
+	CompScreen *s;
+	Window     xid;
+				
+	xid = getIntOptionNamed (option, nOption, "root", 0);
+				
+	s = findScreenAtDisplay (d, xid);
+	if (s)
+	{
+	    int	   desktop = -1;
+	    int	   i = COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1;
+
+	    while (i <= COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12)
+	    {
+	        if (action == &d->opt[i].value.action)
+	        {
+		        desktop = i - COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1;
+		        break;
+	        }
+
+	        i++;
+	    }
+	    if (desktop >= 0)
+		    setCurrentDesktop(s, desktop);
+	}
+	return FALSE;
+}
+
+static Bool
+switchWindowToDesktopDirection (CompDisplay     *d,
+		  		 CompAction      *action,
+				 CompActionState state,
+				 CompOption      *option,
+				 int		    nOption)
+{
+	CompScreen *s;
+	CompWindow *w;
+	Window     xid, root;
+							  
+	xid = getIntOptionNamed (option, nOption, "window", 0);
+	root = getIntOptionNamed (option, nOption, "root", 0);
+									  
+	w = findTopLevelWindowAtDisplay (d, xid);
+	s = findScreenAtDisplay (d, root);
+    			
+	if (w && s)
+	{
+	    CompDisplayDirection direction = -1;
+	    int	   i = COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP_WINDOW;
+
+	    while (i <= COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP_WINDOW)
+	    {
+	        if (action == &d->opt[i].value.action)
+	        {
+		        direction = i - COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP_WINDOW;
+		        break;
+	        }
+
+	        i++;
+	    }
+	    if (direction >= COMP_DISPLAY_DIRECTION_LEFT)
+		{
+			int desktop = calcDesktopIndex(d, root, direction);
+
+			setCurrentDesktop(s, desktop);
+		    setDesktopForWindow(w, desktop);
+		}
+	}
+	
+	return FALSE;
+}
+
+static Bool
+switchWindowToDesktop (CompDisplay     *d,
+		    	CompAction      *action,
+		    	CompActionState state,
+		    	CompOption      *option,
+		    	int	    	nOption)
+{
+	CompWindow *w;
+	Window     xid;
+
+	xid = getIntOptionNamed (option, nOption, "window", 0);
+
+	w = findTopLevelWindowAtDisplay (d, xid);
+    			
+	if (w)
+	{
+	    int	   desktop = -1;
+	    int	   i = COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1_WINDOW;
+
+	    while (i <= COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12_WINDOW)
+	    {
+	        if (action == &d->opt[i].value.action)
+	        {
+		        desktop = i - COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1_WINDOW;
+		        break;
+	        }
+
+	        i++;
+	    }
+	    if (desktop >= 0)
+		    setDesktopForWindow(w, desktop);
+	}
+	return FALSE;
+}
+
 static void
 compDisplayInitOptions (CompDisplay *display,
 			char	    **plugin,
@@ -1260,6 +1494,97 @@ compDisplayInitOptions (CompDisplay *display,
     o->value.i	  = PING_DELAY_DEFAULT;
     o->rest.i.min = PING_DELAY_MIN;
     o->rest.i.max = PING_DELAY_MAX;
+    
+#define SWITCH_TO_DESKTOP_SHORT        N_("Switch To Desktop %d")
+#define SWITCH_TO_DESKTOP_LONG         N_("Switch to desktop %d")
+#define SWITCH_TO_DESKTOP_WINDOW_SHORT N_("Switch window to desktop %d")
+#define SWITCH_TO_DESKTOP_WINDOW_LONG  N_("Switch window to desktop %d")
+
+#define SWITCH_TO_DESKTOP_OPTION(n)						 			 \
+	o = &display->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_ ## n];	 \
+	o->name			  = "switch_to_desktop_" #n;			 		 \
+	asprintf (&str, SWITCH_TO_DESKTOP_SHORT, n);					 \
+	o->shortDesc		  = str;				 					 \
+	asprintf (&str, SWITCH_TO_DESKTOP_LONG, n);						 \
+	o->longDesc			  = str;				 					 \
+	o->type			  = CompOptionTypeAction;		 				 \
+	o->value.action.initiate	  = switchToDesktop;				 \
+	o->value.action.terminate	  = 0;					 			 \
+	o->value.action.bell	  = FALSE;				 				 \
+	o->value.action.edgeMask	  = 0;					 			 \
+	o->value.action.state	  = CompActionStateInitKey;		 		 \
+	o->value.action.state	 |= CompActionStateInitButton;			 \
+	o->value.action.type	  = CompBindingTypeNone;		 		 \
+								 									 \
+	o = &display->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_ ## n ## _WINDOW]; \
+	o->name			  = "switch_to_desktop_" #n "_window";		 	 \
+	asprintf (&str, SWITCH_TO_DESKTOP_WINDOW_SHORT, n);				 \
+	o->shortDesc		  = str;				 					 \
+	asprintf (&str, SWITCH_TO_DESKTOP_WINDOW_LONG, n);				 \
+	o->longDesc			  = str;				 					 \
+	o->type			  = CompOptionTypeAction;		 				 \
+	o->value.action.initiate	  = switchWindowToDesktop;			 \
+	o->value.action.terminate	  = 0;					 			 \
+	o->value.action.bell	  = FALSE;				 				 \
+	o->value.action.edgeMask	  = 0;					 			 \
+	o->value.action.state	  = CompActionStateInitKey;		 		 \
+	o->value.action.state	 |= CompActionStateInitButton;		 	 \
+	o->value.action.type	  = CompBindingTypeNone			
+	SWITCH_TO_DESKTOP_OPTION (1);
+	SWITCH_TO_DESKTOP_OPTION (2);
+	SWITCH_TO_DESKTOP_OPTION (3);
+	SWITCH_TO_DESKTOP_OPTION (4);
+	SWITCH_TO_DESKTOP_OPTION (5);
+	SWITCH_TO_DESKTOP_OPTION (6);
+	SWITCH_TO_DESKTOP_OPTION (7);
+	SWITCH_TO_DESKTOP_OPTION (8);
+	SWITCH_TO_DESKTOP_OPTION (9);
+	SWITCH_TO_DESKTOP_OPTION (10);
+	SWITCH_TO_DESKTOP_OPTION (11);
+	SWITCH_TO_DESKTOP_OPTION (12);
+
+#define SWITCH_TO_DESKTOP_DIRECTION_SHORT N_("Switch To %s Desktop")
+#define SWITCH_TO_DESKTOP_DIRECTION_LONG  N_("Switch to %s desktop")
+#define SWITCH_TO_DESKTOP_DIRECTION_WINDOW_SHORT N_("Switch window to " \
+													"%s desktop")
+#define SWITCH_TO_DESKTOP_DIRECTION_WINDOW_LONG  N_("Switch window to %s " \
+													"desktop")
+
+#define SWITCH_TO_DESKTOP_DIRECTION_OPTION(sname, dname)		 	\
+	o = &display->opt[COMP_DISPLAY_OPTION_SWITCH_TO_##sname##_DESKTOP]; \
+	o->name			  = "switch_to_" dname "_desktop";		 		\
+	asprintf (&str, SWITCH_TO_DESKTOP_DIRECTION_SHORT, dname);		\
+	o->shortDesc		  = str;				 					\
+	asprintf (&str, SWITCH_TO_DESKTOP_DIRECTION_LONG, dname);		\
+	o->longDesc			  = str;				 					\
+	o->type			  = CompOptionTypeAction;		 				\
+	o->value.action.initiate	  = switchToDesktopDirection;		\
+	o->value.action.terminate	  = 0;					 			\
+	o->value.action.bell	  = FALSE;				 				\
+	o->value.action.edgeMask	  = 0;					 			\
+	o->value.action.state	  = CompActionStateInitKey;		 		\
+	o->value.action.state	 |= CompActionStateInitButton;			\
+	o->value.action.type	  = CompBindingTypeNone;		 		\
+								 									\
+	o = &display->opt[COMP_DISPLAY_OPTION_SWITCH_TO_##sname##_DESKTOP_WINDOW]; \
+	o->name			  = "switch_to_" dname "_desktop_window";	 	\
+	asprintf (&str, SWITCH_TO_DESKTOP_DIRECTION_WINDOW_SHORT, dname); \
+	o->shortDesc		  = str;				 					\
+	asprintf (&str, SWITCH_TO_DESKTOP_DIRECTION_WINDOW_LONG, dname); \
+	o->longDesc			  = str;				 					\
+	o->type			  = CompOptionTypeAction;		 				\
+	o->value.action.initiate	  = switchWindowToDesktopDirection;	\
+	o->value.action.terminate	  = 0;					 			\
+	o->value.action.bell	  = FALSE;				 				\
+	o->value.action.edgeMask	  = 0;					 			\
+	o->value.action.state	  = CompActionStateInitKey;		 		\
+	o->value.action.state	 |= CompActionStateInitButton;		 	\
+	o->value.action.type	  = CompBindingTypeNone
+				
+	SWITCH_TO_DESKTOP_DIRECTION_OPTION (LEFT, "left");
+	SWITCH_TO_DESKTOP_DIRECTION_OPTION (RIGHT, "right");
+	SWITCH_TO_DESKTOP_DIRECTION_OPTION (UP, "up");
+	SWITCH_TO_DESKTOP_DIRECTION_OPTION (DOWN, "down");
 }
 
 CompOption *
@@ -1464,6 +1789,38 @@ setDisplayOption (CompDisplay     *display,
     case COMP_DISPLAY_OPTION_TOGGLE_WINDOW_MAXIMIZED_HORZ:
     case COMP_DISPLAY_OPTION_TOGGLE_WINDOW_MAXIMIZED_VERT:
     case COMP_DISPLAY_OPTION_TOGGLE_WINDOW_SHADED:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP_WINDOW:
+	case COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP_WINDOW:
 	if (setDisplayAction (display, o, value))
 	    return TRUE;
 	break;
@@ -2508,6 +2865,70 @@ addScreenActions (CompDisplay *d, CompScreen *s)
 		     &d->opt[COMP_DISPLAY_OPTION_TOGGLE_WINDOW_MAXIMIZED_VERT].value.action);
     addScreenAction (s,
 		     &d->opt[COMP_DISPLAY_OPTION_TOGGLE_WINDOW_SHADED].value.action);
+     addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1].value.action);
+     addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP].value.action);
+	addScreenAction (s,
+		     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP].value.action);
+	addScreenAction (s,
+	      &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_1_WINDOW].value.action);
+	addScreenAction (s,
+	      &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_2_WINDOW].value.action);
+	addScreenAction (s,
+	      &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_3_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_4_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_5_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_6_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_7_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_8_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_9_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_10_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_11_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DESKTOP_12_WINDOW].value.action);
+	addScreenAction (s,
+	   &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_LEFT_DESKTOP_WINDOW].value.action);
+	addScreenAction (s,
+	  &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_RIGHT_DESKTOP_WINDOW].value.action);
+	addScreenAction (s,
+	     &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_UP_DESKTOP_WINDOW].value.action);
+	addScreenAction (s,
+	   &d->opt[COMP_DISPLAY_OPTION_SWITCH_TO_DOWN_DESKTOP_WINDOW].value.action);
 }
 
 void
diff --git a/src/window.c b/src/window.c
index fb708f7..a901968 100644
--- a/src/window.c
+++ b/src/window.c
@@ -34,6 +34,7 @@
 #include <strings.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <limits.h>
 
 #include <compiz.h>
 
@@ -915,6 +916,27 @@ setWindowProp32 (CompDisplay    *display,
 		     (unsigned char *) &value32, 1);
 }
 
+Bool
+getWindowPropList (CompDisplay  *display,
+	            Window	  id,
+	            Atom	  property,
+	            unsigned long **list,
+		    unsigned long *nb)
+{
+    Atom	  actual;
+    int		  result, format;
+    unsigned long left;
+    
+    result = XGetWindowProperty (display->display, id, property,
+				 0L, LONG_MAX, FALSE, XA_CARDINAL, &actual, &format,
+				 nb, &left, (unsigned char **)list);
+
+    if (result == Success && *nb && list)
+    	return TRUE;
+    
+    return FALSE;
+}
+
 static void
 updateFrameWindow (CompWindow *w)
 {

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
compiz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/compiz

Reply via email to