| Index: chrome/browser/autocomplete/autocomplete_edit_view_gtk.h | 
| diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..85d16ae2015cb6da1c236909a46e1a7f30c1aa62 | 
| --- /dev/null | 
| +++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h | 
| @@ -0,0 +1,201 @@ | 
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 
| +#define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 
| + | 
| +#include <gtk/gtk.h> | 
| + | 
| +#include "base/basictypes.h" | 
| +#include "base/scoped_ptr.h" | 
| +#include "chrome/browser/autocomplete/autocomplete.h" | 
| +#include "chrome/browser/autocomplete/autocomplete_edit_view.h" | 
| +#include "chrome/browser/toolbar_model.h" | 
| +#include "chrome/common/page_transition_types.h" | 
| +#include "webkit/glue/window_open_disposition.h" | 
| + | 
| +class AutocompleteEditController; | 
| +class AutocompleteEditModel; | 
| +class AutocompletePopupViewGtk; | 
| +class CommandUpdater; | 
| +class Profile; | 
| +class TabContents; | 
| +class ToolbarModel; | 
| + | 
| +class AutocompleteEditViewGtk : public AutocompleteEditView { | 
| + public: | 
| +  AutocompleteEditViewGtk(AutocompleteEditController* controller, | 
| +                          ToolbarModel* toolbar_model, | 
| +                          Profile* profile, | 
| +                          CommandUpdater* command_updater); | 
| +  ~AutocompleteEditViewGtk(); | 
| + | 
| +  // Initialize, create the underlying widgets, etc. | 
| +  void Init(); | 
| + | 
| +  GtkWidget* widget() { return text_view_; } | 
| + | 
| +  // Grab keyboard input focus, putting focus on the location widget. | 
| +  void FocusLocation(); | 
| + | 
| +  // Implement the AutocompleteEditView interface. | 
| +  virtual AutocompleteEditModel* model() { return model_.get(); } | 
| +  virtual const AutocompleteEditModel* model() const { return model_.get(); } | 
| + | 
| +  virtual void SaveStateToTab(TabContents* tab); | 
| + | 
| +  virtual void Update(const TabContents* tab_for_state_restoring); | 
| + | 
| +  virtual void OpenURL(const GURL& url, | 
| +                       WindowOpenDisposition disposition, | 
| +                       PageTransition::Type transition, | 
| +                       const GURL& alternate_nav_url, | 
| +                       size_t selected_line, | 
| +                       const std::wstring& keyword); | 
| + | 
| +  virtual std::wstring GetText() const; | 
| + | 
| +  virtual void SetUserText(const std::wstring& text) { | 
| +    SetUserText(text, text, true); | 
| +  } | 
| +  virtual void SetUserText(const std::wstring& text, | 
| +                           const std::wstring& display_text, | 
| +                           bool update_popup); | 
| + | 
| +  virtual void SetWindowTextAndCaretPos(const std::wstring& text, | 
| +                                        size_t caret_pos); | 
| + | 
| +  virtual bool IsSelectAll(); | 
| +  virtual void SelectAll(bool reversed); | 
| +  virtual void RevertAll(); | 
| + | 
| +  virtual void UpdatePopup(); | 
| +  virtual void ClosePopup(); | 
| + | 
| +  virtual void OnTemporaryTextMaybeChanged(const std::wstring& display_text, | 
| +                                           bool save_original_selection); | 
| +  virtual bool OnInlineAutocompleteTextMaybeChanged( | 
| +      const std::wstring& display_text, size_t user_text_length); | 
| +  virtual void OnRevertTemporaryText(); | 
| +  virtual void OnBeforePossibleChange(); | 
| +  virtual bool OnAfterPossibleChange(); | 
| + | 
| +  // Return the position (root coordinates) of the bottom left corner and width | 
| +  // of the location input box.  Used by the popup view to position itself. | 
| +  void BottomLeftPosWidth(int* x, int* y, int* width); | 
| + | 
| + private: | 
| +  // Modeled like the Windows CHARRANGE.  Represent a pair of cursor position | 
| +  // offsets.  Since GtkTextIters are invalid after the buffer is changed, we | 
| +  // work in character offsets (not bytes). | 
| +  struct CharRange { | 
| +    CharRange() : cp_min(0), cp_max(0) { } | 
| +    CharRange(int n, int x) : cp_min(n), cp_max(x) { } | 
| + | 
| +    // Work in integers to match the gint GTK APIs. | 
| +    int cp_min;  // For a selection: Represents the start. | 
| +    int cp_max;  // For a selection: Represents the end (insert position). | 
| +  }; | 
| + | 
| +  // TODO(deanm): Would be nice to insulate the thunkers better, etc. | 
| +  static void HandleBeginUserActionThunk(GtkTextBuffer* unused, gpointer self) { | 
| +    reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleBeginUserAction(); | 
| +  } | 
| +  void HandleBeginUserAction(); | 
| + | 
| +  static void HandleEndUserActionThunk(GtkTextBuffer* unused, gpointer self) { | 
| +    reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleEndUserAction(); | 
| +  } | 
| +  void HandleEndUserAction(); | 
| + | 
| +  static void HandleViewSizeRequest(GtkWidget* view, GtkRequisition* req, | 
| +                                    gpointer unused); | 
| + | 
| +  static gboolean HandleViewButtonPressThunk(GtkWidget* view, | 
| +                                             GdkEventButton* event, | 
| +                                             gpointer self) { | 
| +    return reinterpret_cast<AutocompleteEditViewGtk*>(self)-> | 
| +        HandleViewButtonPress(event); | 
| +  } | 
| +  gboolean HandleViewButtonPress(GdkEventButton* event); | 
| + | 
| +  static gboolean HandleViewFocusInThunk(GtkWidget* view, | 
| +                                          GdkEventFocus* event, | 
| +                                          gpointer self) { | 
| +    return reinterpret_cast<AutocompleteEditViewGtk*>(self)-> | 
| +        HandleViewFocusIn(); | 
| +  } | 
| +  gboolean HandleViewFocusIn(); | 
| + | 
| +  static gboolean HandleViewFocusOutThunk(GtkWidget* view, | 
| +                                          GdkEventFocus* event, | 
| +                                          gpointer self) { | 
| +    return reinterpret_cast<AutocompleteEditViewGtk*>(self)-> | 
| +        HandleViewFocusOut(); | 
| +  } | 
| +  gboolean HandleViewFocusOut(); | 
| + | 
| +  static void HandleViewMoveCursorThunk(GtkWidget* view, | 
| +                                        GtkMovementStep step, | 
| +                                        gint count, | 
| +                                        gboolean extend_selection, | 
| +                                        gpointer self) { | 
| +    reinterpret_cast<AutocompleteEditViewGtk*>(self)-> | 
| +        HandleViewMoveCursor(step, count, extend_selection); | 
| +  } | 
| +  void HandleViewMoveCursor(GtkMovementStep step, | 
| +                            gint count, | 
| +                            gboolean extendion_selection); | 
| + | 
| +  // Get the character indices of the current selection.  This honors | 
| +  // direction, cp_max is the insertion point, and cp_min is the bound. | 
| +  CharRange GetSelection(); | 
| + | 
| +  // Translate from character positions to iterators for the current buffer. | 
| +  void ItersFromCharRange(const CharRange& range, | 
| +                          GtkTextIter* iter_min, | 
| +                          GtkTextIter* iter_max); | 
| + | 
| +  // Return the number of characers in the current buffer. | 
| +  int GetTextLength(); | 
| + | 
| +  // Try to parse the current text as a URL and colorize the components. | 
| +  void EmphasizeURLComponents(); | 
| + | 
| +  // Internally invoked whenever the text changes in some way. | 
| +  void TextChanged(); | 
| + | 
| +  GtkWidget* text_view_; | 
| + | 
| +  GtkTextTagTable* tag_table_; | 
| +  GtkTextBuffer* text_buffer_; | 
| + | 
| +  GtkTextTag* base_tag_; | 
| +  GtkTextTag* secure_scheme_tag_; | 
| +  GtkTextTag* insecure_scheme_tag_; | 
| + | 
| +  scoped_ptr<AutocompleteEditModel> model_; | 
| +  scoped_ptr<AutocompletePopupViewGtk> popup_view_; | 
| +  AutocompleteEditController* controller_; | 
| +  ToolbarModel* toolbar_model_; | 
| + | 
| +  // The object that handles additional command functionality exposed on the | 
| +  // edit, such as invoking the keyword editor. | 
| +  CommandUpdater* command_updater_; | 
| + | 
| +  // When true, the location bar view is read only and also is has a slightly | 
| +  // different presentation (font size / color). This is used for popups. | 
| +  // TODO(deanm). | 
| +  bool popup_window_mode_; | 
| + | 
| +  ToolbarModel::SecurityLevel scheme_security_level_; | 
| + | 
| +  // Tracking state before and after a possible change. | 
| +  std::wstring text_before_change_; | 
| +  CharRange sel_before_change_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewGtk); | 
| +}; | 
| + | 
| +#endif  // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 
|  |