Index: chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.h |
diff --git a/chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.h b/chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.h |
deleted file mode 100644 |
index 206b33ea183159f5d9eef44b5be8cf5656d7db23..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.h |
+++ /dev/null |
@@ -1,469 +0,0 @@ |
-// Copyright 2012 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_UI_GTK_OMNIBOX_OMNIBOX_VIEW_GTK_H_ |
-#define CHROME_BROWSER_UI_GTK_OMNIBOX_OMNIBOX_VIEW_GTK_H_ |
- |
-#include <gtk/gtk.h> |
- |
-#include <algorithm> |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string_util.h" |
-#include "chrome/browser/ui/omnibox/omnibox_view.h" |
-#include "chrome/browser/ui/toolbar/toolbar_model.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "ui/base/gtk/gtk_signal.h" |
-#include "ui/base/gtk/gtk_signal_registrar.h" |
-#include "ui/base/gtk/owned_widget_gtk.h" |
-#include "ui/base/window_open_disposition.h" |
-#include "ui/gfx/rect.h" |
- |
-class Browser; |
-class OmniboxPopupView; |
-class Profile; |
- |
-namespace gfx { |
-class Font; |
-} |
- |
-class GtkThemeService; |
- |
-class OmniboxViewGtk : public OmniboxView, |
- public content::NotificationObserver { |
- public: |
- // 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) { } |
- |
- // Returns the start/end of the selection. |
- int selection_min() const { return std::min(cp_min, cp_max); } |
- int selection_max() const { return std::max(cp_min, cp_max); } |
- |
- // 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). |
- }; |
- |
- // profile parameter is introduced for unittests which can not instantiate |
- // browser object and pass NULL to the browser parameter. |
- // In other use case, you should pass browser->profile() object as |
- // profile parameter. |
- OmniboxViewGtk(OmniboxEditController* controller, |
- Browser* browser, |
- Profile* profile, |
- CommandUpdater* command_updater, |
- bool popup_window_mode, |
- GtkWidget* location_bar); |
- virtual ~OmniboxViewGtk(); |
- |
- // Initialize, create the underlying widgets, etc. |
- void Init(); |
- |
- // OmniboxView: |
- virtual void SaveStateToTab(content::WebContents* tab) OVERRIDE; |
- virtual void OnTabChanged(const content::WebContents* web_contents) OVERRIDE; |
- virtual void Update() OVERRIDE; |
- virtual base::string16 GetText() const OVERRIDE; |
- virtual void SetWindowTextAndCaretPos(const base::string16& text, |
- size_t caret_pos, |
- bool update_popup, |
- bool notify_text_changed) OVERRIDE; |
- virtual void SetForcedQuery() OVERRIDE; |
- virtual bool IsSelectAll() const OVERRIDE; |
- virtual bool DeleteAtEndPressed() OVERRIDE; |
- virtual void GetSelectionBounds( |
- base::string16::size_type* start, |
- base::string16::size_type* end) const OVERRIDE; |
- virtual void SelectAll(bool reversed) OVERRIDE; |
- virtual void UpdatePopup() OVERRIDE; |
- virtual void SetFocus() OVERRIDE; |
- virtual void ApplyCaretVisibility() OVERRIDE; |
- virtual void OnTemporaryTextMaybeChanged( |
- const base::string16& display_text, |
- bool save_original_selection, |
- bool notify_text_changed) OVERRIDE; |
- virtual bool OnInlineAutocompleteTextMaybeChanged( |
- const base::string16& display_text, size_t user_text_length) OVERRIDE; |
- virtual void OnInlineAutocompleteTextCleared() OVERRIDE; |
- virtual void OnRevertTemporaryText() OVERRIDE; |
- virtual void OnBeforePossibleChange() OVERRIDE; |
- virtual bool OnAfterPossibleChange() OVERRIDE; |
- virtual gfx::NativeView GetNativeView() const OVERRIDE; |
- virtual gfx::NativeView GetRelativeWindowForPopup() const OVERRIDE; |
- virtual void SetGrayTextAutocompletion( |
- const base::string16& suggestion) OVERRIDE; |
- virtual base::string16 GetGrayTextAutocompletion() const OVERRIDE; |
- virtual int GetTextWidth() const OVERRIDE; |
- virtual int GetWidth() const OVERRIDE; |
- virtual bool IsImeComposing() const OVERRIDE; |
- |
- // Overridden from content::NotificationObserver: |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- // Sets the colors of the gray text suggestion view according to the theme. |
- void UpdateGrayTextViewColors(); |
- |
- // Returns the text view gtk widget. May return NULL if the widget |
- // has already been destroyed. |
- GtkWidget* text_view() { |
- return text_view_; |
- } |
- |
- private: |
- friend class OmniboxViewGtkTest; |
- |
- CHROMEG_CALLBACK_0(OmniboxViewGtk, void, HandleBeginUserAction, |
- GtkTextBuffer*); |
- CHROMEG_CALLBACK_0(OmniboxViewGtk, void, HandleEndUserAction, GtkTextBuffer*); |
- CHROMEG_CALLBACK_2(OmniboxViewGtk, void, HandleMarkSet, GtkTextBuffer*, |
- GtkTextIter*, GtkTextMark*); |
- // As above, but called after the default handler. |
- CHROMEG_CALLBACK_2(OmniboxViewGtk, void, HandleMarkSetAfter, GtkTextBuffer*, |
- GtkTextIter*, GtkTextMark*); |
- CHROMEG_CALLBACK_3(OmniboxViewGtk, void, HandleInsertText, GtkTextBuffer*, |
- GtkTextIter*, const gchar*, gint); |
- CHROMEG_CALLBACK_0(OmniboxViewGtk, void, HandleKeymapDirectionChanged, |
- GdkKeymap*); |
- CHROMEG_CALLBACK_2(OmniboxViewGtk, void, HandleDeleteRange, GtkTextBuffer*, |
- GtkTextIter*, GtkTextIter*); |
- // Unlike above HandleMarkSet and HandleMarkSetAfter, this handler will always |
- // be connected to the signal. |
- CHROMEG_CALLBACK_2(OmniboxViewGtk, void, HandleMarkSetAlways, GtkTextBuffer*, |
- GtkTextIter*, GtkTextMark*); |
- |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleKeyPress, GdkEventKey*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleKeyRelease, |
- GdkEventKey*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleViewButtonPress, |
- GdkEventButton*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleViewButtonRelease, |
- GdkEventButton*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleViewFocusIn, |
- GdkEventFocus*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleViewFocusOut, |
- GdkEventFocus*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleViewMoveFocus, |
- GtkDirectionType); |
- CHROMEGTK_CALLBACK_3(OmniboxViewGtk, void, HandleViewMoveCursor, |
- GtkMovementStep, gint, gboolean); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleViewSizeRequest, |
- GtkRequisition*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandlePopulatePopup, GtkMenu*); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandlePasteAndGo); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleShowURL); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleEditSearchEngines); |
- CHROMEGTK_CALLBACK_6(OmniboxViewGtk, void, HandleDragDataReceived, |
- GdkDragContext*, gint, gint, GtkSelectionData*, |
- guint, guint); |
- CHROMEGTK_CALLBACK_4(OmniboxViewGtk, void, HandleDragDataGet, |
- GdkDragContext*, GtkSelectionData*, guint, guint); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleDragBegin, |
- GdkDragContext*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleDragEnd, |
- GdkDragContext*); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleBackSpace); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleCopyClipboard); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleCutClipboard); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandlePasteClipboard); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleExposeEvent, |
- GdkEventExpose*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, gboolean, HandleExposeEventAfter, |
- GdkEventExpose*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleWidgetDirectionChanged, |
- GtkTextDirection); |
- CHROMEGTK_CALLBACK_2(OmniboxViewGtk, void, HandleDeleteFromCursor, |
- GtkDeleteType, gint); |
- // We connect to this so we can determine our toplevel window, so we can |
- // listen to focus change events on it. |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandleHierarchyChanged, |
- GtkWidget*); |
- CHROMEGTK_CALLBACK_1(OmniboxViewGtk, void, HandlePreEditChanged, |
- const gchar*); |
- // Undo/redo operations won't trigger "begin-user-action" and |
- // "end-user-action" signals, so we need to hook into "undo" and "redo" |
- // signals and call OnBeforePossibleChange()/OnAfterPossibleChange() by |
- // ourselves. |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleUndoRedo); |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandleUndoRedoAfter); |
- |
- CHROMEG_CALLBACK_1(OmniboxViewGtk, void, HandleWindowSetFocus, |
- GtkWindow*, GtkWidget*); |
- |
- // Callback function called after context menu is closed. |
- CHROMEGTK_CALLBACK_0(OmniboxViewGtk, void, HandlePopupMenuDeactivate); |
- |
- // Callback for the PRIMARY selection clipboard. |
- static void ClipboardGetSelectionThunk(GtkClipboard* clipboard, |
- GtkSelectionData* selection_data, |
- guint info, |
- gpointer object); |
- void ClipboardGetSelection(GtkClipboard* clipboard, |
- GtkSelectionData* selection_data, |
- guint info); |
- |
- void HandleCopyOrCutClipboard(bool copy); |
- |
- // OmniboxView overrides. |
- virtual int GetOmniboxTextLength() const OVERRIDE; |
- virtual void EmphasizeURLComponents() OVERRIDE; |
- |
- // Common implementation for performing a drop on the edit view. |
- bool OnPerformDropImpl(const base::string16& text); |
- |
- // Sets the colors and font of the text view according to the theme. |
- void OnBrowserThemeChanged(); |
- |
- // Returns the font used in |text_view_|. |
- gfx::Font GetFont(); |
- |
- // Take control of the PRIMARY selection clipboard with |text|. Use |
- // |text_buffer_| as the owner, so that this doesn't remove the selection on |
- // it. This makes use of the above callbacks. |
- void OwnPrimarySelection(const std::string& text); |
- |
- // Gets the GTK_TEXT_WINDOW_WIDGET coordinates for |text_view_| that bound the |
- // given iters. |
- gfx::Rect WindowBoundsFromIters(GtkTextIter* iter1, GtkTextIter* iter2); |
- |
- // Actual implementation of SelectAll(), but also provides control over |
- // whether the PRIMARY selection is set to the selected text (in SelectAll(), |
- // it isn't, but we want set the selection when the user clicks in the entry). |
- void SelectAllInternal(bool reversed, bool update_primary_selection); |
- |
- // Get ready to update |text_buffer_|'s highlighting without making changes to |
- // the PRIMARY selection. Removes the clipboard from |text_buffer_| and |
- // blocks the "mark-set" signal handler. |
- void StartUpdatingHighlightedText(); |
- |
- // Finish updating |text_buffer_|'s highlighting such that future changes will |
- // automatically update the PRIMARY selection. Undoes |
- // StartUpdatingHighlightedText()'s changes. |
- void FinishUpdatingHighlightedText(); |
- |
- // 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() const; |
- |
- // Translate from character positions to iterators for the current buffer. |
- void ItersFromCharRange(const CharRange& range, |
- GtkTextIter* iter_min, |
- GtkTextIter* iter_max); |
- |
- // Returns true if the caret is at the end of the content. |
- bool IsCaretAtEnd() const; |
- |
- // Save |selected_text| as the PRIMARY X selection. Unlike |
- // OwnPrimarySelection(), this won't set an owner or use callbacks. |
- void SavePrimarySelection(const std::string& selected_text); |
- |
- // Update the field with |text| and set the selection. |
- void SetTextAndSelectedRange(const base::string16& text, |
- const CharRange& range); |
- |
- // Set the selection to |range|. |
- void SetSelectedRange(const CharRange& range); |
- |
- // Adjust the text justification according to the text direction of the widget |
- // and |text_buffer_|'s content, to make sure the real text justification is |
- // always in sync with the UI language direction. |
- void AdjustTextJustification(); |
- |
- // Get the text direction of |text_buffer_|'s content, by searching the first |
- // character that has a strong direction. |
- PangoDirection GetContentDirection(); |
- |
- // Returns the selected text. |
- std::string GetSelectedText() const; |
- |
- // If the selected text parses as a URL OwnPrimarySelection is invoked. |
- void UpdatePrimarySelectionIfValidURL(); |
- |
- // Retrieves the first and last iterators in the |text_buffer_|, but excludes |
- // the anchor holding the |gray_text_view_| widget. |
- void GetTextBufferBounds(GtkTextIter* start, GtkTextIter* end) const; |
- |
- // Validates an iterator in the |text_buffer_|, to make sure it doesn't go |
- // beyond the anchor for holding the |gray_text_view_| widget. |
- void ValidateTextBufferIter(GtkTextIter* iter) const; |
- |
- // Adjusts vertical alignment of the |gray_text_view_| in the |text_view_|, to |
- // make sure they have the same baseline. |
- void AdjustVerticalAlignmentOfGrayTextView(); |
- |
- // The Browser that contains this omnibox. |
- Browser* browser_; |
- |
- // The widget we expose, used for vertically centering the real text edit, |
- // since the height will change based on the font / font size, etc. |
- ui::OwnedWidgetGtk alignment_; |
- |
- // The actual text entry which will be owned by the alignment_. The |
- // reference will be set to NULL upon destruction to tell if the gtk |
- // widget tree has been destroyed. This is because gtk destroies child |
- // widgets if the parent (alignemtn_)'s refcount does not go down to 0. |
- GtkWidget* text_view_; |
- |
- GtkTextTagTable* tag_table_; |
- GtkTextBuffer* text_buffer_; |
- GtkTextTag* faded_text_tag_; |
- GtkTextTag* secure_scheme_tag_; |
- GtkTextTag* security_error_scheme_tag_; |
- GtkTextTag* normal_text_tag_; |
- |
- // Objects for the gray suggestion text view. |
- GtkTextTag* gray_text_anchor_tag_; |
- |
- // A widget for displaying gray autocompletion text. It'll be attached to a |
- // child anchor in the |text_buffer_| object. |
- GtkWidget* gray_text_view_; |
- |
- // A mark to split the content and the gray text anchor. Wherever the end |
- // iterator of the text buffer is required, the iterator to this mark should |
- // be used. |
- GtkTextMark* gray_text_mark_; |
- |
- scoped_ptr<OmniboxPopupView> popup_view_; |
- |
- // When true, the location bar view is read only and also is has a slightly |
- // different presentation (smaller font size). This is used for popups. |
- bool popup_window_mode_; |
- |
- ToolbarModel::SecurityLevel security_level_; |
- |
- // Selection at the point where the user started using the |
- // arrows to move around in the popup. |
- CharRange saved_temporary_selection_; |
- |
- // Tracking state before and after a possible change. |
- base::string16 text_before_change_; |
- CharRange sel_before_change_; |
- |
- // The most-recently-selected text from the entry that was copied to the |
- // clipboard. This is updated on-the-fly as the user selects text. This may |
- // differ from the actual selected text, such as when 'http://' is prefixed to |
- // the text. It is used in cases where we need to make the PRIMARY selection |
- // persist even after the user has unhighlighted the text in the view |
- // (e.g. when they highlight some text and then click to unhighlight it, we |
- // pass this string to SavePrimarySelection()). |
- std::string selected_text_; |
- |
- std::string dragged_text_; |
- // When we own the X clipboard, this is the text for it. |
- std::string primary_selection_text_; |
- |
- // IDs of the signal handlers for "mark-set" on |text_buffer_|. |
- gulong mark_set_handler_id_; |
- gulong mark_set_handler_id2_; |
- |
- // Is the first mouse button currently down? When selection marks get moved, |
- // we use this to determine if the user was highlighting text with the mouse |
- // -- if so, we avoid selecting all the text on mouse-up. |
- bool button_1_pressed_; |
- |
- // Supplies colors, et cetera. |
- GtkThemeService* theme_service_; |
- |
- content::NotificationRegistrar registrar_; |
- |
- // Indicates if Enter key was pressed. |
- // |
- // It's used in the key press handler to detect an Enter key press event |
- // during sync dispatch of "end-user-action" signal so that an unexpected |
- // change caused by the event can be ignored in OnAfterPossibleChange(). |
- bool enter_was_pressed_; |
- |
- // Indicates if Tab key was pressed. |
- // |
- // It's only used in the key press handler to detect a Tab key press event |
- // during sync dispatch of "move-focus" signal. |
- bool tab_was_pressed_; |
- |
- // Indicates if Shift key was pressed. |
- // Used in conjunction with the Tab key to determine if either traversal |
- // needs to move up the results or if the keyword needs to be cleared. |
- bool shift_was_pressed_; |
- |
- // Indicates that user requested to paste clipboard. |
- // The actual paste clipboard action might be performed later if the |
- // clipboard is not empty. |
- bool paste_clipboard_requested_; |
- |
- // Text to "Paste and go"; set by HandlePopulatePopup() and consumed by |
- // HandlePasteAndGo(). |
- base::string16 sanitized_text_for_paste_and_go_; |
- |
- // Indicates if an Enter key press is inserted as text. |
- // It's used in the key press handler to determine if an Enter key event is |
- // handled by IME or not. |
- bool enter_was_inserted_; |
- |
- // Indicates whether the IME changed the text. It's possible for the IME to |
- // handle a key event but not change the text contents (e.g., when pressing |
- // shift+del with no selection). |
- bool text_changed_; |
- |
- // Contains the character range that should have a strikethrough (used for |
- // insecure schemes). If the range is size one or less, no strikethrough |
- // is needed. |
- CharRange strikethrough_; |
- |
- // Indicates if the selected text is suggested text or not. If the selection |
- // is not suggested text, that means the user manually made the selection. |
- bool selection_suggested_; |
- |
- // Was delete pressed? |
- bool delete_was_pressed_; |
- |
- // Was the delete key pressed with an empty selection at the end of the edit? |
- bool delete_at_end_pressed_; |
- |
- // Indicates if we are handling a key press event. |
- bool handling_key_press_; |
- |
- // Indicates if omnibox's content maybe changed by a key press event, so that |
- // we need to call OnAfterPossibleChange() after handling the event. |
- // This flag should be set for changes directly caused by a key press event, |
- // including changes to content text, selection range and pre-edit string. |
- // Changes caused by function calls like SetUserText() should not affect this |
- // flag. |
- bool content_maybe_changed_by_key_press_; |
- |
- // Set this flag to call UpdatePopup() in lost focus and need to update. |
- // Because context menu might take the focus, before setting the flag, check |
- // the focus with model_->has_focus(). |
- bool update_popup_without_focus_; |
- |
- // On GTK 2.20+ |pre_edit_| and |pre_edit_size_before_change_| will be used. |
- const bool supports_pre_edit_; |
- |
- // Stores the text being composed by the input method. |
- base::string16 pre_edit_; |
- |
- // Tracking pre-edit state before and after a possible change. We don't need |
- // to track pre-edit_'s content, as it'll be treated as part of text content. |
- size_t pre_edit_size_before_change_; |
- |
- // The view that is going to be focused next. Only valid while handling |
- // "focus-out" events. |
- GtkWidget* going_to_focus_; |
- |
- ui::GtkSignalRegistrar signals_; |
- |
- // The baseline shift to be made to center the text. Positive values move |
- // the text upward. |
- double font_baseline_shift_; |
- |
- DISALLOW_COPY_AND_ASSIGN(OmniboxViewGtk); |
-}; |
- |
-#endif // CHROME_BROWSER_UI_GTK_OMNIBOX_OMNIBOX_VIEW_GTK_H_ |