15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gtk/tabs/drag_data.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/gtk/tabs/tab_gtk.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DraggedTabData::DraggedTabData() 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : tab_(NULL), 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_(NULL), 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_delegate_(NULL), 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_model_index_(-1), 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pinned_(false), 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mini_(false) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DraggedTabData::DraggedTabData(TabGtk* tab, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* contents, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContentsDelegate* original_delegate, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int source_model_index, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pinned, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool mini) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : tab_(tab), 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_(contents), 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) original_delegate_(original_delegate), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_model_index_(source_model_index), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pinned_(pinned), 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mini_(mini) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DraggedTabData::~DraggedTabData() { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DraggedTabData::ResetDelegate() { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->SetDelegate(original_delegate_); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DragData::DragData(std::vector<DraggedTabData> drag_data, int source_tab_index) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : drag_data_(drag_data), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_tab_index_(source_tab_index), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_mini_tab_count_(0), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mini_tab_count_(0) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetNumberOfMiniNonMiniTabs(0, drag_data_.size(), 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &mini_tab_count_, &non_mini_tab_count_); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DragData::~DragData() { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::vector<TabGtk*> DragData::GetDraggedTabs() const { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<TabGtk*> tabs; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < drag_data_.size(); ++i) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (drag_data_[i].tab_) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabs.push_back(drag_data_[i].tab_); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tabs; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::vector<WebContents*> DragData::GetDraggedTabsContents() const { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<WebContents*> web_contentses; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < drag_data_.size(); ++i) { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (drag_data_[i].contents_) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contentses.push_back(drag_data_[i].contents_); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return web_contentses; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DragData::GetNumberOfMiniNonMiniTabs( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int from, int to, int* mini, int* non_mini) const { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(to <= static_cast<int>(drag_data_.size())); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *mini = 0; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *non_mini = 0; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = from; i < to; ++i) { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (drag_data_[i].mini_) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*mini)++; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (*non_mini)++; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int DragData::GetAddTypesForDraggedTabAt(size_t index) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int add_types = TabStripModel::ADD_NONE; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (get(index)->pinned_) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_types |= TabStripModel::ADD_PINNED; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (static_cast<int>(index) == source_tab_index_) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_types |= TabStripModel::ADD_ACTIVE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return add_types; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContents* DragData::GetSourceWebContents() { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetSourceTabData()->contents_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DraggedTabData* DragData::GetSourceTabData() { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get(source_tab_index_); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 104