aboutsummaryrefslogtreecommitdiff
path: root/src/ui/messages.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/messages.c')
-rw-r--r--src/ui/messages.c62
1 files changed, 3 insertions, 59 deletions
diff --git a/src/ui/messages.c b/src/ui/messages.c
index 1194f5b..211fe94 100644
--- a/src/ui/messages.c
+++ b/src/ui/messages.c
@@ -24,6 +24,7 @@
24 24
25#include "messages.h" 25#include "messages.h"
26 26
27#include "text_input.h"
27#include "../application.h" 28#include "../application.h"
28#include "../util.h" 29#include "../util.h"
29 30
@@ -39,8 +40,6 @@ _messages_iterate(UI_MESSAGES_Handle *messages,
39 messages->selected = message; 40 messages->selected = message;
40} 41}
41 42
42
43
44void 43void
45_messages_handle_message(UI_MESSAGES_Handle *messages) 44_messages_handle_message(UI_MESSAGES_Handle *messages)
46{ 45{
@@ -94,38 +93,19 @@ messages_event(UI_MESSAGES_Handle *messages,
94 { 93 {
95 case 27: 94 case 27:
96 case KEY_EXIT: 95 case KEY_EXIT:
97 {
98 app->chat.context = NULL; 96 app->chat.context = NULL;
99 break; 97 break;
100 }
101 case KEY_LEFT:
102 {
103 messages->text_pos--;
104 break;
105 }
106 case KEY_RIGHT:
107 {
108 messages->text_pos++;
109 break;
110 }
111 case KEY_UP: 98 case KEY_UP:
112 {
113 messages->line_selected--; 99 messages->line_selected--;
114 break; 100 break;
115 }
116 case KEY_DOWN: 101 case KEY_DOWN:
117 {
118 messages->line_selected++; 102 messages->line_selected++;
119 break; 103 break;
120 }
121 case '\t': 104 case '\t':
122 {
123 app->chat.show_members = TRUE; 105 app->chat.show_members = TRUE;
124 break; 106 break;
125 }
126 case '\n': 107 case '\n':
127 case KEY_ENTER: 108 case KEY_ENTER:
128 {
129 if (messages->selected) 109 if (messages->selected)
130 _messages_handle_message(messages); 110 _messages_handle_message(messages);
131 else if (messages->text_len > 0) 111 else if (messages->text_len > 0)
@@ -134,55 +114,19 @@ messages_event(UI_MESSAGES_Handle *messages,
134 messages->text_len = 0; 114 messages->text_len = 0;
135 } 115 }
136 break; 116 break;
137 }
138 case KEY_BACKSPACE: 117 case KEY_BACKSPACE:
139 {
140 if (messages->selected) 118 if (messages->selected)
141 {
142 GNUNET_CHAT_message_delete( 119 GNUNET_CHAT_message_delete(
143 messages->selected, 120 messages->selected,
144 GNUNET_TIME_relative_get_zero_() 121 GNUNET_TIME_relative_get_zero_()
145 ); 122 );
146 break;
147 }
148
149 if ((messages->text_pos < messages->text_len) &&
150 (messages->text_pos > 0))
151 for (int i = messages->text_pos; i < messages->text_len; i++)
152 messages->text[i - 1] = messages->text[i];
153
154 if ((messages->text_pos > 0) && (messages->text_len > 0))
155 {
156 messages->text_pos--;
157 messages->text_len--;
158 }
159
160 break; 123 break;
161 }
162 default: 124 default:
163 {
164 if ((messages->selected) || (!isprint(key)))
165 break;
166
167 for (int i = messages->text_len - 1; i >= messages->text_pos; i--)
168 messages->text[i + 1] = messages->text[i];
169
170 messages->text[messages->text_pos++] = (char) key;
171 messages->text_len++;
172 break; 125 break;
173 }
174 } 126 }
175 127
176 if (messages->text_len >= TEXT_LEN_MAX) 128 if (!(messages->selected))
177 messages->text_len = TEXT_LEN_MAX - 1; 129 text_input_event(messages->text, key);
178
179 messages->text[messages->text_len] = '\0';
180
181 if (messages->text_pos < 0)
182 messages->text_pos = 0;
183
184 if (messages->text_pos > messages->text_len)
185 messages->text_pos = messages->text_len;
186 130
187 if (messages->line_selected < 0) 131 if (messages->line_selected < 0)
188 messages->line_selected = 0; 132 messages->line_selected = 0;