win->window_stream->type = STREAM_TYPE_WINDOW;
win->window_stream->window = win;
win->window_stream->style = "normal";
win->window_stream->type = STREAM_TYPE_WINDOW;
win->window_stream->window = win;
win->window_stream->style = "normal";
- 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);
glk_window_get_parent(winid_t win)
{
VALID_WINDOW(win, return NULL);
glk_window_get_parent(winid_t win)
{
VALID_WINDOW(win, return NULL);
*
* So to create a text buffer window which takes the top 40% of the original
* window's space, you would execute
*
* 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
*
* 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.
*
* 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.
* <quote>O</quote>. C gets two rows; A gets the rest. All done.
*
* Then the user maliciously starts squeezing the window down, in stages:
* <quote>O</quote>. C gets two rows; A gets the rest. All done.
*
* Then the user maliciously starts squeezing the window down, in stages:
* <entry><mediaobject><imageobject><imagedata fileref="fig5-7a.png"/>
* </imageobject></mediaobject></entry>
* <entry><mediaobject><imageobject><imagedata fileref="fig7b.png"/>
* <entry><mediaobject><imageobject><imagedata fileref="fig5-7a.png"/>
* </imageobject></mediaobject></entry>
* <entry><mediaobject><imageobject><imagedata fileref="fig7b.png"/>
- /* "size-allocate"? Really? WTF, GTK? */
- g_signal_connect_after( textview, "size-allocate", G_CALLBACK(pager_after_size_allocate), 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);
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(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 );
/* 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 );
- 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);
GNode *new_parent_node = pair_node->parent;
g_node_unlink(pair_node);
g_node_unlink(sibling_node);
window_close_common( (winid_t) pair_node->data, TRUE);
}
else /* it was the root window */
window_close_common( (winid_t) pair_node->data, TRUE);
}
else /* it was the root window */
* @win: A window, or %NULL.
*
* Sets the current stream to @win's window stream. It is exactly equivalent to
* @win: A window, or %NULL.
*
* Sets the current stream to @win's window stream. It is exactly equivalent to
* 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
* |[
* 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
* ]|
* 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 <quote>leave the key window unchanged.</quote>
* 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 <quote>leave the key window unchanged.</quote>
* example, you could change O2's key window to be A, but not B. The key window
* also cannot be a pair window itself.
*
* 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 <emphasis>lower</emphasis> 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
* This changes the constraint to be on the <emphasis>lower</emphasis> 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); ]|
- * |[ glk_window_set_arrangement(o2, #winmethod_Below | #winmethod_Proportional, 30, NULL); ]|
+ * |[ glk_window_set_arrangement(o2, winmethod_Below | winmethod_Proportional, 30, NULL); ]|
- * |[ 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
* 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