| 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/browser_actions_toolbar_gtk.h" | 5 #include "chrome/browser/gtk/browser_actions_toolbar_gtk.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "app/gfx/canvas_paint.h" | 9 #include "app/gfx/canvas_paint.h" |
| 10 #include "app/gfx/gtk_util.h" | 10 #include "app/gfx/gtk_util.h" |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 325 |
| 326 int i = 0; | 326 int i = 0; |
| 327 for (ExtensionList::iterator iter = model_->begin(); | 327 for (ExtensionList::iterator iter = model_->begin(); |
| 328 iter != model_->end(); ++iter) { | 328 iter != model_->end(); ++iter) { |
| 329 CreateButtonForExtension(*iter, i++); | 329 CreateButtonForExtension(*iter, i++); |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 | 332 |
| 333 void BrowserActionsToolbarGtk::CreateButtonForExtension(Extension* extension, | 333 void BrowserActionsToolbarGtk::CreateButtonForExtension(Extension* extension, |
| 334 int index) { | 334 int index) { |
| 335 if (!ShouldDisplayBrowserAction(extension)) |
| 336 return; |
| 337 |
| 338 if (profile_->IsOffTheRecord()) |
| 339 index = model_->OriginalIndexToIncognito(index); |
| 340 |
| 335 RemoveButtonForExtension(extension); | 341 RemoveButtonForExtension(extension); |
| 336 linked_ptr<BrowserActionButton> button( | 342 linked_ptr<BrowserActionButton> button( |
| 337 new BrowserActionButton(this, extension)); | 343 new BrowserActionButton(this, extension)); |
| 338 gtk_box_pack_start(GTK_BOX(hbox_.get()), button->widget(), FALSE, FALSE, 0); | 344 gtk_box_pack_start(GTK_BOX(hbox_.get()), button->widget(), FALSE, FALSE, 0); |
| 339 gtk_box_reorder_child(GTK_BOX(hbox_.get()), button->widget(), index); | 345 gtk_box_reorder_child(GTK_BOX(hbox_.get()), button->widget(), index); |
| 340 gtk_widget_show(button->widget()); | 346 gtk_widget_show(button->widget()); |
| 341 extension_button_map_[extension->id()] = button; | 347 extension_button_map_[extension->id()] = button; |
| 342 | 348 |
| 343 GtkTargetEntry drag_target = GetDragTargetEntry(); | 349 GtkTargetEntry drag_target = GetDragTargetEntry(); |
| 344 gtk_drag_source_set(button->widget(), GDK_BUTTON1_MASK, &drag_target, 1, | 350 gtk_drag_source_set(button->widget(), GDK_BUTTON1_MASK, &drag_target, 1, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 367 UpdateVisibility(); | 373 UpdateVisibility(); |
| 368 } | 374 } |
| 369 | 375 |
| 370 void BrowserActionsToolbarGtk::UpdateVisibility() { | 376 void BrowserActionsToolbarGtk::UpdateVisibility() { |
| 371 if (button_count() == 0) | 377 if (button_count() == 0) |
| 372 gtk_widget_hide(widget()); | 378 gtk_widget_hide(widget()); |
| 373 else | 379 else |
| 374 gtk_widget_show(widget()); | 380 gtk_widget_show(widget()); |
| 375 } | 381 } |
| 376 | 382 |
| 383 bool BrowserActionsToolbarGtk::ShouldDisplayBrowserAction( |
| 384 Extension* extension) { |
| 385 // Only display incognito-enabled extensions while in incognito mode. |
| 386 return (!profile_->IsOffTheRecord() || |
| 387 profile_->GetExtensionsService()-> |
| 388 IsIncognitoEnabled(extension->id())); |
| 389 } |
| 390 |
| 377 void BrowserActionsToolbarGtk::HidePopup() { | 391 void BrowserActionsToolbarGtk::HidePopup() { |
| 378 ExtensionPopupGtk* popup = ExtensionPopupGtk::get_current_extension_popup(); | 392 ExtensionPopupGtk* popup = ExtensionPopupGtk::get_current_extension_popup(); |
| 379 if (popup) | 393 if (popup) |
| 380 popup->DestroyPopup(); | 394 popup->DestroyPopup(); |
| 381 } | 395 } |
| 382 | 396 |
| 383 void BrowserActionsToolbarGtk::BrowserActionAdded(Extension* extension, | 397 void BrowserActionsToolbarGtk::BrowserActionAdded(Extension* extension, |
| 384 int index) { | 398 int index) { |
| 385 CreateButtonForExtension(extension, index); | 399 CreateButtonForExtension(extension, index); |
| 386 } | 400 } |
| 387 | 401 |
| 388 void BrowserActionsToolbarGtk::BrowserActionRemoved(Extension* extension) { | 402 void BrowserActionsToolbarGtk::BrowserActionRemoved(Extension* extension) { |
| 389 if (drag_button_ != NULL) { | 403 if (drag_button_ != NULL) { |
| 390 // Break the current drag. | 404 // Break the current drag. |
| 391 gtk_grab_remove(widget()); | 405 gtk_grab_remove(widget()); |
| 392 } | 406 } |
| 393 | 407 |
| 394 RemoveButtonForExtension(extension); | 408 RemoveButtonForExtension(extension); |
| 395 } | 409 } |
| 396 | 410 |
| 397 void BrowserActionsToolbarGtk::BrowserActionMoved(Extension* extension, | 411 void BrowserActionsToolbarGtk::BrowserActionMoved(Extension* extension, |
| 398 int index) { | 412 int index) { |
| 399 // We initiated this move action, and have already moved the button. | 413 // We initiated this move action, and have already moved the button. |
| 400 if (drag_button_ != NULL) | 414 if (drag_button_ != NULL) |
| 401 return; | 415 return; |
| 402 | 416 |
| 403 BrowserActionButton* button = extension_button_map_[extension->id()].get(); | 417 BrowserActionButton* button = extension_button_map_[extension->id()].get(); |
| 404 if (!button) { | 418 if (!button) { |
| 405 NOTREACHED(); | 419 if (ShouldDisplayBrowserAction(extension)) |
| 420 NOTREACHED(); |
| 406 return; | 421 return; |
| 407 } | 422 } |
| 408 | 423 |
| 424 if (profile_->IsOffTheRecord()) |
| 425 index = model_->OriginalIndexToIncognito(index); |
| 426 |
| 409 gtk_box_reorder_child(GTK_BOX(hbox_.get()), button->widget(), index); | 427 gtk_box_reorder_child(GTK_BOX(hbox_.get()), button->widget(), index); |
| 410 } | 428 } |
| 411 | 429 |
| 412 void BrowserActionsToolbarGtk::DragStarted(BrowserActionButton* button, | 430 void BrowserActionsToolbarGtk::DragStarted(BrowserActionButton* button, |
| 413 GdkDragContext* drag_context) { | 431 GdkDragContext* drag_context) { |
| 414 // No representation of the widget following the cursor. | 432 // No representation of the widget following the cursor. |
| 415 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 1, 1); | 433 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 1, 1); |
| 416 gtk_drag_set_icon_pixbuf(drag_context, pixbuf, 0, 0); | 434 gtk_drag_set_icon_pixbuf(drag_context, pixbuf, 0, 0); |
| 417 g_object_unref(pixbuf); | 435 g_object_unref(pixbuf); |
| 418 | 436 |
| 419 DCHECK(!drag_button_); | 437 DCHECK(!drag_button_); |
| 420 drag_button_ = button; | 438 drag_button_ = button; |
| 421 } | 439 } |
| 422 | 440 |
| 423 gboolean BrowserActionsToolbarGtk::OnDragMotion(GtkWidget* widget, | 441 gboolean BrowserActionsToolbarGtk::OnDragMotion(GtkWidget* widget, |
| 424 GdkDragContext* drag_context, | 442 GdkDragContext* drag_context, |
| 425 gint x, gint y, guint time) { | 443 gint x, gint y, guint time) { |
| 426 // Only handle drags we initiated. | 444 // Only handle drags we initiated. |
| 427 if (!drag_button_) | 445 if (!drag_button_) |
| 428 return FALSE; | 446 return FALSE; |
| 429 | 447 |
| 430 drop_index_ = x < kButtonSize ? 0 : x / (kButtonSize + kButtonPadding); | 448 drop_index_ = x < kButtonSize ? 0 : x / (kButtonSize + kButtonPadding); |
| 449 if (profile_->IsOffTheRecord()) |
| 450 drop_index_ = model_->IncognitoIndexToOriginal(drop_index_); |
| 451 |
| 431 // We will go ahead and reorder the child in order to provide visual feedback | 452 // We will go ahead and reorder the child in order to provide visual feedback |
| 432 // to the user. We don't inform the model that it has moved until the drag | 453 // to the user. We don't inform the model that it has moved until the drag |
| 433 // ends. | 454 // ends. |
| 434 gtk_box_reorder_child(GTK_BOX(hbox_.get()), drag_button_->widget(), | 455 gtk_box_reorder_child(GTK_BOX(hbox_.get()), drag_button_->widget(), |
| 435 drop_index_); | 456 drop_index_); |
| 436 | 457 |
| 437 gdk_drag_status(drag_context, GDK_ACTION_MOVE, time); | 458 gdk_drag_status(drag_context, GDK_ACTION_MOVE, time); |
| 438 return TRUE; | 459 return TRUE; |
| 439 } | 460 } |
| 440 | 461 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 462 if (!GTK_WIDGET_TOPLEVEL(toplevel)) | 483 if (!GTK_WIDGET_TOPLEVEL(toplevel)) |
| 463 return; | 484 return; |
| 464 | 485 |
| 465 g_signal_connect(toplevel, "set-focus", G_CALLBACK(OnSetFocusThunk), this); | 486 g_signal_connect(toplevel, "set-focus", G_CALLBACK(OnSetFocusThunk), this); |
| 466 } | 487 } |
| 467 | 488 |
| 468 void BrowserActionsToolbarGtk::OnSetFocus() { | 489 void BrowserActionsToolbarGtk::OnSetFocus() { |
| 469 // The focus of the parent window has changed. Close the popup. | 490 // The focus of the parent window has changed. Close the popup. |
| 470 HidePopup(); | 491 HidePopup(); |
| 471 } | 492 } |
| OLD | NEW |