Open related tabs in a tab stack – Vivaldi Browser snapshot 1400.4


  • Vivaldi Team

    For the first post-2.2 snapshot we introduce a new tab opening option for tab stacking fans

    Click here to see the full blog post



  • new toys? Thanks!



  • @lonm: Confirm Close closes undocked dev tools windows (VB-47402)



  • @lonm: I see that the bookmarks page can't be opened from the start page. I haven't reported a bug for that as it seems pretty obvious, has anyone spotted that already?



  • @LonM Nope, maybe a problem on your end. Bookmarks/History page opens as usual from startpage.



  • @lonm: Opening settings when it is already open gives it an incorrect title (VB-47403)



  • @luetage: It just gives me a blank page. With the following error in the console:

    vendor-bundle.js:378 RangeError: Maximum call stack size exceeded
       at Object (<anonymous>)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
    vi @ vendor-bundle.js:378
    Ti.i.function.i.componentDidCatch.n.callback @ vendor-bundle.js:378
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:51.964 vendor-bundle.js:378 RangeError: Maximum call stack size exceeded
       at Object (<anonymous>)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
    vi @ vendor-bundle.js:378
    Ti.i.function.i.componentDidCatch.n.callback @ vendor-bundle.js:378
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    So @ vendor-bundle.js:378
    Zi @ vendor-bundle.js:378
    enqueueSetState @ vendor-bundle.js:378
    k.setState @ vendor-bundle.js:363
    handleLoadStart.e @ bundle.js:1
    GuestViewContainer.dispatchEvent @ extensions::guestViewContainer:155
    (anonymous) @ extensions::guestViewEvents:129
    (anonymous) @ extensions::guestViewEvents:189
    EventImpl.dispatchToListener @ extensions::event_bindings:403
    publicClassPrototype.(anonymous function) @ extensions::utils:138
    EventImpl.dispatch_ @ extensions::event_bindings:387
    dispatchArgs @ extensions::event_bindings:260
    dispatchEvent @ extensions::event_bindings:269
    15:54:51.996 extensions::webView:216 <webview>: Script cannot be injected into content until the page has loaded.
    WebViewImpl.executeCode @ extensions::webView:216
    WebViewElement.executeScript @ extensions::webViewElement:38
    injectScripts.e @ bundle.js:1
    _ @ background-common-bundle.js:1
    (anonymous) @ background-common-bundle.js:1
    k @ background-common-bundle.js:1
    handleLoadCommit.t @ bundle.js:1
    GuestViewContainer.dispatchEvent @ extensions::guestViewContainer:155
    WebViewEvents.handleLoadCommitEvent @ extensions::webViewEvents:311
    (anonymous) @ extensions::guestViewEvents:117
    (anonymous) @ extensions::guestViewEvents:189
    EventImpl.dispatchToListener @ extensions::event_bindings:403
    publicClassPrototype.(anonymous function) @ extensions::utils:138
    EventImpl.dispatch_ @ extensions::event_bindings:387
    dispatchArgs @ extensions::event_bindings:260
    dispatchEvent @ extensions::event_bindings:269
    15:54:52.013 bundle.js:1 Uncaught TypeError: Cannot read property 'getSelectedItem' of undefined
       at Object.getSelectedItem (bundle.js:1)
       at e.nextTick (bundle.js:1)
       at p.run (background-common-bundle.js:1)
       at f (background-common-bundle.js:1)
    getSelectedItem @ bundle.js:1
    e.nextTick @ bundle.js:1
    p.run @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    o.nextTick @ background-common-bundle.js:1
    UNSAFE_componentWillReceiveProps.setState @ bundle.js:1
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:52.039 bundle.js:1 Uncaught TypeError: Cannot read property 'getSelectedItem' of undefined
       at Object.getSelectedItem (bundle.js:1)
       at e.nextTick (bundle.js:1)
       at p.run (background-common-bundle.js:1)
       at f (background-common-bundle.js:1)
       at h (background-common-bundle.js:1)
    getSelectedItem @ bundle.js:1
    e.nextTick @ bundle.js:1
    p.run @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    h @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    o.nextTick @ background-common-bundle.js:1
    UNSAFE_componentWillReceiveProps.setState @ bundle.js:1
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:52.047 bundle.js:1 Uncaught TypeError: Cannot read property 'getPageHistory' of null
       at Object.setRewindInfo (bundle.js:1)
       at t.isTopLevel.webview.e.nextTick (bundle.js:1)
       at p.run (background-common-bundle.js:1)
       at f (background-common-bundle.js:1)
       at h (background-common-bundle.js:1)
    setRewindInfo @ bundle.js:1
    t.isTopLevel.webview.e.nextTick @ bundle.js:1
    p.run @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    h @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    h @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    o.nextTick @ background-common-bundle.js:1
    UNSAFE_componentWillReceiveProps.setState @ bundle.js:1
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:52.175 vendor-bundle.js:378 RangeError: Maximum call stack size exceeded
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
       at n (background-common-bundle.js:1)
    vi @ vendor-bundle.js:378
    Ti.i.function.i.componentDidCatch.n.callback @ vendor-bundle.js:378
    da @ vendor-bundle.js:378
    ca @ vendor-bundle.js:378
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    So @ vendor-bundle.js:378
    Zi @ vendor-bundle.js:378
    enqueueSetState @ vendor-bundle.js:378
    k.setState @ vendor-bundle.js:363
    _onPageStoreChange @ bundle.js:1
    n.emit @ vendor-bundle.js:98
    Object.assign.delayedEmitChange.Object @ bundle.js:1
    _ @ background-common-bundle.js:1
    b @ background-common-bundle.js:1
    m @ background-common-bundle.js:1
    setTimeout (async)
    m @ background-common-bundle.js:1
    setTimeout (async)
    m @ background-common-bundle.js:1
    setTimeout (async)
    (anonymous) @ background-common-bundle.js:1
    k @ background-common-bundle.js:1
    emitChange @ bundle.js:1
    ve @ bundle.js:1
    z.dispatchToken.h.a.register.t @ bundle.js:1
    e._invokeCallback @ vendor-bundle.js:355
    e.dispatch @ vendor-bundle.js:355
    dispatch @ bundle.js:1
    Promise @ bundle.js:1
    openURL @ bundle.js:1
    openSection @ bundle.js:1
    (anonymous) @ vendor-bundle.js:378
    f @ vendor-bundle.js:378
    (anonymous) @ vendor-bundle.js:378
    M @ vendor-bundle.js:378
    D @ vendor-bundle.js:378
    T @ vendor-bundle.js:378
    E @ vendor-bundle.js:378
    xn @ vendor-bundle.js:378
    Yo @ vendor-bundle.js:378
    Ne @ vendor-bundle.js:378
    Dn @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:52.189 bundle.js:1 Uncaught TypeError: Cannot read property 'getSelectedItem' of undefined
       at Object.getSelectedItem (bundle.js:1)
       at e.nextTick (bundle.js:1)
       at p.run (background-common-bundle.js:1)
       at f (background-common-bundle.js:1)
    getSelectedItem @ bundle.js:1
    e.nextTick @ bundle.js:1
    p.run @ background-common-bundle.js:1
    f @ background-common-bundle.js:1
    setTimeout (async)
    s @ background-common-bundle.js:1
    o.nextTick @ background-common-bundle.js:1
    componentDidMount @ bundle.js:1
    jo @ vendor-bundle.js:378
    Po @ vendor-bundle.js:378
    Co @ vendor-bundle.js:378
    So @ vendor-bundle.js:378
    Zi @ vendor-bundle.js:378
    enqueueSetState @ vendor-bundle.js:378
    k.setState @ vendor-bundle.js:363
    _onPageStoreChange @ bundle.js:1
    n.emit @ vendor-bundle.js:98
    Object.assign.delayedEmitChange.Object @ bundle.js:1
    _ @ background-common-bundle.js:1
    b @ background-common-bundle.js:1
    m @ background-common-bundle.js:1
    setTimeout (async)
    m @ background-common-bundle.js:1
    setTimeout (async)
    m @ background-common-bundle.js:1
    setTimeout (async)
    (anonymous) @ background-common-bundle.js:1
    k @ background-common-bundle.js:1
    emitChange @ bundle.js:1
    ve @ bundle.js:1
    z.dispatchToken.h.a.register.t @ bundle.js:1
    e._invokeCallback @ vendor-bundle.js:355
    e.dispatch @ vendor-bundle.js:355
    dispatch @ bundle.js:1
    Promise @ bundle.js:1
    openURL @ bundle.js:1
    openSection @ bundle.js:1
    (anonymous) @ vendor-bundle.js:378
    f @ vendor-bundle.js:378
    (anonymous) @ vendor-bundle.js:378
    M @ vendor-bundle.js:378
    D @ vendor-bundle.js:378
    T @ vendor-bundle.js:378
    E @ vendor-bundle.js:378
    xn @ vendor-bundle.js:378
    Yo @ vendor-bundle.js:378
    Ne @ vendor-bundle.js:378
    Dn @ vendor-bundle.js:378
    Ro @ vendor-bundle.js:378
    On @ vendor-bundle.js:378
    15:54:55.275 bundle.js:1 Uncaught TypeError: Cannot read property 'getThumbnail' of null
       at r (bundle.js:1)
    

    Strangely opening a new window, it works fine.



  • Great feature. And thanks for enabled MHTML.



  • Nice feature, than you ! What we miss now is the ability to expand stacks like in Opera 12, because right now navigating within tab stacks easely becomes a mess.



  • What counts as a "related tab"?

    For example,

    • opening a link from a web panel in a new tab counts as being "related" to the current one
    • but opening a link from the current page in a background tab using a mouse gesture is not "related"
    • then, opening a link in a background tab using the context menu is "related".


  • Another unmentioned feature - 'Show Exit Confirmation Dialog'.


  • Moderator

    @Profi was mentioned in blog:

    Changelog

    [New][Windows][Linux] Add confirmation dialog on exit (VB-6951)



  • I was hoping for M3 in early 2019



  • On the other hand, now the flag
    chrome://flags/#save-page-as-mhtml
    is always ignored and considered always enabled.
    I had it enabled because "why not", but I suspect someone could complain they don't want that option because, I dunno, they don't want 3 options while saving, for example 🙂



  • @LonM I don't understand how it's supposed to work either. For me a link is always opened in a new tab, or the same tab, regardless of this new setting.
    It's supposed to transform a single tab to a tabstack of 2 tabs?



  • Thanks, that is a helpful addition however it would make more sense to me that every new opened tab from the same domain would be added to the same (already opened) stack automatically and not open a new stack.
    Also, wouldn't it be also helpful if SD folders would open too in a tab stack? (right-click menu)

    Some issue I noticed, too often when I left-click a Speed Dial folder the "Add Bookmark to SD" popup comes up.

    P.S. While you are at tabs management, please address those issues:

    1. Tab stacks are very hard to be created by draging tabs onto each other, it should respond much snapier/fluider/faster.
    2. Stack thumbnail view should not be closed when you close a tab of a stack, in order to conveniently close others too.
    3. Thumbnail area of the stack thumbnails should be able to be middle-clicked to close as well. (searching for 'x' adds too much hassle)
    4. Context entry "Close tabs by host" to close all tabs of the same domain convenientely.


  • I had the UI hidden before updating and now the shortcut to show it won't work. I can show the tab bar via Settings, but the Toggle UI option doesn't do anything anymore.


  • Moderator

    The Confirm Exit dialogue should use the current Theme colours.



  • @saudiqbal: Many people were expecting world peace, so get over it.



  • And please, please return focus to page after bookmarking.


Locked
 

Looks like your connection to Vivaldi Forum was lost, please wait while we try to reconnect.