Exemple #1
0
static int
glw_text_bitmap_event(glw_t *w, event_t *e)
{
  glw_text_bitmap_t *gtb = (glw_text_bitmap_t *)w;

  if(event_is_action(e, ACTION_BS)) {

    del_char(gtb);
    gtb_notify(gtb);
    return 1;

  } else if(event_is_type(e, EVENT_UNICODE)) {

    event_int_t *eu = (event_int_t *)e;

    if(insert_char(gtb, eu->val))
      gtb_notify(gtb);
    return 1;

  } else if(event_is_type(e, EVENT_INSERT_STRING)) {
    event_payload_t *ep = (event_payload_t *)e;
    const char *str = ep->payload;
    int uc;
    while((uc = utf8_get(&str)) != 0) {
      insert_char(gtb, uc);
    }
    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;

  } 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;

  } else if(event_is_action(e, ACTION_ACTIVATE) ||
            event_is_action(e, ACTION_ITEMMENU)) {
    
    gtb_caption_refresh(gtb);

    if(gtb->gtb_flags & (GTB_FILE_REQUEST | GTB_DIR_REQUEST)) {

      if(gtb->gtb_p == NULL) {
        TRACE(TRACE_ERROR, "GLW",
              "File requests on unbound widgets is not supported");
      } else {

        int flags =
          (gtb->gtb_flags & GTB_FILE_REQUEST ? FILEPICKER_FILES : 0) |
          (gtb->gtb_flags & GTB_DIR_REQUEST  ? FILEPICKER_DIRECTORIES : 0);

        filepicker_pick_to_prop(gtb->gtb_description,
                                gtb->gtb_p, gtb->gtb_caption,
                                flags);
      }

    } else {

      if(event_is_action(e, ACTION_ACTIVATE) && e->e_flags & EVENT_MOUSE)
        return 1;

      w->glw_root->gr_open_osk(w->glw_root,
                               gtb->gtb_description,
                               gtb->gtb_caption, w,
                               gtb->gtb_flags & GTB_PASSWORD);
    }
    return 1;
  }
  return 0;
}
Exemple #2
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;
}