Started using thread-private data. Multisession still doesn't work, but regular opera...
[rodin/chimara.git] / libchimara / window.c
index dea1fb60c64f76fcb35263ba7bcba635220ab296..bbfe49db68658f134ee667503044a19b5117ceb3 100644 (file)
@@ -1,8 +1,9 @@
+#include <glib.h>
 #include "window.h"
 #include "magic.h"
 #include "chimara-glk-private.h"
 
-extern ChimaraGlkPrivate *glk_data;
+extern GPrivate *glk_data_key;
 
 /**
  * glk_window_iterate:
@@ -25,6 +26,7 @@ glk_window_iterate(winid_t win, glui32 *rockptr)
 {
        VALID_WINDOW_OR_NULL(win, return NULL);
        
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        GNode *retnode;
        
        if(win == NULL)
@@ -135,6 +137,7 @@ glk_window_get_sibling(winid_t win)
 winid_t
 glk_window_get_root()
 {
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        if(glk_data->root_window == NULL)
                return NULL;
        return (winid_t)glk_data->root_window->data;
@@ -377,6 +380,8 @@ glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype,
        g_return_val_if_fail(method == (method & (winmethod_DirMask | winmethod_DivisionMask)), NULL);
        g_return_val_if_fail(!(((method & winmethod_DivisionMask) == winmethod_Proportional) && size > 100), NULL);     
 
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+       
        if(split == NULL && glk_data->root_window != NULL)
        {
                ILLEGAL("Tried to open a new root window, but there is already a root window");
@@ -454,6 +459,9 @@ glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype,
                        
                        gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(textview), GTK_WRAP_WORD_CHAR );
                        gtk_text_view_set_editable( GTK_TEXT_VIEW(textview), FALSE );
+                       gtk_text_view_set_pixels_inside_wrap( GTK_TEXT_VIEW(textview), 3 );
+                       gtk_text_view_set_left_margin( GTK_TEXT_VIEW(textview), 20 );
+                       gtk_text_view_set_right_margin( GTK_TEXT_VIEW(textview), 20 );
 
                        gtk_container_add( GTK_CONTAINER(scrolledwindow), textview );
                        gtk_widget_show_all(scrolledwindow);
@@ -698,6 +706,8 @@ void
 glk_window_close(winid_t win, stream_result_t *result)
 {
        VALID_WINDOW(win, return);
+
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        
        gdk_threads_enter(); /* Prevent redraw while we're trashing the window */
        
@@ -807,6 +817,8 @@ glk_window_clear(winid_t win)
 {
        VALID_WINDOW(win, return);
        g_return_if_fail(win->input_request_type != INPUT_REQUEST_LINE && win->input_request_type != INPUT_REQUEST_LINE_UNICODE);
+
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        
        switch(win->type)
        {
@@ -973,6 +985,8 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr)
 {
        VALID_WINDOW(win, return);
 
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+       
     switch(win->type)
     {
         case wintype_Blank:
@@ -1100,6 +1114,8 @@ glk_window_set_arrangement(winid_t win, glui32 method, glui32 size, winid_t keyw
        }
        g_return_if_fail(method == (method & (winmethod_DirMask | winmethod_DivisionMask)));
        g_return_if_fail(!(((method & winmethod_DivisionMask) == winmethod_Proportional) && size > 100));
+
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        
        win->split_method = method;
        win->constraint_size = size;
@@ -1174,6 +1190,8 @@ glk_window_move_cursor(winid_t win, glui32 xpos, glui32 ypos)
 {
        VALID_WINDOW(win, return);
        g_return_if_fail(win->type == wintype_TextGrid);
+
+       ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
        
        /* Wait until the window's size is current */
        g_mutex_lock(glk_data->arrange_lock);