All pastes #367693 Raw Edit

Stuff

public text v1 · immutable
#367693 ·published 2007-02-22 14:58 UTC
rendered paste body
Index: beryl-plugins/src/fadedesktop.c
===================================================================
--- beryl-plugins/src/fadedesktop.c	(Revision 4223)
+++ beryl-plugins/src/fadedesktop.c	(Arbeitskopie)
@@ -29,27 +29,24 @@
 #include <X11/Xatom.h>
 #include <X11/Xproto.h>
 
-#define FD_INITIATE_KEY_DEFAULT "F6"
-#define FD_INITIATE_MODIFIERS_DEFAULT CompSuperMask
-#define FD_INITIATE_EDGE_DEFAULT 0
+#define FD_FADETIME_DEFAULT 500
+#define FD_FADETIME_MIN		1
+#define FD_FADETIME_MAX     5000
 
-#define FD_SPEED_DEFAULT 20
-#define FD_SPEED_MIN     1
-#define FD_SPEED_MAX     100
+#define FD_SCREEN_OPTION_FADETIME	0
+#define FD_SCREEN_OPTION_NUM		1
 
+typedef enum
+{
+	FD_STATE_OFF = 0,
+	FD_STATE_OUT,
+	FD_STATE_ON,
+	FD_STATE_IN
+} FadeDesktopState;
 
-#define FD_DISPLAY_OPTION_INITIATE 0
-#define FD_DISPLAY_OPTION_NUM 1
-
-#define FD_SCREEN_OPTION_SPEED 0
-#define FD_SCREEN_OPTION_NUM 1
-
-
-
 typedef struct _FadeDesktopDisplay
 {
 	int screenPrivateIndex;
-	CompOption opt[FD_DISPLAY_OPTION_NUM];
 } FadeDesktopDisplay;
 
 typedef struct _FadeDesktopScreen
@@ -58,15 +55,17 @@
 
 	PreparePaintScreenProc preparePaintScreen;
 	DonePaintScreenProc donePaintScreen;
+	EnterShowDesktopNotifyProc enterShowDesktopNotify;
+	LeaveShowDesktopNotifyProc leaveShowDesktopNotify;
 	
 	CompOption opt[FD_SCREEN_OPTION_NUM];
-
-	Bool showingDesktop;
-	Bool reverting;
+	FadeDesktopState state;
+	int fadeTime;
 } FadeDesktopScreen;
 
 typedef struct _FadeDesktopWindow
 {
+	Bool fading;
 	Bool isHidden;
 } FadeDesktopWindow;
 
@@ -101,201 +100,163 @@
 	if (w->state & CompWindowStateOffscreenMask)
 		return FALSE;
 
-    if (w->wmType & (CompWindowTypeDesktopMask | CompWindowTypeDockMask))
+	if (w->attrib.override_redirect)
 		return FALSE;
 
-	if (w->type & (CompWindowTypeNormalMask | CompWindowTypeDialogMask ) )
-	{
-		return TRUE;
-	}
-	return FALSE;
+	if (!w->managed)
+		return FALSE;
+
+    if (!(w->wmType & w->screen->showingDesktopMask))
+		return FALSE;
+
+	if (!(w->type & w->screen->showingDesktopMask))
+		return FALSE;
+
+	return TRUE;
 }
 
