static int glw_text_bitmap_callback(glw_t *w, void *opaque, glw_signal_t signal, void *extra) { glw_text_bitmap_t *gtb = (glw_text_bitmap_t *)w; switch(signal) { default: break; case GLW_SIGNAL_DESTROY: gtb_unbind(gtb); break; case GLW_SIGNAL_INACTIVE: gtb_inactive(gtb); break; } return 0; }
static int glw_text_bitmap_callback(glw_t *w, void *opaque, glw_signal_t signal, void *extra) { glw_text_bitmap_t *gtb = (void *)w; event_t *e; event_int_t *eu; switch(signal) { default: break; case GLW_SIGNAL_DESTROY: gtb_unbind(gtb); break; case GLW_SIGNAL_LAYOUT: glw_text_bitmap_layout(w, extra); break; case GLW_SIGNAL_INACTIVE: gtb_inactive(gtb); break; case GLW_SIGNAL_EVENT: if(w->glw_class == &glw_label) return 0; e = extra; if(event_is_action(e, ACTION_BS)) { del_char(gtb); gtb_notify(gtb); return 1; } else if(event_is_type(e, EVENT_UNICODE)) { eu = extra; if(insert_char(gtb, eu->val)) gtb_notify(gtb); return 1; } else if(event_is_action(e, ACTION_LEFT)) { if(gtb->gtb_edit_ptr > 0) { gtb->gtb_edit_ptr--; gtb->gtb_update_cursor = 1; return 1; } return 0; } else if(event_is_action(e, ACTION_RIGHT)) { if(gtb->gtb_edit_ptr < gtb->gtb_uc_len) { gtb->gtb_edit_ptr++; gtb->gtb_update_cursor = 1; return 1; } return 0; } else if(event_is_action(e, ACTION_ACTIVATE)) { if(w->glw_root->gr_open_osk != NULL) { char buf[512]; char *q = buf; int i; for(i = 0; i < gtb->gtb_uc_len; i++) q += utf8_put(q, gtb->gtb_uc_buffer[i]); *q = 0; w->glw_root->gr_open_osk(w->glw_root, NULL, buf, w, gtb->gtb_flags & GTB_PASSWORD); return 1; } } return 0; } return 0; }