]> cgit.babelmonkeys.de Git - jubjub.git/blob - src/gui/gtk/JubGtkUI.m
000b483122d49402ab65fee6b73937354418c32b
[jubjub.git] / src / gui / gtk / JubGtkUI.m
1 #import <ObjXMPP/ObjXMPP.h>
2 #include <gtk/gtk.h>
3
4 #import "JubGtkUI.h"
5 #import "JubGtkRosterUI.h"
6
7 void on_roster_window_destroy(GObject *object, gpointer user_data)
8 {
9         gtk_main_quit();
10 }
11
12 @implementation JubGtkUI
13 - init
14 {
15         self = [super init];
16
17         @try {
18                 int *argc;
19                 char ***argv;
20
21                 [[OFApplication sharedApplication] getArgumentCount: &argc
22                                                   andArgumentValues: &argv];
23
24                 gtk_init(argc, argv);
25
26                 builder = gtk_builder_new();
27                 gtk_builder_add_from_file(builder, "data/gtk/roster.ui", NULL);
28
29                 rosterUI = [[JubGtkRosterUI alloc] initWithBuilder: builder];
30         } @catch (id e) {
31                 [self release];
32                 @throw e;
33         }
34
35         return self;
36 }
37
38 - (void)dealloc
39 {
40         [rosterUI release];
41         g_object_unref(G_OBJECT(builder));
42
43         [super dealloc];
44 }
45
46 - (void)startUIThread
47 {
48         GtkWidget *roster_window;
49
50         roster_window =
51             GTK_WIDGET(gtk_builder_get_object(builder, "RosterWindow"));
52
53         gtk_builder_connect_signals(builder, NULL);
54
55         gtk_widget_show(roster_window);
56
57         [[OFThread threadWithBlock: ^(void){
58                 gtk_main();
59                 [OFApplication terminate];
60
61                 return nil;
62         }] start];
63 }
64
65 - (id<XMPPRosterDelegate>)rosterDelegate
66 {
67         return rosterUI;
68 }
69 @end