-static Bool
-fadeDesktopTerminate(CompDisplay *d, CompAction * action, CompActionState state, CompOption *option, int nOption)
+static void 
+fadeDesktopPreparePaintScreen(CompScreen *s, int msSinceLastPaint)
 {
-	CompScreen *s;
-	Window xid;
+	FD_SCREEN(s);
 
-	xid = getIntOptionNamed(option,nOption,"root",0);
-	s = findScreenAtDisplay(d,xid);
+	fs->fadeTime -= msSinceLastPaint;
+	if (fs->fadeTime < 0)
+		fs->fadeTime = 0;
 
-
-	if (s)
+	if ((fs->state == FD_STATE_OUT) || (fs->state == FD_STATE_IN))
 	{
-		FD_SCREEN(s);
-		fs->reverting = TRUE;
 		CompWindow *w;
-		for (w=s->windows; w; w=w->next)
+		for (w = s->windows; w; w = w->next)
 		{
 			FD_WINDOW(w);
-			if (fw->isHidden && (w->state & CompWindowStateOffscreenMask))
+			if (fw->fading)
 			{
-				moveWindowOnscreen(w);
+				int newOpacity = w->opacity * ((fs->state == FD_STATE_OUT) ? fs->fadeTime : 
+						fs->opt[FD_SCREEN_OPTION_FADETIME].value.i - fs->fadeTime) / 
+						fs->opt[FD_SCREEN_OPTION_FADETIME].value.i;
+				setWindowOpacity(w, newOpacity, PL_TEMP_HELLO);
+
+				if (fs->fadeTime == 0)
+				{
+					resetWindowOpacity(w, PL_TEMP_HELLO);
+					if (fs->state == FD_STATE_OUT)
+					{
+						moveWindowOffscreen(w);
+						fw->isHidden = TRUE;
+					}
+					fw->fading = FALSE;
+				}
 			}
-			fw->isHidden = FALSE;
 		}
-		
 	}
 
-	return TRUE;
-
+	UNWRAP(fs,s,preparePaintScreen);
+	(*s->preparePaintScreen) (s,msSinceLastPaint);
+	WRAP(fs,s,preparePaintScreen,fadeDesktopPreparePaintScreen);
 }
 
-
-static Bool 
-fadeDesktopInitiate(CompDisplay *d, CompAction *action, CompActionState state, CompOption *option, int nOption)
+static void fadeDesktopDonePaintScreen(CompScreen *s)
 {
-	CompScreen *s;
-	Window xid;
-	xid = getIntOptionNamed(option,nOption,"root",0);
-	s = findScreenAtDisplay(d,xid);
-	
-	
-	
-	if (s)
+	FD_SCREEN(s);
+
+	if ((fs->state == FD_STATE_OUT) || (fs->state == FD_STATE_IN))
 	{
-		FD_SCREEN(s);
-		
-		if (fs->showingDesktop)
+		if (fs->fadeTime <= 0)
 		{
-			fs->showingDesktop = FALSE;
-			fadeDesktopTerminate(d, action, state, option,  nOption);
-			return TRUE;
+			if (fs->state == FD_STATE_OUT)
+				fs->state = FD_STATE_ON;
+			else
+				fs->state = FD_STATE_OFF;
 		}
-		else if (fs->reverting)
-		{
-			fs->reverting = FALSE;
-		}
-		fs->showingDesktop = TRUE;
-
-		unsigned long data = 0;
-		XChangeProperty(s->display->display, s->root,
-					s->display->showingDesktopAtom,
-					XA_CARDINAL, 32, PropModeReplace,
-					(unsigned char *)&data, 1);
-		
+		else
+			damageScreen(s);
 	}
-	return TRUE;
-	
+
+	UNWRAP(fs,s,donePaintScreen);
+	(*s->donePaintScreen)(s);
+	WRAP(fs,s,donePaintScreen,fadeDesktopDonePaintScreen);
 }
 
