Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: chrome/browser/gtk/tabs/tab_strip_gtk.cc

Issue 2345002: GTK: More signal macro usage. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/gtk/tabs/tab_strip_gtk.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/gtk/tabs/tab_strip_gtk.h" 5 #include "chrome/browser/gtk/tabs/tab_strip_gtk.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/gtk_dnd_util.h" 9 #include "app/gtk_dnd_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 gtk_drag_dest_set(tabstrip_.get(), GTK_DEST_DEFAULT_ALL, 730 gtk_drag_dest_set(tabstrip_.get(), GTK_DEST_DEFAULT_ALL,
731 NULL, 0, 731 NULL, 0,
732 static_cast<GdkDragAction>( 732 static_cast<GdkDragAction>(
733 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK)); 733 GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK));
734 static const int targets[] = { gtk_dnd_util::TEXT_URI_LIST, 734 static const int targets[] = { gtk_dnd_util::TEXT_URI_LIST,
735 gtk_dnd_util::NETSCAPE_URL, 735 gtk_dnd_util::NETSCAPE_URL,
736 -1 }; 736 -1 };
737 gtk_dnd_util::SetDestTargetList(tabstrip_.get(), targets); 737 gtk_dnd_util::SetDestTargetList(tabstrip_.get(), targets);
738 738
739 g_signal_connect(tabstrip_.get(), "expose-event", 739 g_signal_connect(tabstrip_.get(), "expose-event",
740 G_CALLBACK(OnExpose), this); 740 G_CALLBACK(OnExposeThunk), this);
741 g_signal_connect(tabstrip_.get(), "size-allocate", 741 g_signal_connect(tabstrip_.get(), "size-allocate",
742 G_CALLBACK(OnSizeAllocate), this); 742 G_CALLBACK(OnSizeAllocateThunk), this);
743 g_signal_connect(tabstrip_.get(), "drag-motion", 743 g_signal_connect(tabstrip_.get(), "drag-motion",
744 G_CALLBACK(OnDragMotion), this); 744 G_CALLBACK(OnDragMotionThunk), this);
745 g_signal_connect(tabstrip_.get(), "drag-drop", 745 g_signal_connect(tabstrip_.get(), "drag-drop",
746 G_CALLBACK(OnDragDrop), this); 746 G_CALLBACK(OnDragDropThunk), this);
747 g_signal_connect(tabstrip_.get(), "drag-leave", 747 g_signal_connect(tabstrip_.get(), "drag-leave",
748 G_CALLBACK(OnDragLeave), this); 748 G_CALLBACK(OnDragLeaveThunk), this);
749 g_signal_connect(tabstrip_.get(), "drag-data-received", 749 g_signal_connect(tabstrip_.get(), "drag-data-received",
750 G_CALLBACK(OnDragDataReceived), this); 750 G_CALLBACK(OnDragDataReceivedThunk), this);
751 751
752 newtab_button_.reset(MakeNewTabButton()); 752 newtab_button_.reset(MakeNewTabButton());
753 753
754 gtk_widget_show_all(tabstrip_.get()); 754 gtk_widget_show_all(tabstrip_.get());
755 755
756 bounds_ = GetInitialWidgetBounds(tabstrip_.get()); 756 bounds_ = GetInitialWidgetBounds(tabstrip_.get());
757 757
758 if (drop_indicator_width == 0) { 758 if (drop_indicator_width == 0) {
759 // Direction doesn't matter, both images are the same size. 759 // Direction doesn't matter, both images are the same size.
760 GdkPixbuf* drop_image = GetDropArrowImage(true); 760 GdkPixbuf* drop_image = GetDropArrowImage(true);
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1637 drop_before(drop_before), 1637 drop_before(drop_before),
1638 point_down(point_down) { 1638 point_down(point_down) {
1639 CreateContainer(); 1639 CreateContainer();
1640 drop_arrow = GetDropArrowImage(point_down); 1640 drop_arrow = GetDropArrowImage(point_down);
1641 } 1641 }
1642 1642
1643 TabStripGtk::DropInfo::~DropInfo() { 1643 TabStripGtk::DropInfo::~DropInfo() {
1644 DestroyContainer(); 1644 DestroyContainer();
1645 } 1645 }
1646 1646
1647 // static
1648 gboolean TabStripGtk::DropInfo::OnExposeEvent(GtkWidget* widget, 1647 gboolean TabStripGtk::DropInfo::OnExposeEvent(GtkWidget* widget,
1649 GdkEventExpose* event, 1648 GdkEventExpose* event) {
1650 DropInfo* drop_info) {
1651 if (gtk_util::IsScreenComposited()) { 1649 if (gtk_util::IsScreenComposited()) {
1652 drop_info->SetContainerTransparency(); 1650 SetContainerTransparency();
1653 } else { 1651 } else {
1654 drop_info->SetContainerShapeMask(); 1652 SetContainerShapeMask();
1655 } 1653 }
1656 1654
1657 gdk_pixbuf_render_to_drawable(drop_info->drop_arrow, 1655 gdk_pixbuf_render_to_drawable(drop_arrow,
1658 drop_info->container->window, 1656 container->window,
1659 0, 0, 0, 1657 0, 0, 0,
1660 0, 0, 1658 0, 0,
1661 drop_indicator_width, 1659 drop_indicator_width,
1662 drop_indicator_height, 1660 drop_indicator_height,
1663 GDK_RGB_DITHER_NONE, 0, 0); 1661 GDK_RGB_DITHER_NONE, 0, 0);
1664 1662
1665 return FALSE; 1663 return FALSE;
1666 } 1664 }
1667 1665
1668 // Sets the color map of the container window to allow the window to be 1666 // Sets the color map of the container window to allow the window to be
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 // Set the shape mask. 1717 // Set the shape mask.
1720 gdk_window_shape_combine_mask(container->window, pixmap, 0, 0); 1718 gdk_window_shape_combine_mask(container->window, pixmap, 0, 0);
1721 g_object_unref(pixmap); 1719 g_object_unref(pixmap);
1722 } 1720 }
1723 1721
1724 void TabStripGtk::DropInfo::CreateContainer() { 1722 void TabStripGtk::DropInfo::CreateContainer() {
1725 container = gtk_window_new(GTK_WINDOW_POPUP); 1723 container = gtk_window_new(GTK_WINDOW_POPUP);
1726 SetContainerColorMap(); 1724 SetContainerColorMap();
1727 gtk_widget_set_app_paintable(container, TRUE); 1725 gtk_widget_set_app_paintable(container, TRUE);
1728 g_signal_connect(container, "expose-event", 1726 g_signal_connect(container, "expose-event",
1729 G_CALLBACK(OnExposeEvent), this); 1727 G_CALLBACK(OnExposeEventThunk), this);
1730 gtk_widget_add_events(container, GDK_STRUCTURE_MASK); 1728 gtk_widget_add_events(container, GDK_STRUCTURE_MASK);
1731 gtk_window_move(GTK_WINDOW(container), 0, 0); 1729 gtk_window_move(GTK_WINDOW(container), 0, 0);
1732 gtk_window_resize(GTK_WINDOW(container), 1730 gtk_window_resize(GTK_WINDOW(container),
1733 drop_indicator_width, drop_indicator_height); 1731 drop_indicator_width, drop_indicator_height);
1734 gtk_widget_show_all(container); 1732 gtk_widget_show_all(container);
1735 } 1733 }
1736 1734
1737 void TabStripGtk::DropInfo::DestroyContainer() { 1735 void TabStripGtk::DropInfo::DestroyContainer() {
1738 if (GTK_IS_WIDGET(container)) 1736 if (GTK_IS_WIDGET(container))
1739 gtk_widget_destroy(container); 1737 gtk_widget_destroy(container);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 active_animation_.reset(NULL); 1818 active_animation_.reset(NULL);
1821 1819
1822 // Reset the animation state of each tab. 1820 // Reset the animation state of each tab.
1823 for (int i = 0, count = GetTabCount(); i < count; ++i) 1821 for (int i = 0, count = GetTabCount(); i < count; ++i)
1824 GetTabAt(i)->set_animating_mini_change(false); 1822 GetTabAt(i)->set_animating_mini_change(false);
1825 1823
1826 if (layout) 1824 if (layout)
1827 Layout(); 1825 Layout();
1828 } 1826 }
1829 1827
1830 // static 1828 gboolean TabStripGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event) {
1831 gboolean TabStripGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event,
1832 TabStripGtk* tabstrip) {
1833 if (gdk_region_empty(event->region)) 1829 if (gdk_region_empty(event->region))
1834 return TRUE; 1830 return TRUE;
1835 1831
1836 // If we're only repainting favicons, optimize the paint path and only draw 1832 // If we're only repainting favicons, optimize the paint path and only draw
1837 // the favicons. 1833 // the favicons.
1838 GdkRectangle* rects; 1834 GdkRectangle* rects;
1839 gint num_rects; 1835 gint num_rects;
1840 gdk_region_get_rectangles(event->region, &rects, &num_rects); 1836 gdk_region_get_rectangles(event->region, &rects, &num_rects);
1841 qsort(rects, num_rects, sizeof(GdkRectangle), CompareGdkRectangles); 1837 qsort(rects, num_rects, sizeof(GdkRectangle), CompareGdkRectangles);
1842 std::vector<int> tabs_to_repaint; 1838 std::vector<int> tabs_to_repaint;
1843 if (!tabstrip->IsDragSessionActive() && 1839 if (!IsDragSessionActive() &&
1844 tabstrip->CanPaintOnlyFavIcons(rects, num_rects, &tabs_to_repaint)) { 1840 CanPaintOnlyFavIcons(rects, num_rects, &tabs_to_repaint)) {
1845 tabstrip->PaintOnlyFavIcons(event, tabs_to_repaint); 1841 PaintOnlyFavIcons(event, tabs_to_repaint);
1846 g_free(rects); 1842 g_free(rects);
1847 return TRUE; 1843 return TRUE;
1848 } 1844 }
1849 g_free(rects); 1845 g_free(rects);
1850 1846
1851 // TODO(jhawkins): Ideally we'd like to only draw what's needed in the damage 1847 // TODO(jhawkins): Ideally we'd like to only draw what's needed in the damage
1852 // rect, but the tab widgets overlap each other, and painting on one widget 1848 // rect, but the tab widgets overlap each other, and painting on one widget
1853 // will cause an expose-event to be sent to the widgets underneath. The 1849 // will cause an expose-event to be sent to the widgets underneath. The
1854 // underlying widget does not need to be redrawn as we control the order of 1850 // underlying widget does not need to be redrawn as we control the order of
1855 // expose-events. Currently we hack it to redraw the entire tabstrip. We 1851 // expose-events. Currently we hack it to redraw the entire tabstrip. We
1856 // could change the damage rect to just contain the tabs + the new tab button. 1852 // could change the damage rect to just contain the tabs + the new tab button.
1857 event->area.x = 0; 1853 event->area.x = 0;
1858 event->area.y = 0; 1854 event->area.y = 0;
1859 event->area.width = tabstrip->bounds_.width(); 1855 event->area.width = bounds_.width();
1860 event->area.height = tabstrip->bounds_.height(); 1856 event->area.height = bounds_.height();
1861 gdk_region_union_with_rect(event->region, &event->area); 1857 gdk_region_union_with_rect(event->region, &event->area);
1862 1858
1863 // Paint the New Tab button. 1859 // Paint the New Tab button.
1864 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip->tabstrip_.get()), 1860 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip_.get()),
1865 tabstrip->newtab_button_->widget(), event); 1861 newtab_button_->widget(), event);
1866 1862
1867 // Paint the tabs in reverse order, so they stack to the left. 1863 // Paint the tabs in reverse order, so they stack to the left.
1868 TabGtk* selected_tab = NULL; 1864 TabGtk* selected_tab = NULL;
1869 int tab_count = tabstrip->GetTabCount(); 1865 int tab_count = GetTabCount();
1870 for (int i = tab_count - 1; i >= 0; --i) { 1866 for (int i = tab_count - 1; i >= 0; --i) {
1871 TabGtk* tab = tabstrip->GetTabAt(i); 1867 TabGtk* tab = GetTabAt(i);
1872 // We must ask the _Tab's_ model, not ourselves, because in some situations 1868 // We must ask the _Tab's_ model, not ourselves, because in some situations
1873 // the model will be different to this object, e.g. when a Tab is being 1869 // the model will be different to this object, e.g. when a Tab is being
1874 // removed after its TabContents has been destroyed. 1870 // removed after its TabContents has been destroyed.
1875 if (!tab->IsSelected()) { 1871 if (!tab->IsSelected()) {
1876 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip->tabstrip_.get()), 1872 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip_.get()),
1877 tab->widget(), event); 1873 tab->widget(), event);
1878 } else { 1874 } else {
1879 selected_tab = tab; 1875 selected_tab = tab;
1880 } 1876 }
1881 } 1877 }
1882 1878
1883 // Paint the selected tab last, so it overlaps all the others. 1879 // Paint the selected tab last, so it overlaps all the others.
1884 if (selected_tab) { 1880 if (selected_tab) {
1885 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip->tabstrip_.get()), 1881 gtk_container_propagate_expose(GTK_CONTAINER(tabstrip_.get()),
1886 selected_tab->widget(), event); 1882 selected_tab->widget(), event);
1887 } 1883 }
1888 1884
1889 return TRUE; 1885 return TRUE;
1890 } 1886 }
1891 1887
1892 // static 1888 void TabStripGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) {
1893 void TabStripGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation,
1894 TabStripGtk* tabstrip) {
1895 gfx::Rect bounds = gfx::Rect(allocation->x, allocation->y, 1889 gfx::Rect bounds = gfx::Rect(allocation->x, allocation->y,
1896 allocation->width, allocation->height); 1890 allocation->width, allocation->height);
1897 1891
1898 // Nothing to do if the bounds are the same. If we don't catch this, we'll 1892 // Nothing to do if the bounds are the same. If we don't catch this, we'll
1899 // get an infinite loop of size-allocate signals. 1893 // get an infinite loop of size-allocate signals.
1900 if (tabstrip->bounds_ == bounds) 1894 if (bounds_ == bounds)
1901 return; 1895 return;
1902 1896
1903 tabstrip->SetBounds(bounds); 1897 SetBounds(bounds);
1904 1898
1905 // No tabs, nothing to layout. This happens when a browser window is created 1899 // No tabs, nothing to layout. This happens when a browser window is created
1906 // and shown before tabs are added (as in a popup window). 1900 // and shown before tabs are added (as in a popup window).
1907 if (tabstrip->GetTabCount() == 0) 1901 if (GetTabCount() == 0)
1908 return; 1902 return;
1909 1903
1910 // Do a regular layout on the first configure-event so we don't animate 1904 // Do a regular layout on the first configure-event so we don't animate
1911 // the first tab. 1905 // the first tab.
1912 // TODO(jhawkins): Windows resizes the layout tabs continuously during 1906 // TODO(jhawkins): Windows resizes the layout tabs continuously during
1913 // a resize. I need to investigate which signal to watch in order to 1907 // a resize. I need to investigate which signal to watch in order to
1914 // reproduce this behavior. 1908 // reproduce this behavior.
1915 if (tabstrip->GetTabCount() == 1) 1909 if (GetTabCount() == 1)
1916 tabstrip->Layout(); 1910 Layout();
1917 else 1911 else
1918 tabstrip->ResizeLayoutTabs(); 1912 ResizeLayoutTabs();
1919 } 1913 }
1920 1914
1921 // static
1922 gboolean TabStripGtk::OnDragMotion(GtkWidget* widget, GdkDragContext* context, 1915 gboolean TabStripGtk::OnDragMotion(GtkWidget* widget, GdkDragContext* context,
1923 gint x, gint y, guint time, 1916 gint x, gint y, guint time) {
1924 TabStripGtk* tabstrip) { 1917 UpdateDropIndex(context, x, y);
1925 tabstrip->UpdateDropIndex(context, x, y);
1926 return TRUE; 1918 return TRUE;
1927 } 1919 }
1928 1920
1929 // static
1930 gboolean TabStripGtk::OnDragDrop(GtkWidget* widget, GdkDragContext* context, 1921 gboolean TabStripGtk::OnDragDrop(GtkWidget* widget, GdkDragContext* context,
1931 gint x, gint y, guint time, 1922 gint x, gint y, guint time) {
1932 TabStripGtk* tabstrip) { 1923 if (!drop_info_.get())
1933 if (!tabstrip->drop_info_.get())
1934 return FALSE; 1924 return FALSE;
1935 1925
1936 GdkAtom target = gtk_drag_dest_find_target(widget, context, NULL); 1926 GdkAtom target = gtk_drag_dest_find_target(widget, context, NULL);
1937 if (target != GDK_NONE) 1927 if (target != GDK_NONE)
1938 gtk_drag_finish(context, FALSE, FALSE, time); 1928 gtk_drag_finish(context, FALSE, FALSE, time);
1939 else 1929 else
1940 gtk_drag_get_data(widget, context, target, time); 1930 gtk_drag_get_data(widget, context, target, time);
1941 1931
1942 return TRUE; 1932 return TRUE;
1943 } 1933 }
1944 1934
1945 // static
1946 gboolean TabStripGtk::OnDragLeave(GtkWidget* widget, GdkDragContext* context, 1935 gboolean TabStripGtk::OnDragLeave(GtkWidget* widget, GdkDragContext* context,
1947 guint time, TabStripGtk* tabstrip) { 1936 guint time) {
1948 // Destroy the drop indicator. 1937 // Destroy the drop indicator.
1949 tabstrip->drop_info_->DestroyContainer(); 1938 drop_info_->DestroyContainer();
1950 return FALSE; 1939 return FALSE;
1951 } 1940 }
1952 1941
1953 // static
1954 gboolean TabStripGtk::OnDragDataReceived(GtkWidget* widget, 1942 gboolean TabStripGtk::OnDragDataReceived(GtkWidget* widget,
1955 GdkDragContext* context, 1943 GdkDragContext* context,
1956 gint x, gint y, 1944 gint x, gint y,
1957 GtkSelectionData* data, 1945 GtkSelectionData* data,
1958 guint info, guint time, 1946 guint info, guint time) {
1959 TabStripGtk* tabstrip) {
1960 bool success = false; 1947 bool success = false;
1961 1948
1962 if (info == gtk_dnd_util::TEXT_URI_LIST || 1949 if (info == gtk_dnd_util::TEXT_URI_LIST ||
1963 info == gtk_dnd_util::NETSCAPE_URL) { 1950 info == gtk_dnd_util::NETSCAPE_URL) {
1964 success = tabstrip->CompleteDrop(data->data); 1951 success = CompleteDrop(data->data);
1965 } 1952 }
1966 1953
1967 gtk_drag_finish(context, success, success, time); 1954 gtk_drag_finish(context, success, success, time);
1968 return TRUE; 1955 return TRUE;
1969 } 1956 }
1970 1957
1971 // static 1958 void TabStripGtk::OnNewTabClicked(GtkWidget* widget) {
1972 void TabStripGtk::OnNewTabClicked(GtkWidget* widget, TabStripGtk* tabstrip) {
1973 GdkEvent* event = gtk_get_current_event(); 1959 GdkEvent* event = gtk_get_current_event();
1974 DCHECK_EQ(event->type, GDK_BUTTON_RELEASE); 1960 DCHECK_EQ(event->type, GDK_BUTTON_RELEASE);
1975 int mouse_button = event->button.button; 1961 int mouse_button = event->button.button;
1976 gdk_event_free(event); 1962 gdk_event_free(event);
1977 1963
1978 switch (mouse_button) { 1964 switch (mouse_button) {
1979 case 1: 1965 case 1:
1980 tabstrip->model_->delegate()->AddBlankTab(true); 1966 model_->delegate()->AddBlankTab(true);
1981 break; 1967 break;
1982 case 2: { 1968 case 2: {
1983 // On middle-click, try to parse the PRIMARY selection as a URL and load 1969 // On middle-click, try to parse the PRIMARY selection as a URL and load
1984 // it instead of creating a blank page. 1970 // it instead of creating a blank page.
1985 GURL url; 1971 GURL url;
1986 if (!gtk_util::URLFromPrimarySelection(tabstrip->model_->profile(), &url)) 1972 if (!gtk_util::URLFromPrimarySelection(model_->profile(), &url))
1987 return; 1973 return;
1988 1974
1989 TabContents* contents = 1975 TabContents* contents =
1990 tabstrip->model_->delegate()->CreateTabContentsForURL( 1976 model_->delegate()->CreateTabContentsForURL(
1991 url, 1977 url,
1992 GURL(), // referrer 1978 GURL(), // referrer
1993 tabstrip->model_->profile(), 1979 model_->profile(),
1994 PageTransition::TYPED, 1980 PageTransition::TYPED,
1995 false, // defer_load 1981 false, // defer_load
1996 NULL); // instance 1982 NULL); // instance
1997 tabstrip->model_->AddTabContents( 1983 model_->AddTabContents(
1998 contents, 1984 contents,
1999 -1, // index 1985 -1, // index
2000 false, // force_index 1986 false, // force_index
2001 PageTransition::TYPED, 1987 PageTransition::TYPED,
2002 true); // foreground 1988 true); // foreground
2003 break; 1989 break;
2004 } 1990 }
2005 default: 1991 default:
2006 NOTREACHED() << "Got click on new tab button with unhandled mouse " 1992 NOTREACHED() << "Got click on new tab button with unhandled mouse "
2007 << "button " << mouse_button; 1993 << "button " << mouse_button;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2041 GetTabAt(tabs_to_paint[i])->PaintFavIconArea(event); 2027 GetTabAt(tabs_to_paint[i])->PaintFavIconArea(event);
2042 } 2028 }
2043 2029
2044 CustomDrawButton* TabStripGtk::MakeNewTabButton() { 2030 CustomDrawButton* TabStripGtk::MakeNewTabButton() {
2045 CustomDrawButton* button = new CustomDrawButton(IDR_NEWTAB_BUTTON, 2031 CustomDrawButton* button = new CustomDrawButton(IDR_NEWTAB_BUTTON,
2046 IDR_NEWTAB_BUTTON_P, IDR_NEWTAB_BUTTON_H, 0); 2032 IDR_NEWTAB_BUTTON_P, IDR_NEWTAB_BUTTON_H, 0);
2047 2033
2048 // Let the middle mouse button initiate clicks as well. 2034 // Let the middle mouse button initiate clicks as well.
2049 gtk_util::SetButtonTriggersNavigation(button->widget()); 2035 gtk_util::SetButtonTriggersNavigation(button->widget());
2050 g_signal_connect(button->widget(), "clicked", 2036 g_signal_connect(button->widget(), "clicked",
2051 G_CALLBACK(OnNewTabClicked), this); 2037 G_CALLBACK(OnNewTabClickedThunk), this);
2052 GTK_WIDGET_UNSET_FLAGS(button->widget(), GTK_CAN_FOCUS); 2038 GTK_WIDGET_UNSET_FLAGS(button->widget(), GTK_CAN_FOCUS);
2053 gtk_fixed_put(GTK_FIXED(tabstrip_.get()), button->widget(), 0, 0); 2039 gtk_fixed_put(GTK_FIXED(tabstrip_.get()), button->widget(), 0, 0);
2054 2040
2055 return button; 2041 return button;
2056 } 2042 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/tabs/tab_strip_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698