_Bool edit_mdown(EDIT *edit) { if(edit->mouseover_char > edit->length) { edit->mouseover_char = edit->length; } if(edit->multiline) { if(scroll_mdown(edit->scroll)) { return 1; } } if(edit->mouseover) { edit_sel.start = edit_sel.p1 = edit_sel.p2 = edit->mouseover_char; edit_sel.length = 0; edit_select = 1; setactive(edit); showkeyboard(1); return 1; } else if(edit == active_edit) { edit_resetfocus(); } return 0; }
static void button_change_id_type_onpress(void) { edit_resetfocus(); if (self.id_buffer_length == TOX_FRIEND_ADDRESS_SIZE * 2) { self.id_buffer_length = bytes_to_emoji_string(self.id_buffer, sizeof(self.id_buffer), self.id_binary, TOX_FRIEND_ADDRESS_SIZE); edit_toxid.length = self.id_buffer_length; } else { id_to_string(self.id_buffer, self.id_binary); self.id_buffer_length = edit_toxid.length = TOX_FRIEND_ADDRESS_SIZE * 2; } }
// TODO move this out of here! static void show_page(ITEM *i){ // TODO!! // panel_item[selected_item->item - 1].disabled = 1; // panel_item[i->item - 1].disabled = 0; edit_resetfocus(); /* First things first, we need to deselect and store the old data. */ switch (selected_item->item){ case ITEM_FRIEND: { FRIEND *f = selected_item->data; free(f->typed); f->typed_length = edit_msg.length; f->typed = malloc(edit_msg.length); memcpy(f->typed, edit_msg.data, edit_msg.length); f->msg.scroll = messages_friend.panel.content_scroll->d; f->edit_history = edit_msg.history; f->edit_history_cur = edit_msg.history_cur; f->edit_history_length = edit_msg.history_length; panel_friend_chat.disabled = 1; } case ITEM_FRIEND_ADD: { panel_chat.disabled = 1; panel_friend_request.disabled = 1; break; } case ITEM_GROUP: { GROUPCHAT *g = selected_item->data; free(g->typed); g->typed_length = edit_msg_group.length; g->typed = malloc(edit_msg_group.length); memcpy(g->typed, edit_msg_group.data, edit_msg_group.length); g->msg.scroll = messages_group.panel.content_scroll->d; g->edit_history = edit_msg_group.history; g->edit_history_cur = edit_msg_group.history_cur; g->edit_history_length = edit_msg_group.history_length; panel_chat.disabled = 1; panel_group_chat.disabled = 1; break; } case ITEM_SETTINGS: { button_settings.disabled = 0; panel_settings_master.disabled = 1; panel_overhead.disabled = 1; break; } case ITEM_ADD: { button_add.disabled = 0; panel_add_friend.disabled = 1; break; } case ITEM_TRANSFER: { button_transfer.disabled = 0; panel_change_profile.disabled = 1; break; } /* End of last case */ } /* End of switch */ /* Now we activate/select the new page, and load stored data */ switch (i->item) { case ITEM_FRIEND_ADD: { panel_chat.disabled = 0; panel_friend_request.disabled = 0; break; } case ITEM_FRIEND: { FRIEND *f = i->data; #ifdef UNITY if (unity_running) { mm_rm_entry(f->cid); } #endif memcpy(edit_msg.data, f->typed, f->typed_length); edit_msg.length = f->typed_length; messages_friend.data = &f->msg; messages_updateheight(&messages_friend); messages_friend.iover = MSG_IDX_MAX; messages_friend.panel.content_scroll->content_height = f->msg.height; messages_friend.panel.content_scroll->d = f->msg.scroll; f->msg.id = f - friend; f->notify = 0; edit_msg.history = f->edit_history; edit_msg.history_cur = f->edit_history_cur; edit_msg.history_length = f->edit_history_length; edit_setfocus(&edit_msg); panel_chat.disabled = 0; panel_friend_chat.disabled = 0; break; } case ITEM_GROUP: { GROUPCHAT *g = i->data; memcpy(edit_msg_group.data, g->typed, g->typed_length); edit_msg_group.length = g->typed_length; messages_group.data = &g->msg; messages_updateheight(&messages_group); messages_group.iover = MSG_IDX_MAX; messages_group.panel.content_scroll->content_height = g->msg.height; messages_group.panel.content_scroll->d = g->msg.scroll; edit_setfocus(&edit_msg_group); g->msg.id = g - group; edit_msg_group.history = g->edit_history; edit_msg_group.history_cur = g->edit_history_cur; edit_msg_group.history_length = g->edit_history_length; panel_chat.disabled = 0; panel_group_chat.disabled = 0; break; } case ITEM_SETTINGS: { button_settings.disabled = 1; panel_overhead.disabled = 0; panel_settings_master.disabled = 0; break; } case ITEM_ADD: { button_add.disabled = 1; panel_overhead.disabled = 0; panel_add_friend.disabled = 0; edit_setfocus(&edit_add_id); break; } case ITEM_TRANSFER: { button_transfer.disabled = 1; panel_overhead.disabled = 0; panel_change_profile.disabled = 0; break; } // Last case } // Switch selected_item = i; addfriend_status = 0; // I think we shouldn't call this just here, redrawing should only be done when panel_draw is called, and now, we // don't even need to call the root tree, we can call subtrees/roots and should be able to increase performance. // redraw(); }
static void button_send_friend_request_onpress(void) { friend_add(edit_add_id.data, edit_add_id.length, edit_add_msg.data, edit_add_msg.length); edit_resetfocus(); }