-static void 
-fadeDesktopPreparePaintScreen(CompScreen *s, int msSinceLastPaint)
+static int fadeDesktopEnterShowDesktopNotify(CompScreen *s)
 {
 	FD_SCREEN(s);
-	#define SPEED ((fs->opt[FD_SCREEN_OPTION_SPEED].value.i ? fs->opt[FD_SCREEN_OPTION_SPEED].value.i : 1))
-	
-	int numWins=0;
-	int numReverts=0;
-
 	CompWindow *w;
-	for (w=s->windows; w; w=w->next)
+	int count = 0;
+
+	if ((fs->state == FD_STATE_OFF) || (fs->state == FD_STATE_IN))
 	{
-		if (isFDWin(w))
+		fs->state = FD_STATE_OUT;
+
+		fs->fadeTime = fs->opt[FD_SCREEN_OPTION_FADETIME].value.i -
+				fs->fadeTime;
+
+		for (w = s->windows; w; w = w->next)
 		{
-			if (fs->showingDesktop)
+			if (isFDWin(w))
 			{
-				if (w->paint.opacity > OPAQUE/SPEED)
-				{
-					setWindowOpacity(w,w->paint.opacity-OPAQUE/SPEED,PL_TEMP_HELLO);
-				}
-				else if (w->paint.opacity != 0)
-				{
-					FD_WINDOW(w);
+				FD_WINDOW(w);
 
-					moveWindowOffscreen(w);
-					fw->isHidden = TRUE;
-				}
+				fw->fading = TRUE;
+				w->inShowDesktopMode = TRUE;
+				count++;
 			}
-
-			if (fs->reverting)
-			{
-				if (w->paint.opacity + OPAQUE/SPEED <= w->opacity)
-				{
-					setWindowOpacity(w,w->paint.opacity + OPAQUE/SPEED,PL_TEMP_HELLO);
-				}
-				else 
-				{
-					resetWindowOpacity(w, PL_TEMP_HELLO);
-					numReverts++;
-				}
-				
-			}
-			numWins++;
-			
-			
-	
 		}
-	}
-	if (numWins == numReverts)
-	{
-		fs->reverting = FALSE;
-		unsigned long data = 0;
-		XChangeProperty(s->display->display, s->root,
-					s->display->showingDesktopAtom,
-					XA_CARDINAL, 32, PropModeReplace,
-					(unsigned char *)&data, 1);
-	}
 
-	UNWRAP(fs,s,preparePaintScreen);
-	(*s->preparePaintScreen) (s,msSinceLastPaint);
-	WRAP(fs,s,preparePaintScreen,fadeDesktopPreparePaintScreen);
+		damageScreen(s);
 
+	}
 
+	return count;
 }
 
-static void fadeDesktopDonePaintScreen(CompScreen *s)
+static int fadeDesktopLeaveShowDesktopNotify(CompScreen *s, CompWindow *w)
 {
 	FD_SCREEN(s);
-	if (fs->showingDesktop || fs->reverting)
+
+	if ((fs->state == FD_STATE_ON) || (fs->state == FD_STATE_OUT))
 	{
+		fs->state = FD_STATE_IN;
+
+		fs->fadeTime = fs->opt[FD_SCREEN_OPTION_FADETIME].value.i -
+				fs->fadeTime;
+
+		for (w = s->windows; w; w = w->next)
+		{
+			if (w->inShowDesktopMode)
+			{
+				FD_WINDOW(w);
+				if (fw->isHidden)
+				{
+					moveWindowOnscreen(w);
+					fw->isHidden = FALSE;
+					fw->fading = TRUE;
+				}
+				w->inShowDesktopMode = FALSE;
+			}
+		}
+
 		damageScreen(s);
 	}
-	UNWRAP(fs,s,donePaintScreen);
-	(*s->donePaintScreen)(s);
-	WRAP(fs,s,donePaintScreen,fadeDesktopDonePaintScreen);
-}
 
