Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: chrome/browser/autofill/autofill_external_delegate_gtk.cc

Issue 9235072: Adding Mouse Support for new GTK Autofill (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "chrome/browser/autofill/autofill_external_delegate_gtk.h" 5 #include "chrome/browser/autofill/autofill_external_delegate_gtk.h"
6 6
7 #include "chrome/browser/ui/gtk/autofill/autofill_popup_view_gtk.h" 7 #include "chrome/browser/ui/gtk/autofill/autofill_popup_view_gtk.h"
8 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 8 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
9 #include "content/public/browser/web_contents.h" 9 #include "content/public/browser/web_contents.h"
10 #include "content/public/browser/web_contents_view.h" 10 #include "content/public/browser/web_contents_view.h"
11 11
12 AutofillExternalDelegate* AutofillExternalDelegate::Create( 12 AutofillExternalDelegate* AutofillExternalDelegate::Create(
13 TabContentsWrapper* tab_contents_wrapper, 13 TabContentsWrapper* tab_contents_wrapper,
14 AutofillManager* autofill_manager) { 14 AutofillManager* autofill_manager) {
15 return new AutofillExternalDelegateGtk(tab_contents_wrapper, 15 return new AutofillExternalDelegateGtk(tab_contents_wrapper,
16 autofill_manager); 16 autofill_manager);
17 } 17 }
18 18
19 AutofillExternalDelegateGtk::AutofillExternalDelegateGtk( 19 AutofillExternalDelegateGtk::AutofillExternalDelegateGtk(
20 TabContentsWrapper* tab_contents_wrapper, 20 TabContentsWrapper* tab_contents_wrapper,
21 AutofillManager* autofill_manager) 21 AutofillManager* autofill_manager)
22 : AutofillExternalDelegate(tab_contents_wrapper, autofill_manager), 22 : AutofillExternalDelegate(tab_contents_wrapper, autofill_manager),
23 web_contents_(tab_contents_wrapper->web_contents()) { 23 web_contents_(tab_contents_wrapper->web_contents()) {
24 tab_native_view_ = web_contents_->GetView()->GetNativeView(); 24 tab_native_view_ = web_contents_->GetView()->GetNativeView();
25 } 25 }
26 26
27 AutofillExternalDelegateGtk::~AutofillExternalDelegateGtk() { 27 AutofillExternalDelegateGtk::~AutofillExternalDelegateGtk() {
28 } 28 }
29 29
30 void AutofillExternalDelegateGtk::HideAutofillPopup() {
31 if (!view_.get())
32 return;
33
34 view_->Hide();
35 view_.reset();
36
37 GtkWidget* toplevel = gtk_widget_get_toplevel(tab_native_view_);
38 g_signal_handler_disconnect(toplevel, event_handler_id_);
39 }
40
30 void AutofillExternalDelegateGtk::OnQueryPlatformSpecific( 41 void AutofillExternalDelegateGtk::OnQueryPlatformSpecific(
31 int query_id, 42 int query_id,
32 const webkit::forms::FormData& form, 43 const webkit::forms::FormData& form,
33 const webkit::forms::FormField& field, 44 const webkit::forms::FormField& field,
34 const gfx::Rect& bounds) { 45 const gfx::Rect& bounds) {
35 CreateViewIfNeeded(); 46 CreateViewIfNeeded();
36 view_->set_element_bounds(bounds); 47 view_->set_element_bounds(bounds);
37 } 48 }
38 49
39 void AutofillExternalDelegateGtk::ApplyAutofillSuggestions( 50 void AutofillExternalDelegateGtk::ApplyAutofillSuggestions(
40 const std::vector<string16>& autofill_values, 51 const std::vector<string16>& autofill_values,
41 const std::vector<string16>& autofill_labels, 52 const std::vector<string16>& autofill_labels,
42 const std::vector<string16>& autofill_icons, 53 const std::vector<string16>& autofill_icons,
43 const std::vector<int>& autofill_unique_ids, 54 const std::vector<int>& autofill_unique_ids,
44 int separator_index) { 55 int separator_index) {
45 view_->Show(autofill_values, 56 view_->Show(autofill_values,
46 autofill_labels, 57 autofill_labels,
47 autofill_icons, 58 autofill_icons,
48 autofill_unique_ids, 59 autofill_unique_ids,
49 separator_index); 60 separator_index);
50 } 61 }
51 62
52 void AutofillExternalDelegateGtk::HideAutofillPopup() {
53 if (!view_.get())
54 return;
55
56 view_->Hide();
57 view_.reset();
58
59 GtkWidget* toplevel = gtk_widget_get_toplevel(tab_native_view_);
60 g_signal_handler_disconnect(toplevel, event_handler_id_);
61 }
62
63 void AutofillExternalDelegateGtk::CreateViewIfNeeded() { 63 void AutofillExternalDelegateGtk::CreateViewIfNeeded() {
64 if (view_.get()) 64 if (view_.get())
65 return; 65 return;
66 66
67 view_.reset(new AutofillPopupViewGtk(web_contents_, 67 view_.reset(new AutofillPopupViewGtk(web_contents_,
68 this,
68 tab_native_view_)); 69 tab_native_view_));
69 70
70 GtkWidget* toplevel = gtk_widget_get_toplevel(tab_native_view_); 71 GtkWidget* toplevel = gtk_widget_get_toplevel(tab_native_view_);
71 if (!g_signal_handler_is_connected(toplevel, event_handler_id_)) { 72 if (!g_signal_handler_is_connected(toplevel, event_handler_id_)) {
72 event_handler_id_ = g_signal_connect( 73 event_handler_id_ = g_signal_connect(
73 toplevel, 74 toplevel,
74 "focus-out-event", 75 "focus-out-event",
75 G_CALLBACK(HandleViewFocusOutThunk), 76 G_CALLBACK(HandleViewFocusOutThunk),
76 this); 77 this);
77 } 78 }
78 } 79 }
79 80
80 gboolean AutofillExternalDelegateGtk::HandleViewFocusOut(GtkWidget* sender, 81 gboolean AutofillExternalDelegateGtk::HandleViewFocusOut(GtkWidget* sender,
81 GdkEventFocus* event) { 82 GdkEventFocus* event) {
82 HideAutofillPopup(); 83 HideAutofillPopup();
83 84
84 return TRUE; 85 return TRUE;
85 } 86 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698