Eerste import.
[rodin/chimara.git] / src / window.c
1 #include "window.h"
2
3 /* Global list of all windows */
4 static GNode *root_window = NULL;
5
6 winid_t
7 glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype, glui32 rock)
8 {
9         extern GtkBuilder *builder;
10
11         if(split)
12         {
13                 g_warning("glk_window_open: splitting of windows not implemented");
14                 return NULL;
15         }
16
17         if(root_window != NULL)
18         {
19                 g_warning("glk_window_open: there is already a window");
20                 return NULL;
21         }
22
23         winid_t new_window = g_new0(struct glk_window_struct, 1);
24         root_window = g_node_new(new_window);
25
26         new_window->rock = rock;
27         new_window->window_type = wintype;
28
29         GtkBox *vbox = GTK_BOX( gtk_builder_get_object(builder, "vbox") );                      
30         if(vbox == NULL)
31         {
32                 error_dialog(NULL, NULL, "Could not find vbox");
33                 return NULL;
34         }
35
36         switch(wintype)
37         {
38                 case wintype_TextBuffer:
39                 {
40                         GtkWidget *scroll_window = gtk_scrolled_window_new(NULL, NULL);
41                         GtkWidget *window = gtk_text_view_new();
42                         gtk_container_add( GTK_CONTAINER(scroll_window), window );
43                         gtk_box_pack_end(vbox, scroll_window, TRUE, TRUE, 0);
44                         gtk_widget_show_all(scroll_window);
45
46                         new_window->widget = window;
47                         new_window->window_stream = window_stream_new(new_window);
48                         new_window->echo_stream = NULL;
49                         new_window->input_request_type = INPUT_REQUEST_NONE;
50                         new_window->line_input_buffer = NULL;
51                         new_window->line_input_buffer_unicode = NULL;
52                 }
53
54                         break;
55                 default:
56                         g_warning("glk_window_open: unsupported window type");
57                         g_free(new_window);
58                         return NULL;
59         }
60
61         new_window->window_node = root_window;
62
63         return new_window;
64 }
65
66 void
67 glk_set_window(winid_t window)
68 {
69         glk_stream_set_current( glk_window_get_stream(window) );
70 }
71
72 strid_t glk_window_get_stream(winid_t window)
73 {
74         return window->window_stream;
75 }