-static void
-fadeDesktopDisplayInitOptions(FadeDesktopDisplay *fd)
-{
-	CompOption *o;
-	o = &fd->opt[FD_DISPLAY_OPTION_INITIATE];
-	o->advanced = False;
-	o->name = "initiate";
-	o->group = N_("Misc. Options");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Initiate Fade to Desktop");
-	o->longDesc = N_("Initiate Fade to Desktop mode.");
-	o->type = CompOptionTypeAction;
-	o->value.action.initiate= fadeDesktopInitiate;
-	o->value.action.terminate = fadeDesktopTerminate;
-	o->value.action.bell = FALSE;
-	o->value.action.edgeMask = FD_INITIATE_EDGE_DEFAULT;
-	o->value.action.type = CompBindingTypeKey;
-	o->value.action.state = CompActionStateInitKey;
-	o->value.action.state |= CompActionStateInitEdge;
-	o->value.action.key.modifiers = FD_INITIATE_MODIFIERS_DEFAULT;
-	o->value.action.key.keysym = XStringToKeysym(FD_INITIATE_KEY_DEFAULT);
+	return TRUE;
 }
 
 static void fadeDesktopScreenInitOptions(FadeDesktopScreen * fs)
 {
 	CompOption *o;
-	o = &fs->opt[FD_SCREEN_OPTION_SPEED];
+	o = &fs->opt[FD_SCREEN_OPTION_FADETIME];
 	o->advanced = False;
-	o->name = "speed";
+	o->name = "fadetime";
 	o->group = N_("Misc. Options");
 	o->subGroup = N_("");
 	o->displayHints = "";
-	o->shortDesc = N_("Time to Fade");
+	o->shortDesc = N_("Time to Fade (ms)");
 	o->longDesc = N_("Time to Fade.");
 	o->type = CompOptionTypeInt;
-	o->value.i = FD_SPEED_DEFAULT;
-	o->rest.i.min = FD_SPEED_MIN;
-	o->rest.i.max = FD_SPEED_MAX;
+	o->value.i = FD_FADETIME_DEFAULT;
+	o->rest.i.min = FD_FADETIME_MIN;
+	o->rest.i.max = FD_FADETIME_MAX;
 }
 
 static Bool fadeDesktopInit(CompPlugin *p)
@@ -326,7 +287,6 @@
 		free(fd);
 		return FALSE;
 	}
-	fadeDesktopDisplayInitOptions(fd);
 	
 	d->privates[displayPrivateIndex].ptr = fd;
 	return TRUE;
@@ -356,13 +316,13 @@
 	}
 
 	fadeDesktopScreenInitOptions(fs);
-
-	fs->showingDesktop = FALSE;
+	fs->state = FD_STATE_OFF;
+	fs->fadeTime = 0;
 	
-	addScreenAction(s, &fd->opt[FD_DISPLAY_OPTION_INITIATE].value.action);
-	
 	WRAP(fs,s,preparePaintScreen,fadeDesktopPreparePaintScreen);
 	WRAP(fs,s,donePaintScreen,fadeDesktopDonePaintScreen);
+	WRAP(fs, s, enterShowDesktopNotify, fadeDesktopEnterShowDesktopNotify);
+	WRAP(fs, s, leaveShowDesktopNotify, fadeDesktopLeaveShowDesktopNotify);
 
 	s->privates[fd->screenPrivateIndex].ptr = fs;
 
