diff options
Diffstat (limited to 'chrome/browser/gtk/location_bar_view_gtk.cc')
| -rw-r--r-- | chrome/browser/gtk/location_bar_view_gtk.cc | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc new file mode 100644 index 0000000..4e97032 --- /dev/null +++ b/chrome/browser/gtk/location_bar_view_gtk.cc @@ -0,0 +1,143 @@ +#include "chrome/browser/gtk/location_bar_view_gtk.h" + +#include <string> + +#include "base/basictypes.h" +#include "base/logging.h" +#include "base/string_util.h" +#include "chrome/app/chrome_dll_resource.h" +#include "chrome/browser/alternate_nav_url_fetcher.h" +#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" +#include "chrome/browser/command_updater.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/common/page_transition_types.h" +#include "skia/include/SkBitmap.h" +#include "webkit/glue/window_open_disposition.h" + +LocationBarViewGtk::LocationBarViewGtk(CommandUpdater* command_updater, + ToolbarModel* toolbar_model) + : vbox_(NULL), + profile_(NULL), + command_updater_(command_updater), + toolbar_model_(toolbar_model), + disposition_(CURRENT_TAB), + transition_(PageTransition::TYPED) { +} + +LocationBarViewGtk::~LocationBarViewGtk(){ + // TODO(deanm): Should I destroy the widgets here, or leave it up to the + // embedder? When the embedder destroys their widget, if we're a child, we + // will also get destroyed, so the ownership is kinda unclear. +} + +void LocationBarViewGtk::Init(){ + edit_view_.reset(new AutocompleteEditViewGtk(this, toolbar_model_, profile_, + command_updater_)); + edit_view_->Init(); + + vbox_ = gtk_vbox_new(false, 0); + + // Get the location bar to fit nicely in the toolbar, kinda ugly. + static const int kTopPadding = 2; + static const int kBottomPadding = 3; + GtkWidget* alignment = gtk_alignment_new(0, 0, 1, 1); + gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), + kTopPadding, kBottomPadding, 0, 0); + gtk_container_add(GTK_CONTAINER(alignment), edit_view_->widget()); + + gtk_box_pack_start(GTK_BOX(vbox_), alignment, TRUE, TRUE, 0); +} + +void LocationBarViewGtk::SetProfile(Profile* profile) { + profile_ = profile; +} + +void LocationBarViewGtk::Update(const TabContents* contents) { + edit_view_->Update(contents); +} + +void LocationBarViewGtk::OnAutocompleteAccept(const GURL& url, + WindowOpenDisposition disposition, + PageTransition::Type transition, + const GURL& alternate_nav_url) { + if (!url.is_valid()) + return; + + location_input_ = UTF8ToWide(url.spec()); + disposition_ = disposition; + transition_ = transition; + + if (!command_updater_) + return; + + if (!alternate_nav_url.is_valid()) { + command_updater_->ExecuteCommand(IDC_OPEN_CURRENT_URL); + return; + } + + scoped_ptr<AlternateNavURLFetcher> fetcher( + new AlternateNavURLFetcher(alternate_nav_url)); + // The AlternateNavURLFetcher will listen for the pending navigation + // notification that will be issued as a result of the "open URL." It + // will automatically install itself into that navigation controller. + command_updater_->ExecuteCommand(IDC_OPEN_CURRENT_URL); + if (fetcher->state() == AlternateNavURLFetcher::NOT_STARTED) { + // I'm not sure this should be reachable, but I'm not also sure enough + // that it shouldn't to stick in a NOTREACHED(). In any case, this is + // harmless; we can simply let the fetcher get deleted here and it will + // clean itself up properly. + } else { + fetcher.release(); // The navigation controller will delete the fetcher. + } +} + +void LocationBarViewGtk::OnChanged() { + // TODO(deanm): Here is where we would do layout when we have things like + // the keyword display, ssl icons, etc. +} + +void LocationBarViewGtk::OnInputInProgress(bool in_progress) { + NOTIMPLEMENTED(); +} + +SkBitmap LocationBarViewGtk::GetFavIcon() const { + NOTIMPLEMENTED(); + return SkBitmap(); +} + +std::wstring LocationBarViewGtk::GetTitle() const { + NOTIMPLEMENTED(); + return std::wstring(); +} + +void LocationBarViewGtk::ShowFirstRunBubble(){ + NOTIMPLEMENTED(); +} + +std::wstring LocationBarViewGtk::GetInputString() const{ + return location_input_; +} + +WindowOpenDisposition LocationBarViewGtk::GetWindowOpenDisposition() const{ + return disposition_; +} + +PageTransition::Type LocationBarViewGtk::GetPageTransition() const{ + return transition_; +} + +void LocationBarViewGtk::AcceptInput(){ + NOTIMPLEMENTED(); +} + +void LocationBarViewGtk::FocusLocation(){ + edit_view_->FocusLocation(); +} + +void LocationBarViewGtk::FocusSearch(){ + NOTIMPLEMENTED(); +} + +void LocationBarViewGtk::SaveStateToContents(TabContents* contents){ + NOTIMPLEMENTED(); +} |
