| 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 #ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ |
| 6 #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 6 #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ |
| 7 | 7 |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/scoped_ptr.h" | 11 #include "base/scoped_ptr.h" |
| 12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
| 13 #include "chrome/browser/autocomplete/autocomplete_edit_view.h" | 13 #include "chrome/browser/autocomplete/autocomplete_edit_view.h" |
| 14 #include "chrome/browser/toolbar_model.h" | 14 #include "chrome/browser/toolbar_model.h" |
| 15 #include "chrome/common/owned_widget_gtk.h" | 15 #include "chrome/common/owned_widget_gtk.h" |
| 16 #include "chrome/common/page_transition_types.h" | 16 #include "chrome/common/page_transition_types.h" |
| 17 #include "webkit/glue/window_open_disposition.h" | 17 #include "webkit/glue/window_open_disposition.h" |
| 18 | 18 |
| 19 class AutocompleteEditController; | 19 class AutocompleteEditController; |
| 20 class AutocompleteEditModel; | 20 class AutocompleteEditModel; |
| 21 class AutocompletePopupPositioner; | 21 class AutocompletePopupPositioner; |
| 22 class AutocompletePopupViewGtk; | 22 class AutocompletePopupViewGtk; |
| 23 class CommandUpdater; | 23 class CommandUpdater; |
| 24 class Profile; | 24 class Profile; |
| 25 class TabContents; | 25 class TabContents; |
| 26 | 26 |
| 27 class AutocompleteEditViewGtk : public AutocompleteEditView { | 27 class AutocompleteEditViewGtk : public AutocompleteEditView { |
| 28 public: | 28 public: |
| 29 // Modeled like the Windows CHARRANGE. Represent a pair of cursor position |
| 30 // offsets. Since GtkTextIters are invalid after the buffer is changed, we |
| 31 // work in character offsets (not bytes). |
| 32 struct CharRange { |
| 33 CharRange() : cp_min(0), cp_max(0) { } |
| 34 CharRange(int n, int x) : cp_min(n), cp_max(x) { } |
| 35 |
| 36 // Work in integers to match the gint GTK APIs. |
| 37 int cp_min; // For a selection: Represents the start. |
| 38 int cp_max; // For a selection: Represents the end (insert position). |
| 39 }; |
| 40 |
| 29 AutocompleteEditViewGtk(AutocompleteEditController* controller, | 41 AutocompleteEditViewGtk(AutocompleteEditController* controller, |
| 30 ToolbarModel* toolbar_model, | 42 ToolbarModel* toolbar_model, |
| 31 Profile* profile, | 43 Profile* profile, |
| 32 CommandUpdater* command_updater, | 44 CommandUpdater* command_updater, |
| 33 AutocompletePopupPositioner* popup_positioner); | 45 AutocompletePopupPositioner* popup_positioner); |
| 34 ~AutocompleteEditViewGtk(); | 46 ~AutocompleteEditViewGtk(); |
| 35 | 47 |
| 36 // Initialize, create the underlying widgets, etc. | 48 // Initialize, create the underlying widgets, etc. |
| 37 void Init(); | 49 void Init(); |
| 38 | 50 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 | 91 |
| 80 virtual void OnTemporaryTextMaybeChanged(const std::wstring& display_text, | 92 virtual void OnTemporaryTextMaybeChanged(const std::wstring& display_text, |
| 81 bool save_original_selection); | 93 bool save_original_selection); |
| 82 virtual bool OnInlineAutocompleteTextMaybeChanged( | 94 virtual bool OnInlineAutocompleteTextMaybeChanged( |
| 83 const std::wstring& display_text, size_t user_text_length); | 95 const std::wstring& display_text, size_t user_text_length); |
| 84 virtual void OnRevertTemporaryText(); | 96 virtual void OnRevertTemporaryText(); |
| 85 virtual void OnBeforePossibleChange(); | 97 virtual void OnBeforePossibleChange(); |
| 86 virtual bool OnAfterPossibleChange(); | 98 virtual bool OnAfterPossibleChange(); |
| 87 | 99 |
| 88 private: | 100 private: |
| 89 // Modeled like the Windows CHARRANGE. Represent a pair of cursor position | |
| 90 // offsets. Since GtkTextIters are invalid after the buffer is changed, we | |
| 91 // work in character offsets (not bytes). | |
| 92 struct CharRange { | |
| 93 CharRange() : cp_min(0), cp_max(0) { } | |
| 94 CharRange(int n, int x) : cp_min(n), cp_max(x) { } | |
| 95 | |
| 96 // Work in integers to match the gint GTK APIs. | |
| 97 int cp_min; // For a selection: Represents the start. | |
| 98 int cp_max; // For a selection: Represents the end (insert position). | |
| 99 }; | |
| 100 | |
| 101 // TODO(deanm): Would be nice to insulate the thunkers better, etc. | 101 // TODO(deanm): Would be nice to insulate the thunkers better, etc. |
| 102 static void HandleBeginUserActionThunk(GtkTextBuffer* unused, gpointer self) { | 102 static void HandleBeginUserActionThunk(GtkTextBuffer* unused, gpointer self) { |
| 103 reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleBeginUserAction(); | 103 reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleBeginUserAction(); |
| 104 } | 104 } |
| 105 void HandleBeginUserAction(); | 105 void HandleBeginUserAction(); |
| 106 | 106 |
| 107 static void HandleEndUserActionThunk(GtkTextBuffer* unused, gpointer self) { | 107 static void HandleEndUserActionThunk(GtkTextBuffer* unused, gpointer self) { |
| 108 reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleEndUserAction(); | 108 reinterpret_cast<AutocompleteEditViewGtk*>(self)->HandleEndUserAction(); |
| 109 } | 109 } |
| 110 void HandleEndUserAction(); | 110 void HandleEndUserAction(); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 const gchar* text, | 194 const gchar* text, |
| 195 gpointer self) { | 195 gpointer self) { |
| 196 // If there is nothing to paste (|text| is NULL), do nothing. | 196 // If there is nothing to paste (|text| is NULL), do nothing. |
| 197 if (!text) | 197 if (!text) |
| 198 return; | 198 return; |
| 199 reinterpret_cast<AutocompleteEditViewGtk*>(self)-> | 199 reinterpret_cast<AutocompleteEditViewGtk*>(self)-> |
| 200 HandlePasteAndGoReceivedText(UTF8ToWide(text)); | 200 HandlePasteAndGoReceivedText(UTF8ToWide(text)); |
| 201 } | 201 } |
| 202 void HandlePasteAndGoReceivedText(const std::wstring& text); | 202 void HandlePasteAndGoReceivedText(const std::wstring& text); |
| 203 | 203 |
| 204 static void HandleMarkSetThunk(GtkTextBuffer* buffer, |
| 205 GtkTextIter* location, |
| 206 GtkTextMark* mark, |
| 207 gpointer self) { |
| 208 reinterpret_cast<AutocompleteEditViewGtk*>(self)-> |
| 209 HandleMarkSet(buffer, location, mark); |
| 210 } |
| 211 void HandleMarkSet(GtkTextBuffer* buffer, |
| 212 GtkTextIter* location, |
| 213 GtkTextMark* mark); |
| 214 |
| 204 // Get the character indices of the current selection. This honors | 215 // Get the character indices of the current selection. This honors |
| 205 // direction, cp_max is the insertion point, and cp_min is the bound. | 216 // direction, cp_max is the insertion point, and cp_min is the bound. |
| 206 CharRange GetSelection(); | 217 CharRange GetSelection(); |
| 207 | 218 |
| 208 // Translate from character positions to iterators for the current buffer. | 219 // Translate from character positions to iterators for the current buffer. |
| 209 void ItersFromCharRange(const CharRange& range, | 220 void ItersFromCharRange(const CharRange& range, |
| 210 GtkTextIter* iter_min, | 221 GtkTextIter* iter_min, |
| 211 GtkTextIter* iter_max); | 222 GtkTextIter* iter_max); |
| 212 | 223 |
| 213 // Return the number of characers in the current buffer. | 224 // Return the number of characers in the current buffer. |
| 214 int GetTextLength(); | 225 int GetTextLength(); |
| 215 | 226 |
| 216 // Try to parse the current text as a URL and colorize the components. | 227 // Try to parse the current text as a URL and colorize the components. |
| 217 void EmphasizeURLComponents(); | 228 void EmphasizeURLComponents(); |
| 218 | 229 |
| 219 // Internally invoked whenever the text changes in some way. | 230 // Internally invoked whenever the text changes in some way. |
| 220 void TextChanged(); | 231 void TextChanged(); |
| 221 | 232 |
| 233 // Save 'selected_text' as the PRIMARY X selection. |
| 234 void SavePrimarySelection(const std::string& selected_text); |
| 235 |
| 222 // The widget we expose, used for vertically centering the real text edit, | 236 // The widget we expose, used for vertically centering the real text edit, |
| 223 // since the height will change based on the font / font size, etc. | 237 // since the height will change based on the font / font size, etc. |
| 224 OwnedWidgetGtk alignment_; | 238 OwnedWidgetGtk alignment_; |
| 225 | 239 |
| 226 // The actual text entry which will be owned by the alignment_. | 240 // The actual text entry which will be owned by the alignment_. |
| 227 GtkWidget* text_view_; | 241 GtkWidget* text_view_; |
| 228 | 242 |
| 229 GtkTextTagTable* tag_table_; | 243 GtkTextTagTable* tag_table_; |
| 230 GtkTextBuffer* text_buffer_; | 244 GtkTextBuffer* text_buffer_; |
| 231 GtkTextTag* base_tag_; | 245 GtkTextTag* base_tag_; |
| 232 GtkTextTag* secure_scheme_tag_; | 246 GtkTextTag* secure_scheme_tag_; |
| 233 GtkTextTag* insecure_scheme_tag_; | 247 GtkTextTag* insecure_scheme_tag_; |
| 234 GtkTextTag* black_text_tag_; | 248 GtkTextTag* black_text_tag_; |
| 235 | 249 |
| 236 // The primary selection clipboard for our text view widget. This is used | |
| 237 // for working around some clipboard manager (klipper / glipper) bugs by | |
| 238 // removing and adding back the clipboard around inline autocomplete. | |
| 239 GtkClipboard* primary_clipboard_; | |
| 240 | |
| 241 scoped_ptr<AutocompleteEditModel> model_; | 250 scoped_ptr<AutocompleteEditModel> model_; |
| 242 scoped_ptr<AutocompletePopupViewGtk> popup_view_; | 251 scoped_ptr<AutocompletePopupViewGtk> popup_view_; |
| 243 AutocompleteEditController* controller_; | 252 AutocompleteEditController* controller_; |
| 244 ToolbarModel* toolbar_model_; | 253 ToolbarModel* toolbar_model_; |
| 245 | 254 |
| 246 // The object that handles additional command functionality exposed on the | 255 // The object that handles additional command functionality exposed on the |
| 247 // edit, such as invoking the keyword editor. | 256 // edit, such as invoking the keyword editor. |
| 248 CommandUpdater* command_updater_; | 257 CommandUpdater* command_updater_; |
| 249 | 258 |
| 250 // When true, the location bar view is read only and also is has a slightly | 259 // When true, the location bar view is read only and also is has a slightly |
| 251 // different presentation (font size / color). This is used for popups. | 260 // different presentation (font size / color). This is used for popups. |
| 252 // TODO(deanm). | 261 // TODO(deanm). |
| 253 bool popup_window_mode_; | 262 bool popup_window_mode_; |
| 254 | 263 |
| 255 ToolbarModel::SecurityLevel scheme_security_level_; | 264 ToolbarModel::SecurityLevel scheme_security_level_; |
| 256 | 265 |
| 257 // Tracking state before and after a possible change. | 266 // Tracking state before and after a possible change. |
| 258 std::wstring text_before_change_; | 267 std::wstring text_before_change_; |
| 259 CharRange sel_before_change_; | 268 CharRange sel_before_change_; |
| 260 | 269 |
| 270 // The most-recently-selected text from the entry. This is updated on-the-fly |
| 271 // as the user selects text. It is used in cases where we need to make the |
| 272 // PRIMARY selection persist even after the user has unhighlighted the text in |
| 273 // the view (e.g. when they highlight some text and then click to unhighlight |
| 274 // it, we pass this string to SavePrimarySelection()). |
| 275 std::string selected_text_; |
| 276 |
| 277 // Has the current value of 'selected_text_' been saved as the PRIMARY |
| 278 // selection? |
| 279 bool selection_saved_; |
| 280 |
| 261 DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewGtk); | 281 DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewGtk); |
| 262 }; | 282 }; |
| 263 | 283 |
| 264 #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ | 284 #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_EDIT_VIEW_GTK_H_ |
| OLD | NEW |