コード例 #1
0
ファイル: xset.c プロジェクト: RazZziel/pongclock
static void
init_mit_saver_extension (saver_info *si)
{
  int i;
  Pixmap *blank_pix = (Pixmap *) calloc (sizeof(Pixmap), si->nscreens);

  for (i = 0; i < si->nscreens; i++)
    {
      saver_screen_info *ssi = &si->screens[i];
      XID kill_id = 0;
      Atom kill_type = 0;
      Window root = RootWindowOfScreen (ssi->screen);
      blank_pix[i] = XCreatePixmap (si->dpy, root, 1, 1, 1);

      /* Kill off the old MIT-SCREEN-SAVER client if there is one.
	 This tends to generate X errors, though (possibly due to a bug
	 in the server extension itself?) so just ignore errors here. */
      if (XScreenSaverGetRegistered (si->dpy,
				     XScreenNumberOfScreen (ssi->screen),
				     &kill_id, &kill_type)
	  && kill_id != blank_pix[i])
	{
	  XErrorHandler old_handler =
	    XSetErrorHandler (ignore_all_errors_ehandler);
	  XKillClient (si->dpy, kill_id);
	  XSync (si->dpy, False);
	  XSetErrorHandler (old_handler);
	}
      XScreenSaverSelectInput (si->dpy, root, ScreenSaverNotifyMask);
      XScreenSaverRegister (si->dpy,
			    XScreenNumberOfScreen (ssi->screen),
			    (XID) blank_pix[i], XA_PIXMAP);
    }
  free(blank_pix);
}
コード例 #2
0
EAPI void
ecore_x_screensaver_event_listen_set(Eina_Bool on)
{
#ifdef ECORE_XSS
   Ecore_X_Window root;

   LOGFN(__FILE__, __LINE__, __FUNCTION__);
   root = DefaultRootWindow(_ecore_x_disp);
   if (on)
     XScreenSaverSelectInput(_ecore_x_disp, root, ScreenSaverNotifyMask);
   else
     XScreenSaverSelectInput(_ecore_x_disp, root, 0);
#else
   return;
   on = EINA_FALSE;
#endif /* ifdef ECORE_XSS */
}
コード例 #3
0
static void screenSaverSetXScreenSaver( CompDisplay *d, Bool enable )
{
	SCREENSAVER_DISPLAY(d);

	if( enable && !sd->XSScontext.init )
	{

		int dummy;
		if( !XScreenSaverQueryExtension(d->display, &sd->XSScontext.first_event, &dummy ) )
		{
			compLogMessage ("screensaver", CompLogLevelWarn,
					"XScreenSaver Extension not available");
			return;
		}
		sd->XSScontext.init = True;

		XGetScreenSaver( d->display, &sd->XSScontext.timeout, &sd->XSScontext.interval, \
			&sd->XSScontext.prefer_blanking, &sd->XSScontext.allow_exposures);
		XSetScreenSaver( d->display, (int)(screensaverGetAfter(d)*60.0), sd->XSScontext.interval, 0, AllowExposures);

		Window root = DefaultRootWindow (d->display);
		XSetWindowAttributes attr;
		int mask = 0;
		XScreenSaverSetAttributes( d->display,root, -100,-100,1,1,0 ,CopyFromParent,CopyFromParent,CopyFromParent,mask,&attr);
		XScreenSaverSelectInput( d->display, root, ScreenSaverNotifyMask );

	}
	if( !enable && sd->XSScontext.init )
	{
		sd->XSScontext.init = False;

		XSetScreenSaver( d->display, sd->XSScontext.timeout, sd->XSScontext.interval, \
			sd->XSScontext.prefer_blanking, sd->XSScontext.allow_exposures);

		Window root = DefaultRootWindow (d->display);
		XScreenSaverSelectInput( d->display, root, 0 );
		XScreenSaverUnsetAttributes( d->display, root );
	}
}
コード例 #4
0
ファイル: events.c プロジェクト: Limsik/e17
static void
ExtInitSS(int available)
{
   if (!available)
      return;

   if (EDebug(EDBUG_TYPE_VERBOSE))
     {
	XScreenSaverInfo   *xssi = XScreenSaverAllocInfo();

	XScreenSaverQueryInfo(disp, WinGetXwin(VROOT), xssi);
	Eprintf(" Screen saver window=%#lx\n", xssi->window);
	XFree(xssi);
     }
   XScreenSaverSelectInput(disp, WinGetXwin(VROOT),
			   ScreenSaverNotifyMask | ScreenSaverCycleMask);
}
コード例 #5
0
ファイル: xssstart.c プロジェクト: unixdj/xssstart
int
main(int argc, char *argv[])
{
	XEvent		 ev;
	struct sigaction act = { };
	int		 evbase, errbase;

	if (argc < 2)
		errx(2, "usage: xssstart command [argument ...]\n");
	if ((dpy = XOpenDisplay(NULL)) == NULL)
		errx(1, "no display");
	atexit(closedisplay);
	if (!XScreenSaverQueryExtension(dpy, &evbase, &errbase))
		errx(1, "X11 extension MIT-SCREEN-SAVER not supported");
	XSetErrorHandler(eh);
	XScreenSaverSelectInput(dpy, DefaultRootWindow(dpy),
	    ScreenSaverNotifyMask);
	act.sa_handler = sigchld;
	act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
	if (sigaction(SIGCHLD, &act, NULL) == -1)
		err(1, "sigaction");
	while (XNextEvent(dpy, &ev) == 0) {
		if (((XScreenSaverNotifyEvent *)&ev)->state == ScreenSaverOn &&
		    child == 0) {
			switch ((child = fork())) {
			case -1:
				err(1, "fork");
			case 0:
				execvp(argv[1], argv + 1);
				dpy = NULL;
				err(1, "exec");
			}
		}
	}
	return 0;
}
コード例 #6
0
ファイル: xidle.c プロジェクト: BackupTheBerlios/sax-svn
// ===================================
// main...
// -----------------------------------
int main (int argc,char *argv[]) {
	XSetWindowAttributes attr;
	Display* dpy;
	Window root;
	char mydisp  [256] = "";
	int  fg            = 0;
	int  screen;
	int  c;
	// ============================
	// get commandline options...
	// ----------------------------
	while (1) {
	int option_index = 0;
	static struct option long_options[] =
	{
		{"display"    , 1 , 0 , 'd'},
		{"pid"        , 1 , 0 , 'p'},
		{"help"       , 0 , 0 , 'h'},
		{"timeout"    , 1 , 0 , 't'},
		{"foreground" , 0 , 0 , 'f'},
		{"output"     , 0 , 0 , 'o'},
		{0            , 0 , 0 , 0  }
	};
	c = getopt_long (
		argc, argv, "hd:p:t:fo",long_options, &option_index
	);
	if (c == -1)
	break;

	switch (c) {
	case 'h':
		usage();
		exit(0);

	case 't':
		timeout = atoi(optarg);
	break;

	case 'd':
		strcpy(mydisp,optarg);
	break;

	case 'p':
		pid = atoi(optarg);
	break;

	case 'o':
		output = 1;
	break;

	case 'f':
		fg = 1;
	break;

	default:
		usage();
		exit(1);
	}
	}

	// prove pid...
	// --------------
	if (pid == 0) {
		printf("xidle: no valid pid defined\n");
		exit(1);
	}

	// open display...
	// ------------------
	if (strcmp(mydisp,"") == 0) {
		dpy = XOpen("null");
	} else {
		dpy = XOpen(mydisp);
	}
	if (dpy == NULL) {
		printf("xidle: unable to open display: %s\n",mydisp); 
		exit(1);
	}

	// go for daemon...
	// -----------------
	if (fg == 0) {
		daemon(1,0);
	}

	// install signal handler...
	// --------------------------
	signal( SIGHUP  , handlesighup   );
	signal( SIGCHLD , handlesigchld  );
	signal( SIGTRAP , timerstatus    );
	signal( SIGCONT , handlesigreset );

	// default window is the root window...
	// -------------------------------------
	root   = DefaultRootWindow(dpy);
	screen = DefaultScreen(dpy);

	// look if the MIT extension is available...
	// -------------------------------------------
	if (!XScreenSaverQueryExtension (dpy, &ss_event, &ss_error)) {
		exit(1);
	}
	XScreenSaverSelectInput (dpy, root, ScreenSaverNotifyMask);
	XSync (dpy, False);

	// select keyboard for press and release...
	// ------------------------------------------
	attr.event_mask = KeyPressMask | PointerMotionMask;
	XSelectInput(dpy, DefaultRootWindow(dpy), attr.event_mask);

	// set internal screen saver timeout...
	// --------------------------------------- 
	timersignal();
	setsaver(dpy,timeout);

	while(1) {
		XEvent event; 
		XScreenSaverNotifyEvent *sevent;
		XNextEvent (dpy, &event);
		// ==========================================
		// reset timer for pointer motion events...
		// ------------------------------------------
		if (event.type == MotionNotify) {
			triggerreset();
		}
		// =====================================================
		// reset timer for keyevents differently from Escape...
		// -----------------------------------------------------
		else if (event.type == KeyPress) {
			XKeyEvent *e = (XKeyEvent*)&event;
			if (e->keycode == ESC) {
				Exit();
			} else {
				triggerreset();
			}
		}
		// ==========================================
		// catch screen saver event...
		// ------------------------------------------
		else if (event.type == ss_event) {
			sevent = (XScreenSaverNotifyEvent *) &event;
			if (sevent->state == ScreenSaverOn) {
			// get screen saver event...
			// --------------------------
			Exit();
			}
		}
		// ==============================================
		// put back event to the queue if not handled...
		// ----------------------------------------------
		else {
			XPutBackEvent(dpy,&event);
		}
	}
	XCloseDisplay(dpy);
	return(0);
}