diff --git a/src/app/browser.rs b/src/app/browser.rs index fa5acf2b..6369246d 100644 --- a/src/app/browser.rs +++ b/src/app/browser.rs @@ -120,7 +120,7 @@ impl Browser { action_tab_append.connect_activate({ let window = window.clone(); move |_, _| { - window.tab_append(); + window.tab_append(None); } }); diff --git a/src/app/browser/window.rs b/src/app/browser/window.rs index 4caca2d6..ea964386 100644 --- a/src/app/browser/window.rs +++ b/src/app/browser/window.rs @@ -74,8 +74,8 @@ impl Window { } // Actions - pub fn tab_append(&self) { - self.tab.append(); + pub fn tab_append(&self, position: Option<i32>) { + self.tab.append(position); } pub fn tab_page_navigation_base(&self) { diff --git a/src/app/browser/window/tab.rs b/src/app/browser/window/tab.rs index 5fb0f337..c703449a 100644 --- a/src/app/browser/window/tab.rs +++ b/src/app/browser/window/tab.rs @@ -98,6 +98,10 @@ impl Tab { action_tab_page_navigation_reload.clone(), action_update.clone(), // Options + match gobject.selected_page() { + Some(page) => Some(gobject.page_position(&page) + 1), + None => None, + }, false, false, ); @@ -133,7 +137,7 @@ impl Tab { } // Actions - pub fn append(&self) -> Arc<Item> { + pub fn append(&self, position: Option<i32>) -> Arc<Item> { // Init new tab item let item = Item::new_arc( self.gobject(), @@ -146,6 +150,7 @@ impl Tab { self.action_tab_page_navigation_reload.clone(), self.action_update.clone(), // Options + position, false, true, ); @@ -328,7 +333,7 @@ impl Tab { pub fn init(&self) { // Append just one blank page if no tabs available after last session restore if self.index.borrow().is_empty() { - self.append(); + self.append(None); } // @TODO other/child features.. diff --git a/src/app/browser/window/tab/item.rs b/src/app/browser/window/tab/item.rs index 3d4ebe8a..b61fb602 100644 --- a/src/app/browser/window/tab/item.rs +++ b/src/app/browser/window/tab/item.rs @@ -35,6 +35,7 @@ impl Item { action_tab_page_navigation_reload: Arc<SimpleAction>, action_update: Arc<SimpleAction>, // Options + position: Option<i32>, is_pinned: bool, is_selected: bool, ) -> Arc<Self> { @@ -58,6 +59,7 @@ impl Item { tab_view, page.gobject(), None, + position, is_pinned, is_selected, ); // @TODO @@ -149,6 +151,7 @@ impl Item { action_tab_page_navigation_reload.clone(), action_update.clone(), // Options + None, record.is_pinned, record.is_selected, ); diff --git a/src/app/browser/window/tab/item/widget.rs b/src/app/browser/window/tab/item/widget.rs index 00c7dee4..a9147c12 100644 --- a/src/app/browser/window/tab/item/widget.rs +++ b/src/app/browser/window/tab/item/widget.rs @@ -20,10 +20,14 @@ impl Widget { tab_view: &TabView, page: &Box, title: Option<&str>, + position: Option<i32>, is_pinned: bool, is_selected: bool, ) -> Arc<Self> { - let gobject = tab_view.append(page); + let gobject = match position { + Some(number) => tab_view.insert(page, number), + None => tab_view.append(page), + }; gobject.set_keyword(keyword);