OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ui/gtk/find_bar_gtk.h" | 5 #include "chrome/browser/ui/gtk/find_bar_gtk.h" |
6 | 6 |
7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <string> | 10 #include <string> |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 | 319 |
320 void FindBarGtk::SetFindBarController(FindBarController* find_bar_controller) { | 320 void FindBarGtk::SetFindBarController(FindBarController* find_bar_controller) { |
321 find_bar_controller_ = find_bar_controller; | 321 find_bar_controller_ = find_bar_controller; |
322 } | 322 } |
323 | 323 |
324 void FindBarGtk::Show(bool animate) { | 324 void FindBarGtk::Show(bool animate) { |
325 if (animate) { | 325 if (animate) { |
326 slide_widget_->Open(); | 326 slide_widget_->Open(); |
327 selection_rect_ = gfx::Rect(); | 327 selection_rect_ = gfx::Rect(); |
328 Reposition(); | 328 Reposition(); |
329 if (container_->window) | 329 GdkWindow* gdk_window = gtk_widget_get_window(container_); |
330 gdk_window_raise(container_->window); | 330 if (gdk_window) |
| 331 gdk_window_raise(gdk_window); |
331 } else { | 332 } else { |
332 slide_widget_->OpenWithoutAnimation(); | 333 slide_widget_->OpenWithoutAnimation(); |
333 } | 334 } |
334 } | 335 } |
335 | 336 |
336 void FindBarGtk::Hide(bool animate) { | 337 void FindBarGtk::Hide(bool animate) { |
337 if (animate) | 338 if (animate) |
338 slide_widget_->Close(); | 339 slide_widget_->Close(); |
339 else | 340 else |
340 slide_widget_->CloseWithoutAnimation(); | 341 slide_widget_->CloseWithoutAnimation(); |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 gtk_widget_modify_fg(match_count_label_, GTK_STATE_NORMAL, | 634 gtk_widget_modify_fg(match_count_label_, GTK_STATE_NORMAL, |
634 failure ? &kEntryTextColor : &kFindSuccessTextColor); | 635 failure ? &kEntryTextColor : &kFindSuccessTextColor); |
635 } | 636 } |
636 } | 637 } |
637 | 638 |
638 void FindBarGtk::Reposition() { | 639 void FindBarGtk::Reposition() { |
639 if (!IsFindBarVisible()) | 640 if (!IsFindBarVisible()) |
640 return; | 641 return; |
641 | 642 |
642 // This will trigger an allocate, which allows us to reposition. | 643 // This will trigger an allocate, which allows us to reposition. |
643 if (widget()->parent) | 644 GtkWidget* parent = gtk_widget_get_parent(widget()); |
644 gtk_widget_queue_resize(widget()->parent); | 645 if (parent) |
| 646 gtk_widget_queue_resize(parent); |
645 } | 647 } |
646 | 648 |
647 void FindBarGtk::StoreOutsideFocus() { | 649 void FindBarGtk::StoreOutsideFocus() { |
648 // |text_entry_| is the only widget in the find bar that can be focused, | 650 // |text_entry_| is the only widget in the find bar that can be focused, |
649 // so it's the only one we have to check. | 651 // so it's the only one we have to check. |
650 // TODO(estade): when we make the find bar buttons focusable, we'll have | 652 // TODO(estade): when we make the find bar buttons focusable, we'll have |
651 // to change this (same above in RestoreSavedFocus). | 653 // to change this (same above in RestoreSavedFocus). |
652 if (!gtk_widget_is_focus(text_entry_)) | 654 if (!gtk_widget_is_focus(text_entry_)) |
653 focus_store_.Store(text_entry_); | 655 focus_store_.Store(text_entry_); |
654 } | 656 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 (widget_dir == GTK_TEXT_DIR_LTR && content_dir == PANGO_DIRECTION_RTL)) { | 713 (widget_dir == GTK_TEXT_DIR_LTR && content_dir == PANGO_DIRECTION_RTL)) { |
712 gtk_entry_set_alignment(GTK_ENTRY(text_entry_), 1.0); | 714 gtk_entry_set_alignment(GTK_ENTRY(text_entry_), 1.0); |
713 } else { | 715 } else { |
714 gtk_entry_set_alignment(GTK_ENTRY(text_entry_), 0.0); | 716 gtk_entry_set_alignment(GTK_ENTRY(text_entry_), 0.0); |
715 } | 717 } |
716 } | 718 } |
717 | 719 |
718 gfx::Point FindBarGtk::GetPosition() { | 720 gfx::Point FindBarGtk::GetPosition() { |
719 gfx::Point point; | 721 gfx::Point point; |
720 | 722 |
| 723 GtkWidget* parent = gtk_widget_get_parent(widget()); |
| 724 |
721 GValue value = { 0, }; | 725 GValue value = { 0, }; |
722 g_value_init(&value, G_TYPE_INT); | 726 g_value_init(&value, G_TYPE_INT); |
723 gtk_container_child_get_property(GTK_CONTAINER(widget()->parent), | 727 gtk_container_child_get_property(GTK_CONTAINER(parent), |
724 widget(), "x", &value); | 728 widget(), "x", &value); |
725 point.set_x(g_value_get_int(&value)); | 729 point.set_x(g_value_get_int(&value)); |
726 | 730 |
727 gtk_container_child_get_property(GTK_CONTAINER(widget()->parent), | 731 gtk_container_child_get_property(GTK_CONTAINER(parent), |
728 widget(), "y", &value); | 732 widget(), "y", &value); |
729 point.set_y(g_value_get_int(&value)); | 733 point.set_y(g_value_get_int(&value)); |
730 | 734 |
731 g_value_unset(&value); | 735 g_value_unset(&value); |
732 | 736 |
733 return point; | 737 return point; |
734 } | 738 } |
735 | 739 |
736 // static | 740 // static |
737 void FindBarGtk::OnParentSet(GtkWidget* widget, GtkObject* old_parent, | 741 void FindBarGtk::OnParentSet(GtkWidget* widget, GtkObject* old_parent, |
738 FindBarGtk* find_bar) { | 742 FindBarGtk* find_bar) { |
739 if (!widget->parent) | 743 if (!gtk_widget_get_parent(widget)) |
740 return; | 744 return; |
741 | 745 |
742 g_signal_connect(gtk_widget_get_parent(widget), "set-floating-position", | 746 g_signal_connect(gtk_widget_get_parent(widget), "set-floating-position", |
743 G_CALLBACK(OnSetFloatingPosition), find_bar); | 747 G_CALLBACK(OnSetFloatingPosition), find_bar); |
744 } | 748 } |
745 | 749 |
746 // static | 750 // static |
747 void FindBarGtk::OnSetFloatingPosition(GtkFloatingContainer* floating_container, | 751 void FindBarGtk::OnSetFloatingPosition(GtkFloatingContainer* floating_container, |
748 GtkAllocation* allocation, | 752 GtkAllocation* allocation, |
749 FindBarGtk* find_bar) { | 753 FindBarGtk* find_bar) { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 bar->container_height_ != allocation.height) { | 885 bar->container_height_ != allocation.height) { |
882 // Reset the shape. | 886 // Reset the shape. |
883 gdk_window_shape_combine_region(gtk_widget_get_window(widget), | 887 gdk_window_shape_combine_region(gtk_widget_get_window(widget), |
884 NULL, 0, 0); | 888 NULL, 0, 0); |
885 SetDialogShape(bar->container_); | 889 SetDialogShape(bar->container_); |
886 | 890 |
887 bar->container_width_ = allocation.width; | 891 bar->container_width_ = allocation.width; |
888 bar->container_height_ = allocation.height; | 892 bar->container_height_ = allocation.height; |
889 } | 893 } |
890 | 894 |
891 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); | 895 cairo_t* cr = gdk_cairo_create(gtk_widget_get_window(widget)); |
892 gdk_cairo_rectangle(cr, &e->area); | 896 gdk_cairo_rectangle(cr, &e->area); |
893 cairo_clip(cr); | 897 cairo_clip(cr); |
894 | 898 |
895 gfx::Point tabstrip_origin = | 899 gfx::Point tabstrip_origin = |
896 bar->window_->tabstrip()->GetTabStripOriginForWidget(widget); | 900 bar->window_->tabstrip()->GetTabStripOriginForWidget(widget); |
897 | 901 |
898 gtk_util::DrawThemedToolbarBackground(widget, cr, e, tabstrip_origin, | 902 gtk_util::DrawThemedToolbarBackground(widget, cr, e, tabstrip_origin, |
899 bar->theme_service_); | 903 bar->theme_service_); |
900 | 904 |
901 // During chrome theme mode, we need to draw the border around content_hbox | 905 // During chrome theme mode, we need to draw the border around content_hbox |
902 // now instead of when we render |border_bin_|. We don't use stacked event | 906 // now instead of when we render |border_bin_|. We don't use stacked event |
903 // boxes to simulate the effect because we need to blend them with this | 907 // boxes to simulate the effect because we need to blend them with this |
904 // background. | 908 // background. |
905 GtkAllocation border_allocation = bar->border_bin_->allocation; | 909 GtkAllocation border_allocation; |
| 910 gtk_widget_get_allocation(bar->border_bin_, &border_allocation); |
906 | 911 |
907 // Blit the left part of the background image once on the left. | 912 // Blit the left part of the background image once on the left. |
908 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 913 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
909 gfx::CairoCachedSurface* background_left = | 914 gfx::CairoCachedSurface* background_left = |
910 rb.GetRTLEnabledImageNamed(IDR_FIND_BOX_BACKGROUND_LEFT).ToCairo(); | 915 rb.GetRTLEnabledImageNamed(IDR_FIND_BOX_BACKGROUND_LEFT).ToCairo(); |
911 background_left->SetSource(cr, widget, | 916 background_left->SetSource(cr, widget, |
912 border_allocation.x, border_allocation.y); | 917 border_allocation.x, border_allocation.y); |
913 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); | 918 cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); |
914 cairo_rectangle(cr, border_allocation.x, border_allocation.y, | 919 cairo_rectangle(cr, border_allocation.x, border_allocation.y, |
915 background_left->Width(), background_left->Height()); | 920 background_left->Width(), background_left->Height()); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 return FALSE; // Continue propagation. | 995 return FALSE; // Continue propagation. |
991 } | 996 } |
992 | 997 |
993 gboolean FindBarGtk::OnFocusOut(GtkWidget* entry, GdkEventFocus* event) { | 998 gboolean FindBarGtk::OnFocusOut(GtkWidget* entry, GdkEventFocus* event) { |
994 g_signal_handlers_disconnect_by_func( | 999 g_signal_handlers_disconnect_by_func( |
995 gdk_keymap_get_for_display(gtk_widget_get_display(entry)), | 1000 gdk_keymap_get_for_display(gtk_widget_get_display(entry)), |
996 reinterpret_cast<gpointer>(&OnKeymapDirectionChanged), this); | 1001 reinterpret_cast<gpointer>(&OnKeymapDirectionChanged), this); |
997 | 1002 |
998 return FALSE; // Continue propagation. | 1003 return FALSE; // Continue propagation. |
999 } | 1004 } |
OLD | NEW |