X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fwindow.c;h=94042d1a9aaa901b0d2233453858cecc28518897;hb=77d5b31de1338fd87f67ab5896287519c8efe8ff;hp=15f8f4b1337059e2d4452a1c338ca019a0f5c8a4;hpb=cccf5a5fb76599e4c5dffaae34ec6bda6229f554;p=rodin%2Fchimara.git
diff --git a/libchimara/window.c b/libchimara/window.c
index 15f8f4b..94042d1 100644
--- a/libchimara/window.c
+++ b/libchimara/window.c
@@ -37,7 +37,7 @@ window_new_common(glui32 rock)
win->buffer = g_string_sized_new(1024);
/* Initialise hyperlink table */
- win->hyperlinks = g_hash_table_new_full(g_int_hash, g_direct_equal, g_free, g_object_unref);
+ win->hyperlinks = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_free);
return win;
}
@@ -170,7 +170,11 @@ winid_t
glk_window_get_parent(winid_t win)
{
VALID_WINDOW(win, return NULL);
+
/* Value will also be NULL if win is the root window */
+ if(win->window_node->parent == NULL)
+ return NULL;
+
return (winid_t)win->window_node->parent->data;
}
@@ -282,11 +286,11 @@ glk_window_get_root()
*
* So to create a text buffer window which takes the top 40% of the original
* window's space, you would execute
- * |[ newwin = #glk_window_open(win, #winmethod_Above | #winmethod_Proportional, 40, #wintype_TextBuffer, 0); ]|
+ * |[ newwin = glk_window_open(win, winmethod_Above | winmethod_Proportional, 40, wintype_TextBuffer, 0); ]|
*
* To create a text grid which is always five lines high, at the bottom of the
* original window, you would do
- * |[ newwin = #glk_window_open(win, #winmethod_Below | #winmethod_Fixed, 5, #wintype_TextGrid, 0); ]|
+ * |[ newwin = glk_window_open(win, winmethod_Below | winmethod_Fixed, 5, wintype_TextGrid, 0); ]|
*
* Note that the meaning of the @size argument depends on the @method argument.
* If the method is %winmethod_Fixed, it also depends on the @wintype argument.
@@ -331,7 +335,8 @@ glk_window_get_root()
* O. C gets two rows; A gets the rest. All done.
*
* Then the user maliciously starts squeezing the window down, in stages:
- *
+ *
+ *
*
*
*
@@ -547,15 +552,14 @@ glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype,
/* Connect signal handlers */
/* Pager */
- /* "size-allocate"? Really? WTF, GTK? */
- g_signal_connect_after( textview, "size-allocate", G_CALLBACK(pager_after_size_allocate), win );
+ //g_signal_connect_after( textview, "expose-event", G_CALLBACK(pager_after_expose_event), win );
+ g_signal_connect_after( textview, "size-request", G_CALLBACK(pager_after_size_request), win );
win->pager_expose_handler = g_signal_connect_after( textview, "expose-event", G_CALLBACK(pager_on_expose), win );
g_signal_handler_block(textview, win->pager_expose_handler);
win->pager_keypress_handler = g_signal_connect( textview, "key-press-event", G_CALLBACK(pager_on_key_press_event), win );
g_signal_handler_block(textview, win->pager_keypress_handler);
- //g_signal_connect_after( textbuffer, "insert-text", G_CALLBACK(pager_after_insert_text), win );
GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrolledwindow));
- g_signal_connect_after(adj, "value-changed", G_CALLBACK(pager_after_adjustment_changed), win);
+ win->pager_adjustment_handler = g_signal_connect_after(adj, "value-changed", G_CALLBACK(pager_after_adjustment_changed), 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 );
@@ -581,7 +585,8 @@ glk_window_open(winid_t split, glui32 method, glui32 size, glui32 wintype,
/* Create the pager position mark; it stands for the last character in the buffer
that has been on-screen */
- gtk_text_buffer_create_mark(textbuffer, "pager_position", &end, TRUE);
+ GtkTextMark *pager_position = gtk_text_buffer_create_mark(textbuffer, "pager_position", &end, TRUE);
+ gtk_text_mark_set_visible(pager_position, TRUE);
}
break;
@@ -894,7 +899,8 @@ glk_window_close(winid_t win, stream_result_t *result)
* Graphics
*
* Clears the entire window to its current background color. See Graphics Windows.
+ * linkend="chimara-The-Types-of-Windows#wintype-Graphics">Graphics
+ * Windows.
*
*
*
@@ -990,7 +996,7 @@ glk_window_clear(winid_t win)
* @win: A window, or %NULL.
*
* Sets the current stream to @win's window stream. It is exactly equivalent to
- * |[ #glk_stream_set_current(#glk_window_get_stream(@win)) ]|
+ * |[ glk_stream_set_current(glk_window_get_stream(win)) ]|
* See Streams.
*
* Chimara
@@ -1184,15 +1190,15 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr)
* Consider the example above, where D has collapsed to zero height. Say D was a
* text buffer window. You could make a more useful layout by doing
* |[
- * #winid_t o2;
- * o2 = #glk_window_get_parent(d);
- * glk_window_set_arrangement(o2, #winmethod_Above | #winmethod_Fixed, 3, d);
+ * winid_t o2;
+ * o2 = glk_window_get_parent(d);
+ * glk_window_set_arrangement(o2, winmethod_Above | winmethod_Fixed, 3, d);
* ]|
* That would set D (the upper child of O2) to be O2's key window, and give it a
* fixed size of 3 rows.
*
* If you later wanted to expand D, you could do
- * |[ glk_window_set_arrangement(o2, #winmethod_Above | #winmethod_Fixed, 5, NULL); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Above | winmethod_Fixed, 5, NULL); ]|
* That expands D to five rows. Note that, since O2's key window is already set
* to D, it is not necessary to provide the @keywin argument; you can pass %NULL
* to mean leave the key window unchanged.
@@ -1202,18 +1208,18 @@ glk_window_get_size(winid_t win, glui32 *widthptr, glui32 *heightptr)
* example, you could change O2's key window to be A, but not B. The key window
* also cannot be a pair window itself.
*
- * |[ glk_window_set_arrangement(o2, #winmethod_Below | #winmethod_Fixed, 3, NULL); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Below | winmethod_Fixed, 3, NULL); ]|
* This changes the constraint to be on the lower child of
* O2, which is A. The key window is still D; so A would then be three rows high
* as measured in D's font, and D would get the rest of O2's space. That may not
* be what you want. To set A to be three rows high as measured in A's font, you
* would do
- * |[ glk_window_set_arrangement(o2, #winmethod_Below | #winmethod_Fixed, 3, a); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Below | winmethod_Fixed, 3, a); ]|
*
* Or you could change O2 to a proportional split:
- * |[ glk_window_set_arrangement(o2, #winmethod_Below | #winmethod_Proportional, 30, NULL); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Below | winmethod_Proportional, 30, NULL); ]|
* or
- * |[ glk_window_set_arrangement(o2, #winmethod_Above | #winmethod_Proportional, 70, NULL); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Above | winmethod_Proportional, 70, NULL); ]|
* These do exactly the same thing, since 30% above is the same as
* 70% below. You don't need to specify a key window with a proportional
* split, so the @keywin argument is %NULL. (You could actually specify either A