rendered paste bodyIndex: 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