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

Issue 155175: GTK: Support for more drag targets in renderer destination.... (Closed)

Created:
11 years, 5 months ago by Evan Stade
Modified:
9 years, 6 months ago
Reviewers:
tony, Elliot Glaysher
CC:
chromium-reviews_googlegroups.com, brettw, Ben Goodger (Google)
Visibility:
Public.

Description

GTK: Support for more drag targets in renderer destination. BUG=http://crbug.com/15429 TEST=drag a file from konqueror to the web view; observe that it causes the browser to navigate there (assuming you don't drag it into an <input> field or something). Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=20108

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+46 lines, -12 lines) Patch
M chrome/browser/tab_contents/tab_contents_view_gtk.cc View 3 chunks +46 lines, -12 lines 0 comments Download

Messages

Total messages: 2 (0 generated)
Evan Stade
11 years, 5 months ago (2009-07-07 22:31:05 UTC) #1
Elliot Glaysher
11 years, 5 months ago (2009-07-07 22:48:12 UTC) #2
LGTM

On Tue, Jul 7, 2009 at 3:31 PM, <estade@chromium.org> wrote:
> Reviewers: tony, Elliot Glaysher,
>
> Description:
> GTK: Support for more drag targets in renderer destination.
>
> BUG=3Dhttp://crbug.com/15429
> TEST=3Ddrag a file from konqueror to the web view; observe that it causes
> the browser to navigate there (assuming you don't drag it into an
> <input> field or something).
>
>
> Please review this at http://codereview.chromium.org/155175
>
> SVN Base: svn://chrome-svn/chrome/trunk/src/
>
> Affected files:
> =A0M =A0 =A0 chrome/browser/tab_contents/tab_contents_view_gtk.cc
>
>
> Index: chrome/browser/tab_contents/tab_contents_view_gtk.cc
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- chrome/browser/tab_contents/tab_contents_view_gtk.cc =A0 =A0 =A0 =A0(=
revision
> 20047)
> +++ chrome/browser/tab_contents/tab_contents_view_gtk.cc =A0 =A0 =A0 =A0(=
working
> copy)
> @@ -179,14 +179,21 @@
> =A0 =A0 if (context_ !=3D context) {
> =A0 =A0 =A0 context_ =3D context;
> =A0 =A0 =A0 drop_data_.reset(new WebDropData);
> - =A0 =A0 =A0data_requests_ =3D 0;
> =A0 =A0 =A0 is_drop_target_ =3D false;
>
> - =A0 =A0 =A0// TODO(estade): support other targets. When we start suppor=
t URL
> drags,
> - =A0 =A0 =A0// we'll have to worry about interstitial pages (see
> web_drop_target.cc).
> - =A0 =A0 =A0data_requests_++;
> - =A0 =A0 =A0gtk_drag_get_data(widget_, context,
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0gdk_atom_intern("text/pl=
ain", FALSE), time);
> + =A0 =A0 =A0static int supported_targets[] =3D {
> + =A0 =A0 =A0 =A0GtkDndUtil::X_CHROME_TEXT_PLAIN,
> + =A0 =A0 =A0 =A0GtkDndUtil::X_CHROME_TEXT_URI_LIST,
> + =A0 =A0 =A0 =A0GtkDndUtil::X_CHROME_TEXT_HTML,
> + =A0 =A0 =A0 =A0// TODO(estade): support image drags?
> + =A0 =A0 =A0};
> +
> + =A0 =A0 =A0data_requests_ =3D arraysize(supported_targets);
> + =A0 =A0 =A0for (size_t i =3D 0; i < arraysize(supported_targets); ++i) =
{
> + =A0 =A0 =A0 =A0gtk_drag_get_data(widget_, context,
> +
> =A0GtkDndUtil::GetAtomForTarget(supported_targets[i]),
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0time);
> + =A0 =A0 =A0}
> =A0 =A0 } else if (data_requests_ =3D=3D 0) {
> =A0 =A0 =A0 tab_contents_->render_view_host()->
> =A0 =A0 =A0 =A0 =A0 DragTargetDragOver(ClientPoint(), ScreenPoint());
> @@ -212,14 +219,42 @@
>
> =A0 =A0 data_requests_--;
>
> - =A0 =A0// If the source can't provide us with valid data for a requeste=
d
> target,
> - =A0 =A0// data->data will be NULL.
> + =A0 =A0// Decode the data.
> =A0 =A0 if (data->data) {
> - =A0 =A0 =A0drop_data_->plain_text =3D UTF8ToUTF16(std::string(
> - =A0 =A0 =A0 =A0 =A0reinterpret_cast<char*>(data->data), data->length));
> + =A0 =A0 =A0// If the source can't provide us with valid data for a requ=
ested
> target,
> + =A0 =A0 =A0// data->data will be NULL.
> + =A0 =A0 =A0if (data->target =3D=3D
> + =A0 =A0 =A0 =A0 =A0GtkDndUtil::GetAtomForTarget(GtkDndUtil::X_CHROME_TE=
XT_PLAIN)) {
> + =A0 =A0 =A0 =A0guchar* text =3D gtk_selection_data_get_text(data);
> + =A0 =A0 =A0 =A0if (text) {
> + =A0 =A0 =A0 =A0 =A0drop_data_->plain_text =3D UTF8ToUTF16(std::string(
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0reinterpret_cast<char*>(text), data->length)=
);
> + =A0 =A0 =A0 =A0 =A0g_free(text);
> + =A0 =A0 =A0 =A0}
> + =A0 =A0 =A0} else if (data->target =3D=3D
> + =A0 =A0 =A0 =A0 =A0GtkDndUtil::GetAtomForTarget(GtkDndUtil::X_CHROME_TE=
XT_URI_LIST))
> {
> + =A0 =A0 =A0 =A0gchar** uris =3D gtk_selection_data_get_uris(data);
> + =A0 =A0 =A0 =A0if (uris) {
> + =A0 =A0 =A0 =A0 =A0for (gchar** uri_iter =3D uris; *uri_iter; uri_iter+=
+) {
> + =A0 =A0 =A0 =A0 =A0 =A0// TODO(estade): Can the filenames have a non-UT=
F8 encoding?
> + =A0 =A0 =A0 =A0 =A0 =A0drop_data_->filenames.push_back(UTF8ToUTF16(*uri=
_iter));
> + =A0 =A0 =A0 =A0 =A0}
> + =A0 =A0 =A0 =A0 =A0// Also, write the first URI as the URL.
> + =A0 =A0 =A0 =A0 =A0if (uris[0])
> + =A0 =A0 =A0 =A0 =A0 =A0drop_data_->url =3D GURL(uris[0]);
> + =A0 =A0 =A0 =A0 =A0g_strfreev(uris);
> + =A0 =A0 =A0 =A0}
> + =A0 =A0 =A0} else if (data->target =3D=3D
> + =A0 =A0 =A0 =A0 =A0GtkDndUtil::GetAtomForTarget(GtkDndUtil::X_CHROME_TE=
XT_HTML)) {
> + =A0 =A0 =A0 =A0// TODO(estade): Can the html have a non-UTF8 encoding?
> + =A0 =A0 =A0 =A0drop_data_->text_html =3D UTF8ToUTF16(std::string(
> + =A0 =A0 =A0 =A0 =A0 =A0reinterpret_cast<char*>(data->data), data->lengt=
h));
> + =A0 =A0 =A0 =A0// We leave the base URL empty.
> + =A0 =A0 =A0}
> =A0 =A0 }
>
> =A0 =A0 if (data_requests_ =3D=3D 0) {
> + =A0 =A0 =A0// Tell the renderer about the drag.
> =A0 =A0 =A0 // |x| and |y| are seemingly arbitrary at this point.
> =A0 =A0 =A0 tab_contents_->render_view_host()->
> =A0 =A0 =A0 =A0 =A0 DragTargetDragEnter(*drop_data_.get(), ClientPoint(),
> ScreenPoint());
> @@ -437,8 +472,7 @@
> =A0}
>
> =A0void TabContentsViewGtk::OnContentsDestroy() {
> - =A0// TODO(estade): Windows uses this function cancel pending drag-n-dr=
op
> drags.
> - =A0// We don't have drags yet, so do nothing for now.
> + =A0// TODO(estade): Windows uses this for some sort of plugin-related s=
tuff.
> =A0}
>
> =A0void TabContentsViewGtk::SetPageTitle(const std::wstring& title) {
>
>
>

Powered by Google App Engine
This is Rietveld 408576698