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

Unified Diff: chrome/browser/gtk/gtk_dnd_util.cc

Issue 159419: Correctly update drag status for drags over renderer. This makes things look ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: do what Brett says Created 11 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/gtk/gtk_dnd_util.cc
===================================================================
--- chrome/browser/gtk/gtk_dnd_util.cc (revision 21718)
+++ chrome/browser/gtk/gtk_dnd_util.cc (working copy)
@@ -6,17 +6,6 @@
#include "base/logging.h"
-namespace {
-
-void AddApplicationTarget(GtkTargetList* targets, int code_mask, int target) {
- if (code_mask & target) {
- gtk_target_list_add(targets, GtkDndUtil::GetAtomForTarget(target),
- GTK_TARGET_SAME_APP, target);
- }
-}
-
-} // namespace
-
// static
GdkAtom GtkDndUtil::GetAtomForTarget(int target) {
switch (target) {
@@ -61,34 +50,60 @@
GtkTargetList* GtkDndUtil::GetTargetListFromCodeMask(int code_mask) {
GtkTargetList* targets = gtk_target_list_new(NULL, 0);
- if (code_mask & TEXT_PLAIN)
- gtk_target_list_add_text_targets(targets, TEXT_PLAIN);
+ for (size_t i = 1; i < INVALID_TARGET; i = i << 1) {
+ if (i == CHROME_WEBDROP_FILE_CONTENTS)
+ continue;
- if (code_mask & TEXT_URI_LIST)
- gtk_target_list_add_uri_targets(targets, TEXT_URI_LIST);
+ if (i & code_mask)
+ AddTargetToList(targets, i);
+ }
- if (code_mask & TEXT_HTML)
- gtk_target_list_add(targets, GetAtomForTarget(TEXT_PLAIN), 0, TEXT_HTML);
-
- AddApplicationTarget(targets, code_mask, CHROME_TAB);
- AddApplicationTarget(targets, code_mask, CHROME_BOOKMARK_ITEM);
- AddApplicationTarget(targets, code_mask, CHROME_NAMED_URL);
-
return targets;
}
// static
-void GtkDndUtil::SetDestTargetListFromCodeMask(GtkWidget* dest,
- int code_mask) {
+void GtkDndUtil::SetSourceTargetListFromCodeMask(GtkWidget* source,
+ int code_mask) {
GtkTargetList* targets = GetTargetListFromCodeMask(code_mask);
- gtk_drag_dest_set_target_list(dest, targets);
+ gtk_drag_source_set_target_list(source, targets);
gtk_target_list_unref(targets);
}
// static
-void GtkDndUtil::SetSourceTargetListFromCodeMask(GtkWidget* source,
- int code_mask) {
- GtkTargetList* targets = GetTargetListFromCodeMask(code_mask);
- gtk_drag_source_set_target_list(source, targets);
+void GtkDndUtil::SetDestTargetList(GtkWidget* dest, const int* target_codes) {
+ GtkTargetList* targets = gtk_target_list_new(NULL, 0);
+
+ for (size_t i = 0; target_codes[i] != 0; ++i) {
+ AddTargetToList(targets, target_codes[i]);
+ }
+
+ gtk_drag_dest_set_target_list(dest, targets);
gtk_target_list_unref(targets);
}
+
+// static
+void GtkDndUtil::AddTargetToList(GtkTargetList* targets, int target_code) {
+ switch (target_code) {
+ case TEXT_PLAIN:
+ gtk_target_list_add_text_targets(targets, TEXT_PLAIN);
+ break;
+
+ case TEXT_URI_LIST:
+ gtk_target_list_add_uri_targets(targets, TEXT_URI_LIST);
+ break;
+
+ case TEXT_HTML:
+ gtk_target_list_add(targets, GetAtomForTarget(TEXT_PLAIN), 0, TEXT_HTML);
+ break;
+
+ case CHROME_TAB:
+ case CHROME_BOOKMARK_ITEM:
+ case CHROME_NAMED_URL:
+ gtk_target_list_add(targets, GtkDndUtil::GetAtomForTarget(target_code),
+ GTK_TARGET_SAME_APP, target_code);
+ break;
+
+ default:
+ NOTREACHED() << " Unexpected target code: " << target_code;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698