g_signal_handler_block(textview, win->pager_keypress_handler);
GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrolledwindow));
win->pager_adjustment_handler = g_signal_connect_after(adj, "value-changed", G_CALLBACK(pager_after_adjustment_changed), win);
+ g_signal_connect(pager, "clicked", G_CALLBACK(pager_on_clicked), win);
/* Char and line input */
win->char_input_keypress_handler = g_signal_connect( textview, "key-press-event", G_CALLBACK(on_char_input_key_press_event), win );
}
/* Set the window as a child of the Glk widget, don't trigger an arrange event */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
glk_data->needs_rearrange = TRUE;
glk_data->ignore_next_arrange_event = TRUE;
- g_mutex_unlock(glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
gtk_widget_set_parent(win->frame, GTK_WIDGET(glk_data->self));
gtk_widget_queue_resize(GTK_WIDGET(glk_data->self));
window_close_common(win, FALSE);
/* Schedule a redraw */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
glk_data->needs_rearrange = TRUE;
glk_data->ignore_next_arrange_event = TRUE;
- g_mutex_unlock(glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
gtk_widget_queue_resize( GTK_WIDGET(glk_data->self) );
gdk_threads_leave();
}
/* fill the buffer with blanks */
{
/* Wait for the window's size to be updated */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
-
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
+
gdk_threads_enter();
/* Manually put newlines at the end of each row of characters in the buffer; manual newlines make resizing the window's grid easier. */
GtkTextIter start, end;
gtk_text_buffer_get_start_iter(textbuffer, &start);
gtk_text_buffer_get_end_iter(textbuffer, &end);
-
- /* Determine default style */
- GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(textbuffer);
- GtkTextTag *default_tag = gtk_text_tag_table_lookup(tags, "default");
- GtkTextTag *style_tag = gtk_text_tag_table_lookup(tags, "normal");
- GtkTextTag *glk_style_tag = gtk_text_tag_table_lookup(tags, "normal");
-
- // Default style
- gtk_text_buffer_apply_tag(textbuffer, default_tag, &start, &end);
-
- // Player's style overrides
- gtk_text_buffer_apply_tag(textbuffer, style_tag, &start, &end);
-
- // GLK Program's style overrides
- gtk_text_buffer_apply_tag(textbuffer, glk_style_tag, &start, &end);
-
- if(win->zcolor != NULL)
- gtk_text_buffer_apply_tag(textbuffer, win->zcolor, &start, &end);
+ style_apply(win, &start, &end);
gtk_text_buffer_move_mark_by_name(textbuffer, "cursor_position", &start);
GtkAllocation allocation;
/* Wait for the window's size to be updated */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
gdk_threads_enter();
gtk_widget_get_allocation(win->widget, &allocation);
case wintype_TextGrid:
/* Wait until the window's size is current */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
-
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
+
gdk_threads_enter();
gtk_widget_get_allocation(win->widget, &allocation);
/* Cache the width and height */
break;
case wintype_TextBuffer:
- /* Wait until the window's size is current */
- g_mutex_lock(glk_data->arrange_lock);
+ /* Wait until the window's size is current */
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
-
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
+
gdk_threads_enter();
gtk_widget_get_allocation(win->widget, &allocation);
if(widthptr != NULL)
break;
case wintype_Graphics:
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
-
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
+
gdk_threads_enter();
gtk_widget_get_allocation(win->widget, &allocation);
if(widthptr != NULL)
/* Tell GTK to rearrange the windows */
gdk_threads_enter();
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
glk_data->needs_rearrange = TRUE;
glk_data->ignore_next_arrange_event = TRUE;
- g_mutex_unlock(glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
gtk_widget_queue_resize(GTK_WIDGET(glk_data->self));
gdk_threads_leave();
}
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
/* Wait until the window's size is current */
- g_mutex_lock(glk_data->arrange_lock);
+ g_mutex_lock(&glk_data->arrange_lock);
if(glk_data->needs_rearrange)
- g_cond_wait(glk_data->rearranged, glk_data->arrange_lock);
- g_mutex_unlock(glk_data->arrange_lock);
+ g_cond_wait(&glk_data->rearranged, &glk_data->arrange_lock);
+ g_mutex_unlock(&glk_data->arrange_lock);
/* Don't do anything if the window is shrunk down to nothing */
if(win->width == 0 || win->height == 0)