clears the mouse
to its default state.
.TP
+.B blank
+Blank the screen.
+The screen also blanks after 30 minutes of inactivity.
+The screen can be unblanked by moving the mouse.
+.TP
+.BI blanktime " minutes"
+Set the timeout before the
+screen blanks; the default is 30 minutes.
+If
+.I minutes
+is zero, blanking is disabled.
+.TP
.B twitch
unblanks the screen and resets the idle timeout as if the
mouse was twitched.
or
.BR 8 .
.TP
-.B blank
-Blank the screen.
-This consists of setting the hardware
-color map to all black as well as, on some controllers, setting the
-VGA hsync and vsync signals so as to turn off
-VESA DPMS-compliant monitors.
-The screen also blanks after 30 minutes of inactivity.
-The screen can be unblanked by moving the mouse.
-.TP
-.BI blanktime " minutes"
-Set the timeout before the
-screen blanks; the default is 30 minutes.
-If
-.I minutes
-is zero, blanking is disabled.
-.TP
.BI hwaccel " mode"
Depending on whether
.I mode
.BR off ,
enable or disable the use of DPMS blanking
(see
-.B blank
-above).
+.IR mouse (3)).
.TP
.BI linear " size align"
Use a linear screen aperture of size
gscreen->width = Wid * (Depth / BI2BY) / BY2WD;
flushmemscreen(gscreen->r);
- blanktime = 3; /* minutes */
-
if (first) {
iprint("on: blue for 3 seconds...");
delay(3*1000);
extern void deletescreenimage(void);
extern void resetscreenimage(void);
extern int drawhasclients(void);
-extern ulong blanktime;
extern void setscreenimageclipr(Rectangle);
extern void drawflush(void);
-extern int drawidletime(void);
extern QLock drawlock;
#define ishwimage(i) 0 /* for ../port/devdraw.c */
enum {
CMactualsize,
- CMblank,
- CMblanktime,
CMdrawinit,
CMhwaccel,
CMhwblank,
CMsize,
CMtextmode,
CMtype,
- CMunblank,
CMsoftscreen,
CMpcidev,
};
static Cmdtab vgactlmsg[] = {
CMactualsize, "actualsize", 2,
- CMblank, "blank", 1,
- CMblanktime, "blanktime", 2,
CMdrawinit, "drawinit", 1,
CMhwaccel, "hwaccel", 2,
CMhwblank, "hwblank", 2,
CMsize, "size", 3,
CMtextmode, "textmode", 1,
CMtype, "type", 2,
- CMunblank, "unblank", 1,
CMsoftscreen, "softscreen", 2,
CMpcidev, "pcidev", 2,
};
physgscreenr.max.x, physgscreenr.max.y);
}
- len += snprint(p+len, READSTR-len, "blank time %lud idle %d state %s\n",
- blanktime, drawidletime(), scr->isblank ? "off" : "on");
len += snprint(p+len, READSTR-len, "hwaccel %s\n", hwaccel ? "on" : "off");
len += snprint(p+len, READSTR-len, "hwblank %s\n", hwblank ? "on" : "off");
len += snprint(p+len, READSTR-len, "panning %s\n", panning ? "on" : "off");
error("not enough free address space");
return;
- case CMblank:
- drawblankscreen(1);
- return;
-
- case CMunblank:
- drawblankscreen(0);
- return;
-
- case CMblanktime:
- blanktime = strtoul(cb->f[1], 0, 0);
- return;
-
case CMpanning:
if(strcmp(cb->f[1], "on") == 0){
if(scr == nil || scr->cur == nil)
int (*scroll)(VGAscr*, Rectangle, Rectangle);
void (*blank)(VGAscr*, int);
ulong id; /* internal identifier for driver use */
- int isblank;
int overlayinit;
int softscreen;
};
};
/* mouse.c */
-extern void mousectl(Cmdbuf*);
-extern void mouseresize(void);
-extern void mouseredraw(void);
+extern void mousectl(Cmdbuf*);
+extern void mouseresize(void);
+extern void mouseredraw(void);
/* screen.c */
extern int hwaccel; /* use hw acceleration */
extern void deletescreenimage(void);
extern void resetscreenimage(void);
extern int drawhasclients(void);
-extern ulong blanktime;
extern void setscreenimageclipr(Rectangle);
extern void drawflush(void);
-extern int drawidletime(void);
extern QLock drawlock;
/* vga.c */
extern void vgalinearpci(VGAscr*);
extern void vgalinearaddr(VGAscr*, ulong, int);
-extern void drawblankscreen(int);
extern void vgablank(VGAscr*, int);
extern Lock vgascreenlock;
typedef struct Refx Refx;
typedef struct DName DName;
-ulong blanktime = 30; /* in minutes; a half hour */
-
struct Draw
{
int clientid;
DName* name;
int vers;
int softscreen;
- int blanked; /* screen turned off */
- ulong blanktime; /* time of last operation */
};
struct Client
}
}
}
-
-void
-drawblankscreen(int blank)
-{
- if(blank == sdraw.blanked)
- return;
- if(up != nil && islo() && candlock()){
- blankscreen(blank);
- sdraw.blanked = blank;
- dunlock();
- }
-}
-
-/*
- * record activity on screen, changing blanking as appropriate
- */
-void
-drawactive(int active)
-{
- if(active){
- drawblankscreen(0);
- sdraw.blanktime = MACHP(0)->ticks;
- }else{
- if(blanktime && sdraw.blanktime && TK2SEC(MACHP(0)->ticks - sdraw.blanktime)/60 >= blanktime)
- drawblankscreen(1);
- }
-}
-
-int
-drawidletime(void)
-{
- return TK2SEC(MACHP(0)->ticks - sdraw.blanktime)/60;
-}
CMbuttonmap,
CMscrollswap,
CMswap,
+ CMblank,
+ CMblanktime,
CMtwitch,
CMwildcard,
};
CMbuttonmap, "buttonmap", 0,
CMscrollswap, "scrollswap", 0,
CMswap, "swap", 1,
- CMtwitch, "twitch", 0,
+ CMblank, "blank", 1,
+ CMblanktime, "blanktime", 2,
+ CMtwitch, "twitch", 1,
CMwildcard, "*", 0,
};
Cursor curs;
void Cursortocursor(Cursor*);
+void mouseblankscreen(int);
int mousechanged(void*);
void mouseredraw(void);
static int mouseswap;
static int scrollswap;
static ulong mousetime;
+static ulong blanktime = 30; /* in minutes; a half hour */
extern Memimage* gscreen;
error(Einuse);
mouse.lastcounter = mouse.counter;
mouse.resize = 0;
+ mousetime = seconds();
/* wet floor */
case Qcursor:
incref(&mouse);
return;
case Qmouse:
mouse.open = 0;
+ mouseblankscreen(0);
/* wet floor */
case Qcursor:
if(decref(&mouse) != 0)
return n;
case Qmouse:
- while(mousechanged(0) == 0)
- sleep(&mouse.r, mousechanged, 0);
+ while(!mousechanged(nil)){
+ tsleep(&mouse.r, mousechanged, nil, 30*1000);
+ if(blanktime && !mousechanged(nil) &&
+ (seconds() - mousetime) >= blanktime*60)
+ mouseblankscreen(1);
+ }
mousetime = seconds();
+ mouseblankscreen(0);
ilock(&mouse);
if(mouse.ri != mouse.wi)
setbuttonmap(cb->f[1]);
break;
+ case CMblank:
+ mouseblankscreen(1);
+ break;
+
+ case CMblanktime:
+ blanktime = strtoul(cb->f[1], 0, 0);
+ /* wet floor */
case CMtwitch:
- drawactive(1);
+ mousetime = seconds();
+ mouseblankscreen(0);
break;
case CMwildcard:
qunlock(&drawlock);
}
+void
+mouseblankscreen(int blank)
+{
+ static int blanked;
+
+ if(blank == blanked)
+ return;
+ qlock(&drawlock);
+ if(blanked != blank){
+ blankscreen(blank);
+ blanked = blank;
+ }
+ qunlock(&drawlock);
+}
static int
shouldredraw(void*)
static void
mouseproc(void*)
{
- ulong counter;
-
- counter = ~0;
while(waserror())
;
for(;;){
- if(mouse.redraw){
- mouse.redraw = 0;
- cursoroff();
- cursoron();
- }
-
- drawactive(mouse.counter != counter);
- counter = mouse.counter;
-
- tsleep(&mouse.redrawr, shouldredraw, 0, 20*1000);
+ sleep(&mouse.redrawr, shouldredraw, nil);
+ mouse.redraw = 0;
+ cursoroff();
+ cursoron();
}
}