X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fwindow.c;h=011b5fbf99ee6859f45940d1ba82ddf14452d5ee;hb=510af770653094e2740bb693e269ae04864651f7;hp=6c635393303bcf2a49a8ffe9f71f3201011b2f3f;hpb=02dacdfeec2bb204aff8dae862ece880c58f5e0c;p=rodin%2Fchimara.git
diff --git a/libchimara/window.c b/libchimara/window.c
index 6c63539..011b5fb 100644
--- a/libchimara/window.c
+++ b/libchimara/window.c
@@ -26,7 +26,7 @@ window_new_common(glui32 rock)
win->window_stream->type = STREAM_TYPE_WINDOW;
win->window_stream->window = win;
win->window_stream->style = "normal";
-
+
win->echo_stream = NULL;
win->input_request_type = INPUT_REQUEST_NONE;
win->line_input_buffer = NULL;
@@ -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;
}
@@ -282,11 +282,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 +331,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:
- *
+ *
+ *
*
*
*
@@ -826,7 +827,12 @@ glk_window_close(winid_t win, stream_result_t *result)
if(pair_node != NULL)
{
gboolean new_child_on_left = ( pair_node == g_node_first_sibling(pair_node) );
- GNode *sibling_node = pair_node->children; /* only one child left */
+
+ /* Lookup our sibling */
+ GNode *sibling_node = pair_node->children;
+ if(sibling_node == win->window_node)
+ sibling_node = sibling_node->next;
+
GNode *new_parent_node = pair_node->parent;
g_node_unlink(pair_node);
g_node_unlink(sibling_node);
@@ -844,6 +850,7 @@ glk_window_close(winid_t win, stream_result_t *result)
g_node_append(new_parent_node, sibling_node);
}
+ stream_close_common( ((winid_t) pair_node->data)->window_stream, NULL );
window_close_common( (winid_t) pair_node->data, TRUE);
}
else /* it was the root window */
@@ -888,7 +895,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.
*
*
*
@@ -984,7 +992,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
@@ -1178,15 +1186,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.
@@ -1196,18 +1204,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