diff options
author | xengineering <me@xengineering.eu> | 2022-08-21 10:51:25 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2022-08-21 10:51:25 +0200 |
commit | bd516ecdb218f4122acf077bef5a4dbde91653e5 (patch) | |
tree | c7698470ea9c945eb252e7abfeb46a021e852e8c | |
parent | effdc7d687caf331217b6fc20ba51cabf3c56f20 (diff) | |
download | limox-bd516ecdb218f4122acf077bef5a4dbde91653e5.tar limox-bd516ecdb218f4122acf077bef5a4dbde91653e5.tar.zst limox-bd516ecdb218f4122acf077bef5a4dbde91653e5.zip |
Implement GUI part of message sending
-rw-r--r-- | data.c | 25 | ||||
-rw-r--r-- | data.h | 3 | ||||
-rw-r--r-- | gtk.c | 10 |
3 files changed, 32 insertions, 6 deletions
@@ -102,3 +102,28 @@ void data_add_incoming_message(const char* sender_jid, const char* content) { // received message so that future responses go to this ressource } + +void data_add_outgoing_message(const char* sender_jid, const char* content, + chat_t* chat) { + + // allocate and initialize message_t + message_t* msg = malloc(sizeof(message_t)); + msg->sender_jid = malloc(sizeof(char)*strlen(sender_jid)); + strcpy(msg->sender_jid, sender_jid); + msg->recipient_jid = malloc(sizeof(char)*strlen(chat->jid)); + strcpy(msg->recipient_jid, chat->jid); + msg->content = malloc(sizeof(char)*strlen(content)); + strcpy(msg->content, content); + msg->next = NULL; + + // find pointer to next message of chat and add this message + message_t* m; + for (m = chat->messages; m != NULL; m=m->next); + m = msg; + + // TODO send this message via XMPP + + // create GUI widget for this message + gui_add_message_widget(msg, chat); + +} @@ -12,6 +12,7 @@ typedef enum { typedef struct _message_t { char* content; char* sender_jid; + char* recipient_jid; struct _message_t* next; void* widget; } message_t; @@ -34,4 +35,6 @@ typedef struct _roster_item_t { void data_add_roster_item(const char* jid, const char* subscription, const char* name); void data_add_incoming_message(const char* sender_jid, const char* content); +void data_add_outgoing_message(const char* sender_jid, const char* content, + chat_t* chat); #endif @@ -68,17 +68,15 @@ static void disconnect_cb(void) { void send_message(chat_t* chat) { + // cast void* to GUI-specific chat_widget_t* chat_widget_t* chat_widget = (chat_widget_t*)chat->widget; + // get text of message and own JID const char* text = gtk_editable_get_text(GTK_EDITABLE(chat_widget->entry)); const char* self = gtk_editable_get_text(GTK_EDITABLE(connector_jid_entry)); - // execute dummy XMPP send TODO - printf("Sending from %s to %s:\n> %s\n", self, chat->jid, text); - - //// add message content to the chat - //GtkWidget* message = gtk_label_new(text); - //gtk_box_append(GTK_BOX(chat->chat_content_box), message); + // add message to datastructure + data_add_outgoing_message(self, text, chat); // clear text input GtkEntryBuffer* buffer; |