| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/bookmark_bar_gtk.h" | 5 #include "chrome/browser/gtk/bookmark_bar_gtk.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "app/gfx/text_elider.h" | 9 #include "app/gfx/text_elider.h" |
| 10 #include "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 // The height of the bar. | 40 // The height of the bar. |
| 41 const int kBookmarkBarHeight = 29; | 41 const int kBookmarkBarHeight = 29; |
| 42 | 42 |
| 43 // Left-padding for the instructional text. | 43 // Left-padding for the instructional text. |
| 44 const int kInstructionsPadding = 6; | 44 const int kInstructionsPadding = 6; |
| 45 | 45 |
| 46 // Color of the instructional text. | 46 // Color of the instructional text. |
| 47 const GdkColor kInstructionsColor = GDK_COLOR_RGB(128, 128, 142); | 47 const GdkColor kInstructionsColor = GDK_COLOR_RGB(128, 128, 142); |
| 48 | 48 |
| 49 void SetUseSystemThemeGraphicsOnToolbarItems(GtkToolItem* item, bool use_gtk) { | |
| 50 GtkWidget* child = gtk_bin_get_child(GTK_BIN(item)); | |
| 51 if (GTK_IS_CHROME_BUTTON(child)) { | |
| 52 gtk_chrome_button_set_use_gtk_rendering(GTK_CHROME_BUTTON(child), use_gtk); | |
| 53 } | |
| 54 } | |
| 55 | |
| 56 } // namespace | 49 } // namespace |
| 57 | 50 |
| 58 BookmarkBarGtk::BookmarkBarGtk(Profile* profile, Browser* browser, | 51 BookmarkBarGtk::BookmarkBarGtk(Profile* profile, Browser* browser, |
| 59 BrowserWindowGtk* window) | 52 BrowserWindowGtk* window) |
| 60 : profile_(NULL), | 53 : profile_(NULL), |
| 61 page_navigator_(NULL), | 54 page_navigator_(NULL), |
| 62 browser_(browser), | 55 browser_(browser), |
| 63 window_(window), | 56 window_(window), |
| 64 model_(NULL), | 57 model_(NULL), |
| 65 instructions_(NULL), | 58 instructions_(NULL), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 } | 99 } |
| 107 | 100 |
| 108 void BookmarkBarGtk::SetPageNavigator(PageNavigator* navigator) { | 101 void BookmarkBarGtk::SetPageNavigator(PageNavigator* navigator) { |
| 109 page_navigator_ = navigator; | 102 page_navigator_ = navigator; |
| 110 } | 103 } |
| 111 | 104 |
| 112 void BookmarkBarGtk::Init(Profile* profile) { | 105 void BookmarkBarGtk::Init(Profile* profile) { |
| 113 // Load the default images from the resource bundle. | 106 // Load the default images from the resource bundle. |
| 114 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 107 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 115 static GdkPixbuf* folder_icon = rb.GetPixbufNamed(IDR_BOOKMARK_BAR_FOLDER); | 108 static GdkPixbuf* folder_icon = rb.GetPixbufNamed(IDR_BOOKMARK_BAR_FOLDER); |
| 109 GtkThemeProperties properties(profile); |
| 116 | 110 |
| 117 bookmark_hbox_.Own(gtk_hbox_new(FALSE, 0)); | 111 bookmark_hbox_.Own(gtk_hbox_new(FALSE, 0)); |
| 118 | 112 |
| 119 instructions_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); | 113 instructions_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); |
| 120 gtk_alignment_set_padding(GTK_ALIGNMENT(instructions_), 0, 0, | 114 gtk_alignment_set_padding(GTK_ALIGNMENT(instructions_), 0, 0, |
| 121 kInstructionsPadding, 0); | 115 kInstructionsPadding, 0); |
| 122 g_signal_connect(instructions_, "destroy", G_CALLBACK(gtk_widget_destroyed), | 116 g_signal_connect(instructions_, "destroy", G_CALLBACK(gtk_widget_destroyed), |
| 123 &instructions_); | 117 &instructions_); |
| 124 GtkWidget* instructions_label = gtk_label_new( | 118 GtkWidget* instructions_label = gtk_label_new( |
| 125 l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str()); | 119 l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 | 151 |
| 158 gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), gtk_vseparator_new(), | 152 gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), gtk_vseparator_new(), |
| 159 FALSE, FALSE, 0); | 153 FALSE, FALSE, 0); |
| 160 | 154 |
| 161 // We pack the button manually (rather than using gtk_button_set_*) so that | 155 // We pack the button manually (rather than using gtk_button_set_*) so that |
| 162 // we can have finer control over its label. | 156 // we can have finer control over its label. |
| 163 other_bookmarks_button_ = gtk_chrome_button_new(); | 157 other_bookmarks_button_ = gtk_chrome_button_new(); |
| 164 ConnectFolderButtonEvents(other_bookmarks_button_); | 158 ConnectFolderButtonEvents(other_bookmarks_button_); |
| 165 | 159 |
| 166 GtkWidget* image = gtk_image_new_from_pixbuf(folder_icon); | 160 GtkWidget* image = gtk_image_new_from_pixbuf(folder_icon); |
| 167 GtkWidget* label = gtk_label_new( | 161 other_bookmarks_label_ = gtk_label_new( |
| 168 l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_BOOKMARKED).c_str()); | 162 l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_BOOKMARKED).c_str()); |
| 169 bookmark_utils::SetButtonTextColors(label); | 163 bookmark_utils::SetButtonTextColors(other_bookmarks_label_, &properties); |
| 170 | 164 |
| 171 GtkWidget* box = gtk_hbox_new(FALSE, bookmark_utils::kBarButtonPadding); | 165 GtkWidget* box = gtk_hbox_new(FALSE, bookmark_utils::kBarButtonPadding); |
| 172 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); | 166 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); |
| 173 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); | 167 gtk_box_pack_start(GTK_BOX(box), other_bookmarks_label_, FALSE, FALSE, 0); |
| 174 gtk_container_add(GTK_CONTAINER(other_bookmarks_button_), box); | 168 gtk_container_add(GTK_CONTAINER(other_bookmarks_button_), box); |
| 175 | 169 |
| 176 gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), other_bookmarks_button_, | 170 gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), other_bookmarks_button_, |
| 177 FALSE, FALSE, 0); | 171 FALSE, FALSE, 0); |
| 178 | 172 |
| 179 // Set the current theme state for all the buttons. | 173 // Set the current theme state for all the buttons. |
| 180 UserChangedTheme(profile); | |
| 181 gtk_widget_set_size_request(bookmark_hbox_.get(), -1, 0); | 174 gtk_widget_set_size_request(bookmark_hbox_.get(), -1, 0); |
| 182 | 175 |
| 183 slide_animation_.reset(new SlideAnimation(this)); | 176 slide_animation_.reset(new SlideAnimation(this)); |
| 184 } | 177 } |
| 185 | 178 |
| 186 void BookmarkBarGtk::AddBookmarkbarToBox(GtkWidget* box) { | 179 void BookmarkBarGtk::AddBookmarkbarToBox(GtkWidget* box) { |
| 187 gtk_box_pack_start(GTK_BOX(box), bookmark_hbox_.get(), FALSE, FALSE, 0); | 180 gtk_box_pack_start(GTK_BOX(box), bookmark_hbox_.get(), FALSE, FALSE, 0); |
| 188 } | 181 } |
| 189 | 182 |
| 190 void BookmarkBarGtk::Show(bool animate) { | 183 void BookmarkBarGtk::Show(bool animate) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 int index) { | 260 int index) { |
| 268 if (parent != model_->GetBookmarkBarNode()) { | 261 if (parent != model_->GetBookmarkBarNode()) { |
| 269 // We only care about nodes on the bookmark bar. | 262 // We only care about nodes on the bookmark bar. |
| 270 return; | 263 return; |
| 271 } | 264 } |
| 272 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); | 265 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); |
| 273 | 266 |
| 274 GtkToolItem* item = CreateBookmarkToolItem(parent->GetChild(index)); | 267 GtkToolItem* item = CreateBookmarkToolItem(parent->GetChild(index)); |
| 275 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), | 268 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), |
| 276 item, index); | 269 item, index); |
| 277 bool use_gtk = GtkThemeProvider::UseSystemThemeGraphics(profile_); | |
| 278 SetUseSystemThemeGraphicsOnToolbarItems(item, use_gtk); | |
| 279 | 270 |
| 280 SetInstructionState(parent); | 271 SetInstructionState(parent); |
| 281 } | 272 } |
| 282 | 273 |
| 283 void BookmarkBarGtk::BookmarkNodeRemoved(BookmarkModel* model, | 274 void BookmarkBarGtk::BookmarkNodeRemoved(BookmarkModel* model, |
| 284 const BookmarkNode* parent, | 275 const BookmarkNode* parent, |
| 285 int index) { | 276 int index) { |
| 286 if (parent != model_->GetBookmarkBarNode()) { | 277 if (parent != model_->GetBookmarkBarNode()) { |
| 287 // We only care about nodes on the bookmark bar. | 278 // We only care about nodes on the bookmark bar. |
| 288 return; | 279 return; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 302 if (node->GetParent() != model_->GetBookmarkBarNode()) { | 293 if (node->GetParent() != model_->GetBookmarkBarNode()) { |
| 303 // We only care about nodes on the bookmark bar. | 294 // We only care about nodes on the bookmark bar. |
| 304 return; | 295 return; |
| 305 } | 296 } |
| 306 int index = model_->GetBookmarkBarNode()->IndexOfChild(node); | 297 int index = model_->GetBookmarkBarNode()->IndexOfChild(node); |
| 307 DCHECK(index != -1); | 298 DCHECK(index != -1); |
| 308 | 299 |
| 309 GtkToolItem* item = gtk_toolbar_get_nth_item( | 300 GtkToolItem* item = gtk_toolbar_get_nth_item( |
| 310 GTK_TOOLBAR(bookmark_toolbar_.get()), index); | 301 GTK_TOOLBAR(bookmark_toolbar_.get()), index); |
| 311 GtkWidget* button = gtk_bin_get_child(GTK_BIN(item)); | 302 GtkWidget* button = gtk_bin_get_child(GTK_BIN(item)); |
| 312 bookmark_utils::ConfigureButtonForNode(node, model, button); | 303 GtkThemeProperties properties(profile_); |
| 304 bookmark_utils::ConfigureButtonForNode(node, model, button, &properties); |
| 313 } | 305 } |
| 314 | 306 |
| 315 void BookmarkBarGtk::BookmarkNodeFavIconLoaded(BookmarkModel* model, | 307 void BookmarkBarGtk::BookmarkNodeFavIconLoaded(BookmarkModel* model, |
| 316 const BookmarkNode* node) { | 308 const BookmarkNode* node) { |
| 317 BookmarkNodeChanged(model, node); | 309 BookmarkNodeChanged(model, node); |
| 318 } | 310 } |
| 319 | 311 |
| 320 void BookmarkBarGtk::BookmarkNodeChildrenReordered(BookmarkModel* model, | 312 void BookmarkBarGtk::BookmarkNodeChildrenReordered(BookmarkModel* model, |
| 321 const BookmarkNode* node) { | 313 const BookmarkNode* node) { |
| 322 if (node != model_->GetBookmarkBarNode()) | 314 if (node != model_->GetBookmarkBarNode()) |
| 323 return; // We only care about reordering of the bookmark bar node. | 315 return; // We only care about reordering of the bookmark bar node. |
| 324 | 316 |
| 325 // Purge and rebuild the bar. | 317 // Purge and rebuild the bar. |
| 326 RemoveAllBookmarkButtons(); | 318 RemoveAllBookmarkButtons(); |
| 327 CreateAllBookmarkButtons(node); | 319 CreateAllBookmarkButtons(node); |
| 328 } | 320 } |
| 329 | 321 |
| 330 void BookmarkBarGtk::CreateAllBookmarkButtons(const BookmarkNode* node) { | 322 void BookmarkBarGtk::CreateAllBookmarkButtons(const BookmarkNode* node) { |
| 331 // Create a button for each of the children on the bookmark bar. | 323 // Create a button for each of the children on the bookmark bar. |
| 332 for (int i = 0; i < node->GetChildCount(); ++i) { | 324 for (int i = 0; i < node->GetChildCount(); ++i) { |
| 333 GtkToolItem* item = CreateBookmarkToolItem(node->GetChild(i)); | 325 GtkToolItem* item = CreateBookmarkToolItem(node->GetChild(i)); |
| 334 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), item, -1); | 326 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), item, -1); |
| 335 } | 327 } |
| 336 | 328 |
| 337 // Now that we've made a bunch of toolbar items, we need to make sure they | |
| 338 // have the correct theme state. | |
| 339 UserChangedTheme(profile_); | |
| 340 | |
| 341 SetInstructionState(node); | 329 SetInstructionState(node); |
| 342 } | 330 } |
| 343 | 331 |
| 344 void BookmarkBarGtk::SetInstructionState( | 332 void BookmarkBarGtk::SetInstructionState( |
| 345 const BookmarkNode* boomarks_bar_node) { | 333 const BookmarkNode* boomarks_bar_node) { |
| 346 show_instructions_ = (boomarks_bar_node->GetChildCount() == 0); | 334 show_instructions_ = (boomarks_bar_node->GetChildCount() == 0); |
| 347 if (show_instructions_) { | 335 if (show_instructions_) { |
| 348 gtk_widget_show_all(instructions_); | 336 gtk_widget_show_all(instructions_); |
| 349 } else { | 337 } else { |
| 350 gtk_widget_hide(instructions_); | 338 gtk_widget_hide(instructions_); |
| 351 } | 339 } |
| 352 } | 340 } |
| 353 | 341 |
| 354 void BookmarkBarGtk::RemoveAllBookmarkButtons() { | 342 void BookmarkBarGtk::RemoveAllBookmarkButtons() { |
| 355 gtk_util::RemoveAllChildren(bookmark_toolbar_.get()); | 343 gtk_util::RemoveAllChildren(bookmark_toolbar_.get()); |
| 356 } | 344 } |
| 357 | 345 |
| 358 int BookmarkBarGtk::GetBookmarkButtonCount() { | 346 int BookmarkBarGtk::GetBookmarkButtonCount() { |
| 359 GList* children = gtk_container_get_children( | 347 GList* children = gtk_container_get_children( |
| 360 GTK_CONTAINER(bookmark_toolbar_.get())); | 348 GTK_CONTAINER(bookmark_toolbar_.get())); |
| 361 int count = g_list_length(children); | 349 int count = g_list_length(children); |
| 362 g_list_free(children); | 350 g_list_free(children); |
| 363 return count; | 351 return count; |
| 364 } | 352 } |
| 365 | 353 |
| 366 bool BookmarkBarGtk::IsAlwaysShown() { | 354 bool BookmarkBarGtk::IsAlwaysShown() { |
| 367 return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); | 355 return profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |
| 368 } | 356 } |
| 369 | 357 |
| 370 void BookmarkBarGtk::UserChangedTheme(Profile* profile) { | 358 void BookmarkBarGtk::UserChangedTheme(GtkThemeProperties* properties) { |
| 371 bool use_gtk = GtkThemeProvider::UseSystemThemeGraphics(profile); | 359 gtk_chrome_button_set_use_gtk_rendering( |
| 360 GTK_CHROME_BUTTON(other_bookmarks_button_), |
| 361 properties->use_gtk_rendering); |
| 362 bookmark_utils::SetButtonTextColors(other_bookmarks_label_, properties); |
| 372 | 363 |
| 373 gtk_chrome_button_set_use_gtk_rendering( | 364 if (model_) { |
| 374 GTK_CHROME_BUTTON(other_bookmarks_button_), use_gtk); | 365 // Regenerate the bookmark bar with all new objects with their theme |
| 366 // properties set correctly for the new theme. |
| 367 RemoveAllBookmarkButtons(); |
| 375 | 368 |
| 376 gtk_container_foreach( | 369 const BookmarkNode* node = model_->GetBookmarkBarNode(); |
| 377 GTK_CONTAINER(bookmark_toolbar_.get()), | 370 DCHECK(node && model_->other_node()); |
| 378 reinterpret_cast<void (*)(GtkWidget*, void*)>( | 371 CreateAllBookmarkButtons(node); |
| 379 SetUseSystemThemeGraphicsOnToolbarItems), | 372 } else { |
| 380 reinterpret_cast<void*>(use_gtk)); | 373 DLOG(ERROR) << "Received a theme change notification while we don't have a " |
| 374 << "BookmarkModel. Taking no action."; |
| 375 } |
| 381 } | 376 } |
| 382 | 377 |
| 383 void BookmarkBarGtk::AnimationProgressed(const Animation* animation) { | 378 void BookmarkBarGtk::AnimationProgressed(const Animation* animation) { |
| 384 DCHECK_EQ(animation, slide_animation_.get()); | 379 DCHECK_EQ(animation, slide_animation_.get()); |
| 385 | 380 |
| 386 gtk_widget_set_size_request(bookmark_hbox_.get(), -1, | 381 gtk_widget_set_size_request(bookmark_hbox_.get(), -1, |
| 387 animation->GetCurrentValue() * | 382 animation->GetCurrentValue() * |
| 388 kBookmarkBarHeight); | 383 kBookmarkBarHeight); |
| 389 } | 384 } |
| 390 | 385 |
| 391 void BookmarkBarGtk::AnimationEnded(const Animation* animation) { | 386 void BookmarkBarGtk::AnimationEnded(const Animation* animation) { |
| 392 DCHECK_EQ(animation, slide_animation_.get()); | 387 DCHECK_EQ(animation, slide_animation_.get()); |
| 393 | 388 |
| 394 if (!slide_animation_->IsShowing()) | 389 if (!slide_animation_->IsShowing()) |
| 395 gtk_widget_hide(bookmark_hbox_.get()); | 390 gtk_widget_hide(bookmark_hbox_.get()); |
| 396 } | 391 } |
| 397 | 392 |
| 398 GtkWidget* BookmarkBarGtk::CreateBookmarkButton(const BookmarkNode* node) { | 393 GtkWidget* BookmarkBarGtk::CreateBookmarkButton(const BookmarkNode* node) { |
| 399 GtkWidget* button = gtk_chrome_button_new(); | 394 GtkWidget* button = gtk_chrome_button_new(); |
| 400 bookmark_utils::ConfigureButtonForNode(node, model_, button); | 395 GtkThemeProperties properties(profile_); |
| 396 bookmark_utils::ConfigureButtonForNode(node, model_, button, &properties); |
| 401 | 397 |
| 402 // The tool item is also a source for dragging | 398 // The tool item is also a source for dragging |
| 403 gtk_drag_source_set(button, GDK_BUTTON1_MASK, | 399 gtk_drag_source_set(button, GDK_BUTTON1_MASK, |
| 404 NULL, 0, GDK_ACTION_MOVE); | 400 NULL, 0, GDK_ACTION_MOVE); |
| 405 GtkDndUtil::SetSourceTargetListFromCodeMask( | 401 GtkDndUtil::SetSourceTargetListFromCodeMask( |
| 406 button, GtkDndUtil::X_CHROME_BOOKMARK_ITEM); | 402 button, GtkDndUtil::X_CHROME_BOOKMARK_ITEM); |
| 407 g_signal_connect(G_OBJECT(button), "drag-begin", | 403 g_signal_connect(G_OBJECT(button), "drag-begin", |
| 408 G_CALLBACK(&OnButtonDragBegin), this); | 404 G_CALLBACK(&OnButtonDragBegin), this); |
| 409 g_signal_connect(G_OBJECT(button), "drag-end", | 405 g_signal_connect(G_OBJECT(button), "drag-end", |
| 410 G_CALLBACK(&OnButtonDragEnd), this); | 406 G_CALLBACK(&OnButtonDragEnd), this); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 | 572 |
| 577 // Signal to any future OnButtonReleased calls that we're dragging instead of | 573 // Signal to any future OnButtonReleased calls that we're dragging instead of |
| 578 // pressing. | 574 // pressing. |
| 579 bar->ignore_button_release_ = true; | 575 bar->ignore_button_release_ = true; |
| 580 | 576 |
| 581 const BookmarkNode* node = bar->GetNodeForToolButton(button); | 577 const BookmarkNode* node = bar->GetNodeForToolButton(button); |
| 582 DCHECK(!bar->dragged_node_); | 578 DCHECK(!bar->dragged_node_); |
| 583 bar->dragged_node_ = node; | 579 bar->dragged_node_ = node; |
| 584 DCHECK(bar->dragged_node_); | 580 DCHECK(bar->dragged_node_); |
| 585 | 581 |
| 586 GtkWidget* window = bookmark_utils::GetDragRepresentation(node, bar->model_); | 582 GtkThemeProperties properties(bar->profile_); |
| 583 GtkWidget* window = bookmark_utils::GetDragRepresentation(node, bar->model_, |
| 584 &properties); |
| 587 gint x, y; | 585 gint x, y; |
| 588 gtk_widget_get_pointer(button, &x, &y); | 586 gtk_widget_get_pointer(button, &x, &y); |
| 589 gtk_drag_set_icon_widget(drag_context, window, x, y); | 587 gtk_drag_set_icon_widget(drag_context, window, x, y); |
| 590 | 588 |
| 591 // Hide our node. | 589 // Hide our node. |
| 592 gtk_widget_hide(button); | 590 gtk_widget_hide(button); |
| 593 } | 591 } |
| 594 | 592 |
| 595 // static | 593 // static |
| 596 void BookmarkBarGtk::OnButtonDragEnd(GtkWidget* button, | 594 void BookmarkBarGtk::OnButtonDragEnd(GtkWidget* button, |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 bar->InitBackground(); | 774 bar->InitBackground(); |
| 777 gfx::Point tabstrip_origin = | 775 gfx::Point tabstrip_origin = |
| 778 bar->window_->tabstrip()->GetTabStripOriginForWidget(widget); | 776 bar->window_->tabstrip()->GetTabStripOriginForWidget(widget); |
| 779 bar->background_ninebox_->RenderTopCenterStrip( | 777 bar->background_ninebox_->RenderTopCenterStrip( |
| 780 cr, tabstrip_origin.x(), tabstrip_origin.y(), | 778 cr, tabstrip_origin.x(), tabstrip_origin.y(), |
| 781 event->area.x + event->area.width - tabstrip_origin.x()); | 779 event->area.x + event->area.width - tabstrip_origin.x()); |
| 782 cairo_destroy(cr); | 780 cairo_destroy(cr); |
| 783 | 781 |
| 784 return FALSE; // Propagate expose to children. | 782 return FALSE; // Propagate expose to children. |
| 785 } | 783 } |
| OLD | NEW |