@@ -373,13 +333,12 @@
 static void fadeDesktopFiniScreen(CompPlugin *p, CompScreen *s)
 {
 	FD_SCREEN(s);
-	FD_DISPLAY(s->display);
 	
 	UNWRAP(fs,s,preparePaintScreen);
 	UNWRAP(fs,s,donePaintScreen);
+	UNWRAP(fs, s, enterShowDesktopNotify);
+	UNWRAP(fs, s, leaveShowDesktopNotify);
 	
-	removeScreenAction(s, &fd->opt[FD_DISPLAY_OPTION_INITIATE].value.action);
-
 	freeWindowPrivateIndex(s, fs->windowPrivateIndex);
 	
 	free (fs);
@@ -395,6 +354,7 @@
 		return FALSE;
 
 	fw->isHidden = FALSE;
+	fw->fading = FALSE;
 	
 	w->privates[fs->windowPrivateIndex].ptr = fw;
 
@@ -405,7 +365,6 @@
 static void fadeDesktopFiniWindow(CompPlugin *p, CompWindow *w)
 {
 	FD_WINDOW(w);
-	FD_SCREEN(w->screen);
 	
 	free (fw);
 }
@@ -413,48 +372,6 @@
 
 #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption))
 
-static CompOption *fadeDesktopGetDisplayOptions(CompDisplay *display, int *count)
-{
-	if (display)
-	{
-		FD_DISPLAY(display);
-
-		*count = NUM_OPTIONS(fd);
-		return fd->opt;
-	}
-	else
-	{
-		FadeDesktopDisplay *fd = malloc(sizeof(FadeDesktopDisplay));
-
-		fadeDesktopDisplayInitOptions(fd);
-		*count = NUM_OPTIONS(fd);
-		return fd->opt;
-	}
-}
-
-static Bool 
-fadeDesktopSetDisplayOption(CompDisplay *display, char * name, CompOptionValue *value)
-{
-
-	FD_DISPLAY(display);
-	CompOption *o;
-	int index;
-	o = compFindOption(fd->opt,FD_DISPLAY_OPTION_NUM,name,&index);
-
-	if (!o)
-		return FALSE;
-	
-	switch (index)
-	{
-		case FD_DISPLAY_OPTION_INITIATE:
-			if (setDisplayAction(display,o,value))
-				return TRUE;	
-		default:
-			break;
-	}
-	return FALSE;
-}
-
 static CompOption *fadeDesktopGetScreenOptions(CompScreen * screen,
 											   int *count)
 {
@@ -488,7 +405,7 @@
 
 	switch (index)
 	{
-		case FD_SCREEN_OPTION_SPEED:
+		case FD_SCREEN_OPTION_FADETIME:
 		if (compSetIntOption(o,value))
 		{
 			return TRUE;
@@ -515,8 +432,8 @@
 	fadeDesktopFiniScreen,
 	fadeDesktopInitWindow,
 	fadeDesktopFiniWindow,
-	fadeDesktopGetDisplayOptions,
-	fadeDesktopSetDisplayOption,
+	NULL,
+	NULL,
 	fadeDesktopGetScreenOptions,
 	fadeDesktopSetScreenOption,
 	0,
Index: beryl-core/include/beryl.h
===================================================================
--- beryl-core/include/beryl.h	(Revision 4223)
+++ beryl-core/include/beryl.h	(Arbeitskopie)
@@ -26,7 +26,7 @@
 #ifndef _BERYL_H
 #define _BERYL_H
 
-#define BERYL_VERSION 54
+#define BERYL_VERSION 55
 
 #define BERYL_ABI_INFO \
     BERYL_VERSION, \
@@ -1643,6 +1643,9 @@
 
 typedef void (*OutputChangeNotifyProc) (CompScreen *s);
 
+typedef int (*EnterShowDesktopNotifyProc) (CompScreen *s);
+typedef Bool (*LeaveShowDesktopNotifyProc) (CompScreen *s, CompWindow *w);
+
 #define COMP_SCREEN_DAMAGE_PENDING_MASK (1 << 0)
 #define COMP_SCREEN_DAMAGE_REGION_MASK  (1 << 1)
 #define COMP_SCREEN_DAMAGE_ALL_MASK     (1 << 2)
@@ -1923,6 +1926,9 @@
     WindowGrabNotifyProc   windowGrabNotify;
     WindowUngrabNotifyProc windowUngrabNotify;
 
+	EnterShowDesktopNotifyProc	enterShowDesktopNotify;
+	LeaveShowDesktopNotifyProc	leaveShowDesktopNotify;
+
     WindowStateChangeNotifyProc windowStateChangeNotify;
 
     OutputChangeNotifyProc outputChangeNotify;
@@ -2131,6 +2137,12 @@
 leaveShowDesktopMode (CompScreen *s,
         CompWindow *window);
 
+int
+enterShowDesktopNotify (CompScreen *s);
+
+Bool 
+leaveShowDesktopNotify (CompScreen *s, CompWindow *w);
+
 void
 sendWindowActivationRequest (CompScreen *s,
         Window  id);
Index: beryl-core/src/screen.c
===================================================================
--- beryl-core/src/screen.c	(Revision 4223)
+++ beryl-core/src/screen.c	(Arbeitskopie)
@@ -1341,6 +1341,9 @@
 	s->windowGrabNotify = windowGrabNotify;
 	s->windowUngrabNotify = windowUngrabNotify;
 
+	s->enterShowDesktopNotify = enterShowDesktopNotify;
+	s->leaveShowDesktopNotify = leaveShowDesktopNotify;
+
 	s->windowStateChangeNotify = windowStateChangeNotify;
 
 	s->outputChangeNotify = outputChangeNotify;
@@ -3490,31 +3493,48 @@
 	}
 }
 
+int enterShowDesktopNotify(CompScreen *s)
+{
+    return -1;
+}
+
+Bool leaveShowDesktopNotify(CompScreen *s, CompWindow *w)
+{
+    return FALSE;
+}
+
 void enterShowDesktopMode(CompScreen * s)
 {
 	CompDisplay *d = s->display;
 	CompWindow *w;
 	unsigned long data = 1;
 	int count = 0;
-	CompOption *st = &d->opt[COMP_DISPLAY_OPTION_HIDE_SKIP_TASKBAR_WINDOWS];
 
 	s->showingDesktopMask = ~(CompWindowTypeDesktopMask |
 							  CompWindowTypeDockMask);
+	
+	count = (*s->enterShowDesktopNotify)(s);
 
-	for (w = s->windows; w; w = w->next)
+	if (count < 0)
 	{
+		count = 0;
+	    CompOption *st = &d->opt[COMP_DISPLAY_OPTION_HIDE_SKIP_TASKBAR_WINDOWS];
+
+	    for (w = s->windows; w; w = w->next)
+	    {
 		if ((s->showingDesktopMask & w->type) &&
 			(!(w->state & CompWindowStateSkipTaskbarMask) || st->value.b))
 		{
-			if ((*s->focusWindow) (w))
-			{
-				w->inShowDesktopMode = TRUE;
-				hideWindow(w);
-			}
+		    if ((*s->focusWindow) (w))
+		    {
+			w->inShowDesktopMode = TRUE;
+			hideWindow(w);
+		    }
 		}
 
 		if (w->inShowDesktopMode)
 			count++;
+	    }
 	}
 
 	if (!count)
@@ -3536,11 +3556,14 @@
 
 	if (window)
 	{
-		if (!window->inShowDesktopMode)
+		if (!(*s->leaveShowDesktopNotify)(s, window))
+		{
+		    if (!window->inShowDesktopMode)
 			return;
 
-		window->inShowDesktopMode = FALSE;
-		showWindow(window);
+		    window->inShowDesktopMode = FALSE;
+		    showWindow(window);
+		}
 
 		/* return if some other window is still in show desktop mode */
 		for (w = s->windows; w; w = w->next)
@@ -3553,13 +3576,16 @@
 	{
 		s->showingDesktopMask = 0;
 
-		for (w = s->windows; w; w = w->next)
+		if (!(*s->leaveShowDesktopNotify)(s, NULL))
 		{
+		    for (w = s->windows; w; w = w->next)
+		    {
 			if (!w->inShowDesktopMode)
 				continue;
 
 			w->inShowDesktopMode = FALSE;
 			showWindow(w);
+		    }   
 		}
 	}
 
Index: makeall
===================================================================
--- makeall	(Revision 4223)
+++ makeall	(Arbeitskopie)
@@ -3,12 +3,14 @@
 DEFCFLAGS="-O0 -ggdb3 -gstabs+ -Wall"
 MYCFLAGS=${CFLAGS:-$DEFCFLAGS}
 
-DEFPREFIX="/usr"
+DEFPREFIX="/usr/local"
 MYPREFIX=${PREFIX:-$DEFPREFIX}
 
+export PKG_CONFIG_PATH=$DEFPREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
+
 if svn up
 then
-    ITEMS="beryl-core beryl-plugins beryl-settings-bindings beryl-settings beryl-manager emerald emerald-themes aquamarine heliodor"
+    ITEMS="beryl-core beryl-plugins beryl-plugins-unsupported beryl-settings-bindings beryl-settings beryl-manager emerald emerald-themes aquamarine heliodor"
     for item in $ITEMS
     do
         cd $item