summaryrefslogtreecommitdiffstats
path: root/src/notebook.c
diff options
context:
space:
mode:
authorPatrick McDermott <pj@pehjota.net>2017-10-23 04:43:09 (EDT)
committer Patrick McDermott <pj@pehjota.net>2017-10-23 04:43:09 (EDT)
commitad8f6a1b17a145f6465a3ffbd4e5b71ff1de2fff (patch)
tree05f6aaeea322e435f7974a9aff229defc2ceb245 /src/notebook.c
parent8379d082bcde9afdc614a89a3b15cd938c6dc47c (diff)
downloadmarquee-ad8f6a1b17a145f6465a3ffbd4e5b71ff1de2fff.zip
marquee-ad8f6a1b17a145f6465a3ffbd4e5b71ff1de2fff.tar.gz
marquee-ad8f6a1b17a145f6465a3ffbd4e5b71ff1de2fff.tar.bz2
mq_notebook_insert_*(): New functions
Diffstat (limited to 'src/notebook.c')
-rw-r--r--src/notebook.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/notebook.c b/src/notebook.c
index 01b4666..cc9a17e 100644
--- a/src/notebook.c
+++ b/src/notebook.c
@@ -41,6 +41,7 @@ struct _MqNotebook {
GtkNotebook parent_instance;
MqWindow *window;
MqTabTree *tree;
+ MqTabTree *found_node;
};
enum {
@@ -132,3 +133,77 @@ mq_notebook_new(MqWindow *window)
"window", window,
NULL);
}
+
+static gboolean
+find_node_compare(MqTree *node, va_list ap)
+{
+ MqNotebook *notebook;
+ MqTabPage *page;
+
+ notebook = va_arg(ap, MqNotebook *);
+ page = va_arg(ap, MqTabPage *);
+
+ if (MQ_TAB_TREE(node)->page == page) {
+ notebook->found_node = MQ_TAB_TREE(node);
+ return MQ_TREE_STOP;
+ } else {
+ return MQ_TREE_CONTINUE;
+ }
+}
+
+static void
+find_node(MqNotebook *notebook, MqTabPage *page)
+{
+ notebook->found_node = NULL;
+ mq_tree_foreach(MQ_TREE(notebook->tree), find_node_compare, notebook,
+ page);
+ g_assert(notebook->found_node);
+}
+
+static void
+insert_page(MqNotebook *notebook, MqTabTree *node, const gchar *uri)
+{
+ node->page = mq_tab_page_new(notebook->window, uri);
+ node->label = mq_tab_page_get_label(node->page);
+
+ gtk_notebook_insert_page(GTK_NOTEBOOK(notebook),
+ GTK_WIDGET(node->page), GTK_WIDGET(node->label),
+ MQ_TREE(node)->position - 1);
+ gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook),
+ GTK_WIDGET(node->page),
+ TRUE);
+ gtk_notebook_set_tab_detachable(GTK_NOTEBOOK(notebook),
+ GTK_WIDGET(node->page), TRUE);
+ gtk_widget_show_all(GTK_WIDGET(node->page));
+ gtk_widget_show_all(GTK_WIDGET(node->label));
+}
+
+void
+mq_notebook_insert_sibling(MqNotebook *notebook, const gchar *uri,
+ MqTabPage *sibling)
+{
+ MqTabTree *node;
+
+ find_node(notebook, sibling);
+ node = MQ_TAB_TREE(mq_tree_insert_sibling_allocated(
+ MQ_TREE(g_new0(MqTabTree, 1)),
+ MQ_TREE(notebook->found_node),
+ NULL));
+
+ insert_page(notebook, node, uri);
+}
+
+void
+mq_notebook_insert_child(MqNotebook *notebook, const gchar *uri,
+ MqTabPage *child)
+{
+ MqTabTree *node;
+
+ find_node(notebook, child);
+ node = MQ_TAB_TREE(mq_tree_insert_child_allocated(
+ MQ_TREE(g_new0(MqTabTree, 1)),
+ MQ_TREE(notebook->found_node),
+ NULL));
+
+ insert_page(notebook, node, uri);
+}