diff --git a/debian/libhandy-1-0.symbols b/debian/libhandy-1-0.symbols
index c2af72f8116886e94dcd8b6265e7ae6164397105..a3c866f0ab6fbd597d66b19afff2d1bef1422ad1 100644
--- a/debian/libhandy-1-0.symbols
+++ b/debian/libhandy-1-0.symbols
@@ -356,6 +356,10 @@ libhandy-1.so.0 libhandy-1-0 #MINVER#
hdy_tab_bar_set_inverted@LIBHANDY_1_0 1.2.0
hdy_tab_bar_set_start_action_widget@LIBHANDY_1_0 1.2.0
hdy_tab_bar_set_view@LIBHANDY_1_0 1.2.0
+ hdy_tab_button_get_type@LIBHANDY_1_0 1.4.0
+ hdy_tab_button_get_view@LIBHANDY_1_0 1.4.0
+ hdy_tab_button_new@LIBHANDY_1_0 1.4.0
+ hdy_tab_button_set_view@LIBHANDY_1_0 1.4.0
hdy_tab_page_get_child@LIBHANDY_1_0 1.2.0
hdy_tab_page_get_icon@LIBHANDY_1_0 1.2.0
hdy_tab_page_get_loading@LIBHANDY_1_0 1.2.0
@@ -375,6 +379,13 @@ libhandy-1.so.0 libhandy-1-0 #MINVER#
hdy_tab_page_set_indicator_icon@LIBHANDY_1_0 1.2.0
hdy_tab_page_set_title@LIBHANDY_1_0 1.2.0
hdy_tab_page_set_tooltip@LIBHANDY_1_0 1.2.0
+ hdy_tab_switcher_close@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_get_narrow@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_get_type@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_get_view@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_open@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_new@LIBHANDY_1_0 1.4.0
+ hdy_tab_switcher_set_view@LIBHANDY_1_0 1.4.0
hdy_tab_view_add_page@LIBHANDY_1_0 1.2.0
hdy_tab_view_append@LIBHANDY_1_0 1.2.0
hdy_tab_view_append_pinned@LIBHANDY_1_0 1.2.0
diff --git a/doc/handy-docs.xml b/doc/handy-docs.xml
index bd8cba416b65013a77bf7a4bd09da67b1ad95720..b256f9fc827c260db559c0c19ae4f57738b40763 100644
--- a/doc/handy-docs.xml
+++ b/doc/handy-docs.xml
@@ -64,6 +64,8 @@
+
+
@@ -141,6 +143,11 @@
+
+ Index of new symbols in 1.4
+
+
+
Annotations glossary
diff --git a/doc/meson.build b/doc/meson.build
index e8dcf1a661234f98e07de6758726498662ee6a87..4f9bfefeabf0b0cbee6c4fd9c006d72ea9c93585 100644
--- a/doc/meson.build
+++ b/doc/meson.build
@@ -21,10 +21,12 @@ private_headers = [
'hdy-preferences-page-private.h',
'hdy-shadow-helper-private.h',
'hdy-stackable-box-private.h',
+ 'hdy-swipe-away-bin-private.h',
'hdy-swipe-tracker-private.h',
'hdy-tab-private.h',
'hdy-tab-bar-private.h',
'hdy-tab-box-private.h',
+ 'hdy-tab-switcher-row-private.h',
'hdy-tab-view-private.h',
'hdy-types.h',
'hdy-view-switcher-button-private.h',
diff --git a/examples/hdy-tab-view-demo-window.c b/examples/hdy-tab-view-demo-window.c
index 7f4f46e38b67b88611bf7a63465b973c2654cac7..fe59cc9f06bea5364a8253b18ee630c7f2619a80 100644
--- a/examples/hdy-tab-view-demo-window.c
+++ b/examples/hdy-tab-view-demo-window.c
@@ -7,6 +7,7 @@ struct _HdyTabViewDemoWindow
HdyWindow parent_instance;
HdyTabView *view;
HdyTabBar *tab_bar;
+ HdyTabSwitcher *tab_switcher;
GActionMap *tab_action_group;
@@ -117,6 +118,16 @@ tab_new (GSimpleAction *action,
next_page++;
}
+static void
+tab_switcher (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ HdyTabViewDemoWindow *self = HDY_TAB_VIEW_DEMO_WINDOW (user_data);
+
+ hdy_tab_switcher_open (self->tab_switcher);
+}
+
static HdyTabPage *
get_current_page (HdyTabViewDemoWindow *self)
{
@@ -315,6 +326,7 @@ tab_duplicate (GSimpleAction *action,
static GActionEntry action_entries[] = {
{ "window-new", window_new },
{ "tab-new", tab_new },
+ { "tab-switcher", tab_switcher },
};
static GActionEntry tab_action_entries[] = {
@@ -462,6 +474,12 @@ extra_drag_data_received_cb (HdyTabViewDemoWindow *self,
hdy_tab_page_set_title (page, text);
}
+static void
+new_tab_cb (HdyTabViewDemoWindow *self)
+{
+ tab_new (NULL, NULL, self);
+}
+
static void
hdy_tab_view_demo_window_class_init (HdyTabViewDemoWindowClass *klass)
{
@@ -470,11 +488,13 @@ hdy_tab_view_demo_window_class_init (HdyTabViewDemoWindowClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/sm/puri/Handy/Demo/ui/hdy-tab-view-demo-window.ui");
gtk_widget_class_bind_template_child (widget_class, HdyTabViewDemoWindow, view);
gtk_widget_class_bind_template_child (widget_class, HdyTabViewDemoWindow, tab_bar);
+ gtk_widget_class_bind_template_child (widget_class, HdyTabViewDemoWindow, tab_switcher);
gtk_widget_class_bind_template_callback (widget_class, page_detached_cb);
gtk_widget_class_bind_template_callback (widget_class, setup_menu_cb);
gtk_widget_class_bind_template_callback (widget_class, create_window_cb);
gtk_widget_class_bind_template_callback (widget_class, indicator_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, extra_drag_data_received_cb);
+ gtk_widget_class_bind_template_callback (widget_class, new_tab_cb);
}
static void
diff --git a/examples/hdy-tab-view-demo-window.ui b/examples/hdy-tab-view-demo-window.ui
index e6a5aece824177e2d749eeeb59d4b5db1f1693f8..61013a8dde0c80c76c04519dcc46bd8947ee85b8 100644
--- a/examples/hdy-tab-view-demo-window.ui
+++ b/examples/hdy-tab-view-demo-window.ui
@@ -8,61 +8,85 @@
800
600
-