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 |
index 70e32f3e68d540ad4751750ddeb385221185ec72..97708d046c9d66d2cb93f53bd860591a164a4ee9 100644 |
--- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h |
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h |
@@ -26,6 +26,18 @@ class TabContents; |
class AutocompleteEditViewGtk : public AutocompleteEditView { |
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) { } |
+ |
+ // 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). |
+ }; |
+ |
AutocompleteEditViewGtk(AutocompleteEditController* controller, |
ToolbarModel* toolbar_model, |
Profile* profile, |
@@ -86,18 +98,6 @@ class AutocompleteEditViewGtk : public AutocompleteEditView { |
virtual bool OnAfterPossibleChange(); |
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(); |
@@ -201,6 +201,17 @@ class AutocompleteEditViewGtk : public AutocompleteEditView { |
} |
void HandlePasteAndGoReceivedText(const std::wstring& text); |
+ static void HandleMarkSetThunk(GtkTextBuffer* buffer, |
+ GtkTextIter* location, |
+ GtkTextMark* mark, |
+ gpointer self) { |
+ reinterpret_cast<AutocompleteEditViewGtk*>(self)-> |
+ HandleMarkSet(buffer, location, mark); |
+ } |
+ void HandleMarkSet(GtkTextBuffer* buffer, |
+ GtkTextIter* location, |
+ GtkTextMark* mark); |
+ |
// 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(); |
@@ -219,6 +230,9 @@ class AutocompleteEditViewGtk : public AutocompleteEditView { |
// Internally invoked whenever the text changes in some way. |
void TextChanged(); |
+ // Save 'selected_text' as the PRIMARY X selection. |
+ void SavePrimarySelection(const std::string& selected_text); |
+ |
// The widget we expose, used for vertically centering the real text edit, |
// since the height will change based on the font / font size, etc. |
OwnedWidgetGtk alignment_; |
@@ -233,11 +247,6 @@ class AutocompleteEditViewGtk : public AutocompleteEditView { |
GtkTextTag* insecure_scheme_tag_; |
GtkTextTag* black_text_tag_; |
- // The primary selection clipboard for our text view widget. This is used |
- // for working around some clipboard manager (klipper / glipper) bugs by |
- // removing and adding back the clipboard around inline autocomplete. |
- GtkClipboard* primary_clipboard_; |
- |
scoped_ptr<AutocompleteEditModel> model_; |
scoped_ptr<AutocompletePopupViewGtk> popup_view_; |
AutocompleteEditController* controller_; |
@@ -258,6 +267,17 @@ class AutocompleteEditViewGtk : public AutocompleteEditView { |
std::wstring text_before_change_; |
CharRange sel_before_change_; |
+ // The most-recently-selected text from the entry. This is updated on-the-fly |
+ // as the user selects 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_; |
+ |
+ // Has the current value of 'selected_text_' been saved as the PRIMARY |
+ // selection? |
+ bool selection_saved_; |
+ |
DISALLOW_COPY_AND_ASSIGN(AutocompleteEditViewGtk); |
}; |