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); }
int s_window_new (s_window_t *window, s_window_type_t type, s_window_t *parent) { if (!(type & (WINDOW_TYPE_MAIN | WINDOW_TYPE_CHILD | WINDOW_TYPE_TEMP | WINDOW_TYPE_POPUP))) { goto err; } window->type = type; if (window->surface->width <= 0) { window->surface->width = window->surface->linear_buf_width; } if (window->surface->height <= 0) { window->surface->height = window->surface->linear_buf_height; } if (window->type & (WINDOW_TYPE_TEMP | WINDOW_TYPE_CHILD)) { window->parent = parent; } else { window->parent = NULL; } s_socket_request(window, SOC_DATA_NEW); window->surface->vbuf = (unsigned char *) s_calloc(sizeof(char), window->surface->width * window->surface->height * window->surface->bytesperpixel); return 0; err: return 1; }
int s_window_new (s_window_t *window, S_WINDOW type, s_window_t *parent) { if (!(type & (WINDOW_MAIN | WINDOW_CHILD | WINDOW_TEMP))) { goto err; } window->type = type; if (window->surface->width <= 0) { window->surface->width = window->surface->linear_buf_width; } if (window->surface->height <= 0) { window->surface->height = window->surface->linear_buf_height; } if (window->type & (WINDOW_TEMP | WINDOW_CHILD)) { window->parent = parent; } else { window->parent = NULL; } s_socket_request(window, SOC_DATA_NEW); // window->surface->need_expose = SURFACE_NEEDSTREAM; s_surface_attach(window); s_fillbox(window->surface, 0, 0, window->surface->width, window->surface->height, s_rgbcolor(window->surface, 0xD4, 0xD0, 0xC8)); return 0; err: return 1; }
void s_window_form_draw (s_window_t *window) { if (window->type & WINDOW_TYPE_NOFORM) { return; } s_socket_request(window, SOC_DATA_FORMDRAW); }
void taskbar_progs_handler_r (s_window_t *window, s_event_t *event, s_handler_t *handler) { int w; int px; int py; int pos; tbar_data_t *tbar_data; tbar_progs_t *tbar_progs; s_desktop_client_t *desktopc; tbar_data = (tbar_data_t *) window->data; tbar_progs = (tbar_progs_t *) tbar_data->tbar_progs; px = event->mouse->x - tbar_progs->rect.x; py = event->mouse->y - tbar_progs->rect.y; if (tbar_progs->desktop->clients->nb_elt <= 0) { return; } w = ((tbar_progs->rect.w / tbar_progs->desktop->clients->nb_elt) > 125) ? 125 : (tbar_progs->rect.w / tbar_progs->desktop->clients->nb_elt); if ((px > 0) && (px < w * tbar_progs->desktop->clients->nb_elt)) { pos = px / w; } else { return; } desktopc = (s_desktop_client_t *) s_list_get(tbar_progs->desktop->clients, pos); if (desktopc != NULL) { s_socket_request(window, SOC_DATA_SHOW, desktopc->id, NULL, 0); } }
void s_window_set_title (s_window_t *window, const char *fmt, ...) { int n; va_list ap; int size = 1; if (window->title != NULL) { s_free(window->title); } window->title = (char *) s_malloc(sizeof(char) * size); while (1) { va_start(ap, fmt); n = vsnprintf(window->title, size, fmt, ap); va_end(ap); if ((n > -1) && (n < size)) { break; } if (n > -1) { size = n + 1; } else { size *= 2; } window->title = (char *) s_realloc(window->title, size); } s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_TYPE_NOFORM); }
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; }
void s_window_set_cursor (s_window_t *window, S_MOUSE_CURSOR cursor) { if ((cursor >= 0) && (cursor < MOUSE_CURSOR_MAX)) { window->cursor = cursor; s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_NOFORM); } }
void s_window_set_max_size(s_window_t* window, int w, int h) { /* TODO: Check. */ window->max_w = w; window->max_h = h; s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_NOFORM); }
void s_window_set_cursor (s_window_t *window, s_cursor_type_t cursor) { if ((cursor >= 0) && (cursor < CURSOR_TYPE_MAX)) { window->cursor = cursor; s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_TYPE_NOFORM); } }
void s_window_set_coor (s_window_t *window, int form, int x, int y, int w, int h) { window->surface->buf->x = x; window->surface->buf->y = y; window->surface->buf->w = w; window->surface->buf->h = h; s_socket_request(window, SOC_DATA_CONFIGURE, form); }
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; }
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; }
void s_window_set_alwaysontop (s_window_t *window, int alwaysontop) { window->alwaysontop = alwaysontop; s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_TYPE_NOFORM); }
void s_window_set_resizeable (s_window_t *window, int resizeable) { window->resizeable = resizeable; s_socket_request(window, SOC_DATA_CONFIGURE, WINDOW_TYPE_NOFORM); }
void s_window_set_coor (s_window_t *window, int form, int x, int y, int w, int h) { s_surface_set_coor(window, x, y, w, h); s_socket_request(window, SOC_DATA_CONFIGURE, form); }
void s_window_show (s_window_t *window) { s_socket_request(window, SOC_DATA_SHOW, window->id, NULL, 0); window->surface->mode |= SURFACE_REAL; }
void s_window_hide (s_window_t *window) { s_socket_request(window, SOC_DATA_SHOW, window->id, NULL, -1); // window->surface->mode &= ~SURFACE_REAL; }
static void xynthlogout_logout (s_window_t *window, s_event_t *event, s_handler_t *handler) { s_socket_request(window, SOC_DATA_CLOSE_SERVER); }
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; }