summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c21
-rw-r--r--data.h1
-rw-r--r--gtk.c12
3 files changed, 32 insertions, 2 deletions
diff --git a/data.c b/data.c
index e2bfc30..c0a0592 100644
--- a/data.c
+++ b/data.c
@@ -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;
+ }
+ }
+
+}
diff --git a/data.h b/data.h
index 7536227..6fabbe6 100644
--- a/data.h
+++ b/data.h
@@ -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);
diff --git a/gtk.c b/gtk.c
index 8e39a73..d4b1cfc 100644
--- a/gtk.c
+++ b/gtk.c
@@ -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;
}