diff options
-rw-r--r-- | data.c | 21 | ||||
-rw-r--r-- | data.h | 1 | ||||
-rw-r--r-- | gtk.c | 12 |
3 files changed, 32 insertions, 2 deletions
@@ -64,3 +64,24 @@ void add_roster_item(const char* jid, const char* subscription, const char* name item->page_widget = gui_add_chat(); } + +void* data_get_chat_page(void* roster_item_widget) { + + if (roster == NULL) { + printf("Empty roster!\n"); + exit(1); + } else { + roster_item_t* current = roster; + while (1) { + if (current->widget == roster_item_widget) { + return current->page_widget; + } + if (current->next == NULL) { + printf("Could not find matching roster item!\n"); + exit(1); + } + current = current->next; + } + } + +} @@ -1 +1,2 @@ void add_roster_item(const char* jid, const char* subscription, const char* name); +void* data_get_chat_page(void* roster_item_widget); @@ -4,6 +4,7 @@ #include <stdio.h> #include "limox.h" +#include "data.h" // the GTK application is available as global variable @@ -219,6 +220,13 @@ void gui_add_message(const char* sender_jid, const char* content) { printf("Received from %s:\n%s\n", sender_jid, content); } +static void to_chat(GtkWidget* roster_item_widget) { + + GtkWidget* chat_page = data_get_chat_page((void*)roster_item_widget); + gtk_stack_set_visible_child(GTK_STACK(stack), chat_page); + +} + void* gui_add_roster_item(const char* jid, const char* sub, const char* name) { // print debug message @@ -238,8 +246,8 @@ void* gui_add_roster_item(const char* jid, const char* sub, const char* name) { // add roster item widget to roster page gtk_box_append(GTK_BOX(roster_content_box), roster_item_widget); - //g_signal_connect_swapped(roster_item_widget, "clicked", G_CALLBACK(to_chat), - // chat->chat_layout_box); TODO this should be realized again + g_signal_connect_swapped(roster_item_widget, "clicked", G_CALLBACK(to_chat), + roster_item_widget); return (void*)roster_item_widget; } |