Exemple #1
0
/* main {{{ */
int
main(int argc,
     char *argv[])
{
    int c;
    char *display = NULL;
    struct sigaction sa;
    const struct option long_options[] =
    {
        { "config",   required_argument, 0, 'c' },
        { "display",  required_argument, 0, 'd' },
        { "help",     no_argument,       0, 'h' },
        { "check",    no_argument,       0, 'k' },
        { "no-randr", no_argument,       0, 'n' },
        { "replace",  no_argument,       0, 'r' },
        { "sublets",  required_argument, 0, 's' },
        { "version",  no_argument,       0, 'v' },
#ifdef DEBUG
        { "level",    required_argument, 0, 'l' },
        { "debug",    no_argument,       0, 'D' },
#endif /* DEBUG */
        { 0, 0, 0, 0}
    };

    /* Create subtle */
    subtle = (SubSubtle *)(subSharedMemoryAlloc(1, sizeof(SubSubtle)));
    subtle->flags |= (SUB_SUBTLE_XRANDR|SUB_SUBTLE_XINERAMA);

    /* Parse arguments */
    while(-1 != (c = getopt_long(argc, argv, "c:d:hknrs:vl:D", long_options, NULL)))
    {
        switch(c)
        {
        case 'c':
            subtle->paths.config = optarg;
            break;
        case 'd':
            display = optarg;
            break;
        case 'h':
            SubtleUsage();
            return 0;
        case 'k':
            subtle->flags |= SUB_SUBTLE_CHECK;
            break;
        case 'n':
            subtle->flags &= ~SUB_SUBTLE_XRANDR;
            break;
        case 'r':
            subtle->flags |= SUB_SUBTLE_REPLACE;
            break;
        case 's':
            subtle->paths.sublets = optarg;
            break;
        case 'v':
            SubtleVersion();
            return 0;
#ifdef DEBUG
        case 'l':
            subSharedLogLevel(SubtleLevel(optarg));
            break;
        case 'D':
            subtle->flags |= SUB_SUBTLE_DEBUG;
            subSharedLogLevel(DEFAULT_LOGLEVEL|DEBUG_LOGLEVEL);
            break;
#else /* DEBUG */
        case 'l':
        case 'D':
            printf("Please recompile %s with `debug=yes'\n", PKG_NAME);
            return 0;
#endif /* DEBUG */
        case '?':
            printf("Try `%s --help' for more information\n", PKG_NAME);
            return -1;
        }
    }

    /* Signal handler */
    sa.sa_handler = SubtleSignal;
    sa.sa_flags   = 0;
    memset(&sa.sa_mask, 0, sizeof(sigset_t)); ///< Avoid uninitialized values
    sigemptyset(&sa.sa_mask);

    sigaction(SIGHUP,  &sa, NULL);
    sigaction(SIGINT,  &sa, NULL);
    sigaction(SIGSEGV, &sa, NULL);
    sigaction(SIGCHLD, &sa, NULL);

    /* Load and check config only */
    if(subtle->flags & SUB_SUBTLE_CHECK)
    {
        int ret = 0;

        subRubyInit();

        if((ret = subRubyLoadConfig()))
            printf("Syntax OK\n");

        subRubyFinish();

        free(subtle);

        return !ret;
    }

    /* Alloc arrays */
    subtle->clients   = subArrayNew();
    subtle->grabs     = subArrayNew();
    subtle->gravities = subArrayNew();
    subtle->hooks     = subArrayNew();
    subtle->screens   = subArrayNew();
    subtle->sublets   = subArrayNew();
    subtle->tags      = subArrayNew();
    subtle->trays     = subArrayNew();
    subtle->views     = subArrayNew();

    /* Init */
    SubtleVersion();
    subDisplayInit(display);
    subEwmhInit();
    subScreenInit();
    subRubyInit();
    subGrabInit();

    /* Load */
    subRubyLoadConfig();
    subRubyLoadSublets();
    subRubyLoadPanels();

    /* Display */
    subDisplayConfigure();
    subDisplayScan();

    subEventLoop();

    /* Restart if necessary */
    if(subtle->flags & SUB_SUBTLE_RESTART)
    {
        subSubtleFinish();

        printf("Restarting\n");

        execvp(argv[0], argv);
    }
    else subSubtleFinish();

    printf("Exit\n");

    return 0;
} /* }}} */
Exemple #2
0
/*
OK w95
 */
void mainEventLoop() {

   short     sVal, sXCurrent, sYCurrent;
   long      lDevice;
	int		i=0;
	int 	state = FALSE;
    short attached = 1;
    short value;
    int dev;
    int pupval;

  // make_all();
	//init_menu();

   nCurrentDir = DIR_NONE;

   czclear(0x404040, getgdesc(GD_ZMAX));

   while (TRUE) {

      if (qtest()) {
         lDevice = qread(&sVal);

         switch (lDevice) {

			case INPUTCHANGE:
				#ifdef DOFF
					printf(" %d, %d, %d\n", Win_ids[0], Win_ids[1], sVal);
				#endif
				if ( sVal != 0 )
					Input_win = sVal;
				else
					Input_win = -1;
				break;

            case REDRAW:
				if ( sVal == Win_ids[1] && Win_ids[1] != -1 )
					vDrawHelpScene();
				else if ( sVal == Win_ids[0] )
				{
               		reshapeviewport();
               		getsize(&nWinWidth, &nWinHeight);
               		getorigin(&nXWinOrigin, &nYWinOrigin);
				}
               break;

            case RIGHTMOUSE:
               pupval = dopup(mainmenu);
               break;
  
			case SPACEKEY:
				state = TRUE;
				i++;
				if ( i == 4 )
					subEventLoop();
				break;

			case RKEY:
				if ( Last_Actions[FIRE] == TRUE )
					vEventLoop(&vDrawTitle);
				break;

         case QKEY:
				if ( Input_win == Win_ids[1] ) 
				{
					winclose(Input_win);
					Win_ids[1] != -1;
				}
				else if ( Input_win == Win_ids[0] )
				{
					winclose(Win_ids[0]);
					if ( Win_ids[1] != -1 )
						winclose(Win_ids[1]);
	               exit(0);
				}
               break;

            default:
               break;
         }
      }
		getdev(DR_NUM_BUT, Devs, Last_Actions);

	  	vDrawTitle(state);
   }
}