More pager improvements. Pager now determines correctly which text is read by the...
[rodin/chimara.git] / player / main.c
index c032849cb63446e3bda8bc9878acfc40d0996ea0..962ca30e0ba3f05198a9f55d163f56a2e8646769 100644 (file)
@@ -65,15 +65,43 @@ load_object(const gchar *name)
        return retval;
 }
 
+static void
+change_window_title(ChimaraGlk *glk, GParamSpec *pspec, GtkWindow *window)
+{
+       gchar *program_name, *story_name, *title;
+       g_object_get(glk, "program-name", &program_name, "story-name", &story_name, NULL);
+       if(!program_name) {
+               gtk_window_set_title(window, "Chimara");
+               return;
+       }
+       else if(!story_name)
+               title = g_strdup_printf("%s - Chimara", program_name);
+       else
+               title = g_strdup_printf("%s - %s - Chimara", program_name, story_name);
+               
+       g_free(program_name);
+       g_free(story_name);
+       gtk_window_set_title(window, title);
+       g_free(title);
+}
+
 static void
 create_window(void)
 {
        GError *error = NULL;
 
        builder = gtk_builder_new();
-       if( !gtk_builder_add_from_file(builder, PACKAGE_SRC_DIR "/chimara.ui", &error) ) {
-               error_dialog(NULL, error, "Error while building interface: ");  
-               return;
+       if( !gtk_builder_add_from_file(builder, PACKAGE_DATA_DIR "/chimara.ui", &error) ) {
+#ifdef DEBUG
+               g_error_free(error);
+               error = NULL;
+               if( !gtk_builder_add_from_file(builder, PACKAGE_SRC_DIR "/chimara.ui", &error) ) {
+#endif /* DEBUG */
+                       error_dialog(NULL, error, "Error while building interface: ");  
+                       return;
+#ifdef DEBUG
+               }
+#endif /* DEBUG */
        }
 
        window = GTK_WIDGET(load_object("chimara"));
@@ -119,13 +147,38 @@ create_window(void)
        gtk_recent_chooser_add_filter(recent, filter);
 
        uimanager = gtk_ui_manager_new();
-       if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_SRC_DIR "/chimara.menus", &error) ) {
-               error_dialog(NULL, error, "Error while building interface: ");
-               return;
+       if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_DATA_DIR "/chimara.menus", &error) ) {
+#ifdef DEBUG
+               g_error_free(error);
+               error = NULL;
+               if( !gtk_ui_manager_add_ui_from_file(uimanager, PACKAGE_SRC_DIR "/chimara.menus", &error) ) {
+#endif /* DEBUG */
+                       error_dialog(NULL, error, "Error while building interface: ");
+                       return;
+#ifdef DEBUG
+               }
+#endif /* DEBUG */
        }
        
        glk = chimara_if_new();
        g_object_set(glk, "ignore-errors", TRUE, NULL);
+       if( !chimara_glk_set_css_from_file(CHIMARA_GLK(glk), PACKAGE_DATA_DIR "/style.css", &error) ) {
+#ifdef DEBUG
+               g_error_free(error);
+               error = NULL;
+               if( !chimara_glk_set_css_from_file(CHIMARA_GLK(glk), PACKAGE_SRC_DIR "/macstyle.css", &error) ) {
+#endif /* DEBUG */
+                       error_dialog(NULL, error, "Couldn't open CSS file: ");
+                       return;
+#ifdef DEBUG
+               }
+#endif /* DEBUG */
+       }
+       
+       /* DON'T UNCOMMENT THIS your eyes will burn
+        but it is a good test of programmatically altering just one style
+       chimara_glk_set_css_from_string(CHIMARA_GLK(glk),
+           "buffer.normal { font-family: 'Comic Sans MS'; }");*/
        
        GtkBox *vbox = GTK_BOX( gtk_builder_get_object(builder, "vbox") );                      
        if(vbox == NULL)
@@ -143,6 +196,8 @@ create_window(void)
        gtk_box_pack_start(vbox, toolbar, FALSE, FALSE, 0);
        
        gtk_builder_connect_signals(builder, glk);
+       g_signal_connect(glk, "notify::program-name", G_CALLBACK(change_window_title), window);
+       g_signal_connect(glk, "notify::story-name", G_CALLBACK(change_window_title), window);
 }
 
 int