summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorraspbeguy <raspbeguy@hashtagueule.fr>2017-01-22 08:48:38 +0100
committerSébastien Helleu <flashcode@flashtux.org>2017-01-22 09:27:16 +0100
commit1b23cd3a477e281b9880ef0e2981ff0d878d71b5 (patch)
treef8e04744b4f30848bcd9a73545e9f66c5df4d551 /src/gui
parent2f2b04e13903e0c1c64ef53f925892905a209695 (diff)
downloadweechat-1b23cd3a477e281b9880ef0e2981ff0d878d71b5.zip
core: add resize of window parents (closes #893)
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/curses/gui-curses-window.c16
-rw-r--r--src/gui/gui-window.c21
-rw-r--r--src/gui/gui-window.h6
3 files changed, 33 insertions, 10 deletions
diff --git a/src/gui/curses/gui-curses-window.c b/src/gui/curses/gui-curses-window.c
index 965cc5846..05bd4e407 100644
--- a/src/gui/curses/gui-curses-window.c
+++ b/src/gui/curses/gui-curses-window.c
@@ -1874,7 +1874,7 @@ gui_window_split_vertical (struct t_gui_window *window, int percentage)
*/
void
-gui_window_resize (struct t_gui_window *window, int percentage)
+gui_window_resize (struct t_gui_window_tree *tree, int percentage)
{
struct t_gui_window_tree *parent;
int old_split_pct, add_bottom, add_top, add_left, add_right;
@@ -1882,12 +1882,12 @@ gui_window_resize (struct t_gui_window *window, int percentage)
if (!gui_init_ok)
return;
- parent = window->ptr_tree->parent_node;
+ parent = tree->parent_node;
if (parent)
{
old_split_pct = parent->split_pct;
- if (((parent->split_horizontal) && (window->ptr_tree == parent->child2))
- || ((!(parent->split_horizontal)) && (window->ptr_tree == parent->child1)))
+ if (((parent->split_horizontal) && (tree == parent->child2))
+ || ((!(parent->split_horizontal)) && (tree == parent->child1)))
{
parent->split_pct = percentage;
}
@@ -1916,7 +1916,7 @@ gui_window_resize (struct t_gui_window *window, int percentage)
*/
void
-gui_window_resize_delta (struct t_gui_window *window, int delta_percentage)
+gui_window_resize_delta (struct t_gui_window_tree *tree, int delta_percentage)
{
struct t_gui_window_tree *parent;
int old_split_pct, add_bottom, add_top, add_left, add_right;
@@ -1924,12 +1924,12 @@ gui_window_resize_delta (struct t_gui_window *window, int delta_percentage)
if (!gui_init_ok)
return;
- parent = window->ptr_tree->parent_node;
+ parent = tree->parent_node;
if (parent)
{
old_split_pct = parent->split_pct;
- if (((parent->split_horizontal) && (window->ptr_tree == parent->child2))
- || ((!(parent->split_horizontal)) && (window->ptr_tree == parent->child1)))
+ if (((parent->split_horizontal) && (tree == parent->child2))
+ || ((!(parent->split_horizontal)) && (tree == parent->child1)))
{
parent->split_pct += delta_percentage;
}
diff --git a/src/gui/gui-window.c b/src/gui/gui-window.c
index 4f361aadd..5713125b1 100644
--- a/src/gui/gui-window.c
+++ b/src/gui/gui-window.c
@@ -344,6 +344,27 @@ gui_window_tree_free (struct t_gui_window_tree **tree)
}
/*
+ * Searches a parent window which is split on the given direction
+ * ('h' or 'v').
+ */
+
+struct t_gui_window_tree *
+gui_window_tree_get_split (struct t_gui_window_tree *tree,
+ char direction)
+{
+ if (!tree->parent_node)
+ return tree;
+
+ if (((tree->parent_node->split_horizontal) && (direction == 'h'))
+ || (!(tree->parent_node->split_horizontal) && (direction == 'v')))
+ {
+ return tree;
+ }
+
+ return gui_window_tree_get_split (tree->parent_node, direction);
+}
+
+/*
* Searches for a scroll with buffer pointer.
*
* Returns pointer to window scroll, NULL if not found.
diff --git a/src/gui/gui-window.h b/src/gui/gui-window.h
index cf4452866..61b872ff8 100644
--- a/src/gui/gui-window.h
+++ b/src/gui/gui-window.h
@@ -146,6 +146,8 @@ extern int gui_window_tree_init (struct t_gui_window *window);
extern void gui_window_tree_node_to_leaf (struct t_gui_window_tree *node,
struct t_gui_window *window);
extern void gui_window_tree_free (struct t_gui_window_tree **tree);
+extern struct t_gui_window_tree *gui_window_tree_get_split (struct t_gui_window_tree *tree,
+ char direction);
extern void gui_window_scroll_switch (struct t_gui_window *window,
struct t_gui_buffer *buffer);
extern void gui_window_scroll_remove_buffer (struct t_gui_window *window,
@@ -226,8 +228,8 @@ extern struct t_gui_window *gui_window_split_horizontal (struct t_gui_window *wi
int percentage);
extern struct t_gui_window *gui_window_split_vertical (struct t_gui_window *window,
int percentage);
-extern void gui_window_resize (struct t_gui_window *window, int percentage);
-extern void gui_window_resize_delta (struct t_gui_window *window,
+extern void gui_window_resize (struct t_gui_window_tree *tree, int percentage);
+extern void gui_window_resize_delta (struct t_gui_window_tree *tree,
int delta_percentage);
extern int gui_window_merge (struct t_gui_window *window);
extern void gui_window_merge_all (struct t_gui_window *window);