Пример #1
0
void * s_window_loop_event (void *arg)
{
	s_event_t *event;
	s_window_t *window;

	window = (s_window_t *) arg;

	while (window->running > 0) {
		if (s_eventq_wait(window, &event) != 0) {
			continue;
		}
        	if (window->atevent != NULL) {
			window->atevent(window, event);
		}
		switch (event->type & EVENT_TYPE_MASK) {
//			case EVENT_TYPE_QUIT:   window->running = 0;                      break;
			case EVENT_TYPE_QUIT:
				 s_socket_request(window, SOC_DATA_CLOSE);
				 s_event_uninit(event);
				 return NULL;
				 break;
			case EVENT_TYPE_MOUSE:    s_event_parse_mouse(window, event);  break;
			case EVENT_TYPE_KEYBOARD: s_event_parse_keybd(window, event);  break;
			case EVENT_TYPE_EXPOSE:   s_event_parse_expos(window, event);  break;
			case EVENT_TYPE_CONFIG:   s_event_parse_config(window, event); break;
			case EVENT_TYPE_TIMER:    s_event_parse_timer(window, event);  break;
			case EVENT_TYPE_FOCUS:                                         break;
			case EVENT_TYPE_MAP:                                           break;
			case EVENT_TYPE_DESKTOP:				       break;
		}
		s_event_uninit(event);
	}

	return NULL;
}
Пример #2
0
static void lxynth_shutdown_driver (void)
{
	DEBUGF ("%s (%s:%d)\n", __FUNCTION__, __FILE__, __LINE__);

        if (lxynth_root->running) {
		lxynth_root->running = 0;
		s_window_quit(lxynth_root->window);
		s_thread_join(lxynth_root->tid, NULL);
		kill_timer(lxynth_root->timerid);
	}

	while (!s_list_eol(lxynth_root->eventq->list, 0)) {
		s_event_t *event = s_list_get(lxynth_root->eventq->list, 0);
		s_list_remove(lxynth_root->eventq->list, 0);
		s_event_uninit(event);
	}
	s_free(lxynth_root->eventq->list);
	s_thread_mutex_destroy(lxynth_root->eventq->mut);
	s_free(lxynth_root->eventq);

	while (!s_list_eol(lxynth_root->gd->list, 0)) {
		struct graphics_device *gd = s_list_get(lxynth_root->gd->list, 0);
		lxynth_device_t *wd = (lxynth_device_t *) gd->driver_data;
		s_list_remove(lxynth_root->gd->list, 0);
		s_free(wd->title);
		s_surface_destroy(wd->surface);
		s_free(wd);
		s_free(gd);
	}
	s_free(lxynth_root->gd->list);
	s_thread_mutex_destroy(lxynth_root->gd->mut);
	s_free(lxynth_root->gd);

	s_free(lxynth_root);
}
Пример #3
0
static void lxynth_timer (void *arg)
{
        int x = 0;
        int y = 0;
        int k = 0;
        int flag = 0;
        s_event_t *event;

	s_thread_mutex_lock(lxynth_root->eventq->mut);
        while (!s_list_eol(lxynth_root->eventq->list, 0)) {
		event = (s_event_t *) s_list_get(lxynth_root->eventq->list, 0);
		s_list_remove(lxynth_root->eventq->list, 0);
                switch (event->type & EVENT_MASK) {
			case QUIT_EVENT:	break;
			case MOUSE_EVENT:	lxynth_event_parse_mouse(event);	break;
			case KEYBD_EVENT:	lxynth_event_parse_keybd(event);	break;
			case CONFIG_EVENT:	lxynth_event_parse_config(event);	break;
		}
		s_event_uninit(event);
	}
	s_thread_mutex_unlock(lxynth_root->eventq->mut);

        if (lxynth_root->running) {
		lxynth_root->timerid = install_timer(20, lxynth_timer, NULL);
	}
}
Пример #4
0
void * s_window_loop_event (void *arg)
{
    s_event_t *event;
    s_window_t *window;

    window = (s_window_t *) arg;

    while (window->running > 0) {
        if (s_eventq_wait(window, &event) != 0) {
            continue;
        }

        if (window->atevent != NULL) {
            window->atevent(window, event);
        }

        switch (event->type & EVENT_MASK) {
        case QUIT_EVENT:
            s_socket_request(window, SOC_DATA_CLOSE);
            s_event_uninit(event);
            return NULL;
            break;
        case MOUSE_EVENT:
            s_event_parse_mouse(window, event);
            break;
        case KEYBD_EVENT:
            s_event_parse_keybd(window, event);
            break;
        case EXPOSE_EVENT:
            s_event_parse_expos(window, event);
            break;
        case CONFIG_EVENT:
            s_event_parse_config(window, event);
            break;
        case TIMER_EVENT:
            s_event_parse_timer(window, event);
            break;
        case FOCUS_EVENT:
            break;
        case DESKTOP_EVENT:
            break;
        }
        s_event_uninit(event);
    }

    return NULL;
}
Пример #5
0
static void handler_set_char (s_window_t *window, osk_char_t *chr)
{
    s_event_t *evt;
    s_event_init(&evt);
    evt->type = KEYBD_EVENT | KEYBD_PRESSED;
    evt->keybd->ascii = chr->ascii;
    evt->keybd->button = chr->button;
    evt->keybd->keycode = chr->button;
    evt->keybd->scancode = chr->scancode;
    s_socket_request(window, SOC_DATA_EVENT, evt);
    evt->type = KEYBD_EVENT | KEYBD_RELEASED;
    s_socket_request(window, SOC_DATA_EVENT, evt);
    s_event_uninit(evt);
}
Пример #6
0
void s_window_uninit (s_window_t *window)
{
	if (window == NULL) {
		return;
	}

        window->event->type = EVENT_TYPE_QUIT;
        s_event_changed(window);
	s_thread_join(window->eventq->tid, NULL);

	s_childs_uninit(window);
        if (window->type & (WINDOW_TYPE_TEMP | WINDOW_TYPE_CHILD)) {
		if (s_child_del(window->parent, window) == 0) {
			s_thread_detach(window->tid);
		}
	} else if (window->type & WINDOW_TYPE_POPUP) {
		s_thread_detach(window->tid);
	}

	debugf(DCLI, "[%d] Exiting (%s%s)", window->id, (window->type & WINDOW_TYPE_MAIN) ? "WINDOW_TYPE_MAIN" :
	                                                 ((window->type & WINDOW_TYPE_CHILD) ? "WINDOW_TYPE_CHILD" :
	                                                 ((window->type & WINDOW_TYPE_TEMP) ? "WINDOW_TYPE_TEMP" :
	                                                 ((window->type & WINDOW_TYPE_POPUP) ? "WINDOW_TYPE_POPUP" :
	                                                 ((window->type & WINDOW_TYPE_DESKTOP) ? "WINDOW_TYPE_DESKTOP" : "WINDOW_UNKNOWN")))),
	                                                (window->type & WINDOW_TYPE_NOFORM) ? " | WINDOW_TYPE_NOFORM" : "");

	/* andrei
	 * call atexit only after we have released all children
	 * the idea is to let the children access their parent's data attribute
	 */
	if (window->atexit != NULL) {
		window->atexit(window);
	}

	s_timers_uninit(window);
	s_pollfds_uninit(window);
	s_handlers_uninit(window);
	s_eventq_uninit(window);
	s_surface_uninit(window);
	s_event_uninit(window->event);
	s_free(window->title);

	s_free(window);
	window = NULL;
}
Пример #7
0
int s_eventq_uninit (s_window_t *window)
{
        s_event_t *e;

	s_thread_mutex_destroy(window->eventq->mut);
	s_thread_cond_destroy(window->eventq->cond);

	while (!s_list_eol(window->eventq->queue, 0)) {
		e = (s_event_t *) s_list_get(window->eventq->queue, 0);
		s_list_remove(window->eventq->queue, 0);
		s_event_uninit(e);
	}
	s_free(window->eventq->queue);

        s_free(window->eventq);

	return 0;
}
Пример #8
0
int s_window_init (s_window_t **window)
{
	s_window_t *w;

	w = (s_window_t *) s_calloc(1, sizeof(s_window_t));
	if (s_pollfds_init(w))       { goto err1; }
	if (s_timers_init(w))        { goto err2; }
	if (s_socket_init(w))        { goto err3; }
        if (s_handlers_init(w))      { goto err4; }
	if (s_childs_init(w))        { goto err5; }
	if (s_eventq_init(w))        { goto err6; }
	if (s_event_init(&w->event)) { goto err7; }

	w->running = 1;
	w->id = -1;
	w->pri = -1;
	w->mapped = -1;
	w->viewable = -1;
	w->resizeable = 1;
	w->alwaysontop = 0;
	w->cursor = CURSOR_TYPE_ARROW;
	w->mouse_entered = 0;
	*window = w;

	if (s_surface_init(w))                     { goto err8; }
	if (s_socket_request(w, SOC_DATA_DISPLAY)) { goto err9; }
	if (s_surface_attach(w))                   { goto err10; }

	return 0;
err10:
err9:	s_surface_uninit(w);
err8:	s_event_uninit(w->event);
err7:	s_eventq_uninit(w);
err6:	s_childs_uninit(w);
err5:	s_handlers_uninit(w);
err4:
err3:	s_timers_uninit(w);
err2:	s_pollfds_uninit(w);
err1:	s_free(w);
	debugf(DCLI | DFAT, "Cannot connect to server");
	return -1;
}
Пример #9
0
void s_window_uninit (s_window_t *window)
{
    if (window == NULL) {
        return;
    }

    window->event->type = QUIT_EVENT;
    s_event_changed(window);
    s_thread_join(window->eventq->tid, NULL);

    s_timers_uninit(window);
    s_pollfds_uninit(window);
    s_handlers_uninit(window);

    if (window->atexit != NULL) {
        window->atexit(window);
    }

    s_childs_uninit(window);

    if (window->type & (WINDOW_TEMP | WINDOW_CHILD)) {
        if (s_child_del(window->parent, window) == 0) {
            s_free(window->tid);
        }
    }

    debugf(DCLI, "[%d] Exiting (%s%s)", window->id, (window->type & WINDOW_MAIN) ? "WINDOW_MAIN" :
           ((window->type & WINDOW_CHILD) ? "WINDOW_CHILD" :
            ((window->type & WINDOW_TEMP) ? "WINDOW_TEMP" :
             ((window->type & WINDOW_DESKTOP) ? "WINDOW_DESKTOP" : "WINDOW_UNKNOWN"))),
           (window->type & WINDOW_NOFORM) ? " | WINDOW_NOFORM" : "");

    s_eventq_uninit(window);

    s_surface_uninit(window);
    s_event_uninit(window->event);
    s_gettext_uninit(window);

    s_free(window->title);
    s_free(window);
    window = NULL;
}
Пример #10
0
void w_signal_delete (w_object_t *object)
{
	int pos = 0;
	s_event_t *event;
	w_signal_t *signal;
        s_thread_mutex_lock(object->window->window->eventq->mut);
	while (!s_list_eol(object->window->window->eventq->queue, pos)) {
		event = (s_event_t *) s_list_get(object->window->window->eventq->queue, pos);
		signal = (w_signal_t *) event->data;
		if ((event->type == SIGNAL_EVENT) &&
		    ((signal->from == object) || (signal->to == object))) {
			s_list_remove(object->window->window->eventq->queue, pos);
			s_free(signal);
			s_event_uninit(event);
		} else {
			pos++;
		}
	}
	s_thread_mutex_unlock(object->window->window->eventq->mut);
}
Пример #11
0
int s_window_init (s_window_t **window)
{
    s_window_t *w;

    w = (s_window_t *) s_calloc(1, sizeof(s_window_t));
    if (s_surface_init(w))       {
        goto err1;
    }
    if (s_pollfds_init(w))       {
        goto err2;
    }
    if (s_timers_init(w))        {
        goto err3;
    }
    if (s_socket_init(w))        {
        goto err4;
    }
    if (s_handlers_init(w))      {
        goto err4;
    }
    if (s_childs_init(w))        {
        goto err5;
    }
    if (s_eventq_init(w))        {
        goto err6;
    }
    if (s_event_init(&w->event)) {
        goto err7;
    }
    if (s_gettext_init(w))       {
        goto err8;
    }

    w->running = 1;
    w->id = -1;
    w->pri = -1;
    w->resizeable = 1;

    /* -1 means no limits on width or height. */
    w->min_w = w->min_h = w->max_w = w->max_h = -1;

    w->alwaysontop = 0;
    w->cursor = MOUSE_CURSOR_ARROW;
    w->mouse_entered = 0;
    *window = w;

    if (s_socket_request(w, SOC_DATA_DISPLAY)) {
        goto err9;
    }

    return 0;
err9:
    s_gettext_uninit(w);
err8:
    s_event_uninit(w->event);
err7:
    s_eventq_uninit(w);
err6:
    s_childs_uninit(w);
err5:
    s_handlers_uninit(w);
err4:
    s_timers_uninit(w);
err3:
    s_pollfds_uninit(w);
err2:
    s_free(w->surface);
err1:
    s_free(w);
    debugf(DCLI | DFAT, "Cannot connect to server");
    return -1;
}