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

Side by Side 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, 4 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 | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/gtk/gtk_dnd_util.h" 5 #include "chrome/browser/gtk/gtk_dnd_util.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 namespace {
10
11 void AddApplicationTarget(GtkTargetList* targets, int code_mask, int target) {
12 if (code_mask & target) {
13 gtk_target_list_add(targets, GtkDndUtil::GetAtomForTarget(target),
14 GTK_TARGET_SAME_APP, target);
15 }
16 }
17
18 } // namespace
19
20 // static 9 // static
21 GdkAtom GtkDndUtil::GetAtomForTarget(int target) { 10 GdkAtom GtkDndUtil::GetAtomForTarget(int target) {
22 switch (target) { 11 switch (target) {
23 case CHROME_TAB: 12 case CHROME_TAB:
24 static GdkAtom tab_atom = gdk_atom_intern( 13 static GdkAtom tab_atom = gdk_atom_intern(
25 const_cast<char*>("application/x-chrome-tab"), false); 14 const_cast<char*>("application/x-chrome-tab"), false);
26 return tab_atom; 15 return tab_atom;
27 16
28 case TEXT_HTML: 17 case TEXT_HTML:
29 static GdkAtom html_atom = gdk_atom_intern( 18 static GdkAtom html_atom = gdk_atom_intern(
(...skipping 24 matching lines...) Expand all
54 NOTREACHED(); 43 NOTREACHED();
55 } 44 }
56 45
57 return NULL; 46 return NULL;
58 } 47 }
59 48
60 // static 49 // static
61 GtkTargetList* GtkDndUtil::GetTargetListFromCodeMask(int code_mask) { 50 GtkTargetList* GtkDndUtil::GetTargetListFromCodeMask(int code_mask) {
62 GtkTargetList* targets = gtk_target_list_new(NULL, 0); 51 GtkTargetList* targets = gtk_target_list_new(NULL, 0);
63 52
64 if (code_mask & TEXT_PLAIN) 53 for (size_t i = 1; i < INVALID_TARGET; i = i << 1) {
65 gtk_target_list_add_text_targets(targets, TEXT_PLAIN); 54 if (i == CHROME_WEBDROP_FILE_CONTENTS)
55 continue;
66 56
67 if (code_mask & TEXT_URI_LIST) 57 if (i & code_mask)
68 gtk_target_list_add_uri_targets(targets, TEXT_URI_LIST); 58 AddTargetToList(targets, i);
69 59 }
70 if (code_mask & TEXT_HTML)
71 gtk_target_list_add(targets, GetAtomForTarget(TEXT_PLAIN), 0, TEXT_HTML);
72
73 AddApplicationTarget(targets, code_mask, CHROME_TAB);
74 AddApplicationTarget(targets, code_mask, CHROME_BOOKMARK_ITEM);
75 AddApplicationTarget(targets, code_mask, CHROME_NAMED_URL);
76 60
77 return targets; 61 return targets;
78 } 62 }
79 63
80 // static 64 // static
81 void GtkDndUtil::SetDestTargetListFromCodeMask(GtkWidget* dest,
82 int code_mask) {
83 GtkTargetList* targets = GetTargetListFromCodeMask(code_mask);
84 gtk_drag_dest_set_target_list(dest, targets);
85 gtk_target_list_unref(targets);
86 }
87
88 // static
89 void GtkDndUtil::SetSourceTargetListFromCodeMask(GtkWidget* source, 65 void GtkDndUtil::SetSourceTargetListFromCodeMask(GtkWidget* source,
90 int code_mask) { 66 int code_mask) {
91 GtkTargetList* targets = GetTargetListFromCodeMask(code_mask); 67 GtkTargetList* targets = GetTargetListFromCodeMask(code_mask);
92 gtk_drag_source_set_target_list(source, targets); 68 gtk_drag_source_set_target_list(source, targets);
93 gtk_target_list_unref(targets); 69 gtk_target_list_unref(targets);
94 } 70 }
71
72 // static
73 void GtkDndUtil::SetDestTargetList(GtkWidget* dest, const int* target_codes) {
74 GtkTargetList* targets = gtk_target_list_new(NULL, 0);
75
76 for (size_t i = 0; target_codes[i] != 0; ++i) {
77 AddTargetToList(targets, target_codes[i]);
78 }
79
80 gtk_drag_dest_set_target_list(dest, targets);
81 gtk_target_list_unref(targets);
82 }
83
84 // static
85 void GtkDndUtil::AddTargetToList(GtkTargetList* targets, int target_code) {
86 switch (target_code) {
87 case TEXT_PLAIN:
88 gtk_target_list_add_text_targets(targets, TEXT_PLAIN);
89 break;
90
91 case TEXT_URI_LIST:
92 gtk_target_list_add_uri_targets(targets, TEXT_URI_LIST);
93 break;
94
95 case TEXT_HTML:
96 gtk_target_list_add(targets, GetAtomForTarget(TEXT_PLAIN), 0, TEXT_HTML);
97 break;
98
99 case CHROME_TAB:
100 case CHROME_BOOKMARK_ITEM:
101 case CHROME_NAMED_URL:
102 gtk_target_list_add(targets, GtkDndUtil::GetAtomForTarget(target_code),
103 GTK_TARGET_SAME_APP, target_code);
104 break;
105
106 default:
107 NOTREACHED() << " Unexpected target code: " << target_code;
108 }
109 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698