- Update to 2.0.0.6
- Fix dnd support to/from gtk2 apps - Fix installed permissions of *.png
This commit is contained in:
parent
5c17d24eb0
commit
be713dba96
@ -1,3 +1,3 @@
|
||||
firefox-2.0.0.5-source.tar.bz2
|
||||
firefox-langpacks-2.0.0.5-20070718.tar.bz2
|
||||
firefox-langpacks-2.0.0.6-20070731.tar.bz2
|
||||
firefox-2.0.0.6-source.tar.bz2
|
||||
plugin-config-1.1.tar.gz
|
||||
|
949
firefox-2.0-dnd.patch
Normal file
949
firefox-2.0-dnd.patch
Normal file
@ -0,0 +1,949 @@
|
||||
Index: widget/src/gtk2/nsClipboard.cpp
|
||||
===================================================================
|
||||
RCS file: /export/src/cvs/mozilla1.7/mozilla/widget/src/gtk2/nsClipboard.cpp,v
|
||||
retrieving revision 1.1.1.1
|
||||
diff -u -r1.1.1.1 nsClipboard.cpp
|
||||
--- widget/src/gtk2/nsClipboard.cpp 2004/04/13 06:46:17 1.1.1.1
|
||||
+++ widget/src/gtk2/nsClipboard.cpp 2004/04/13 08:22:00
|
||||
@@ -73,7 +73,7 @@
|
||||
GdkEventSelection *aEvent,
|
||||
nsClipboard *aClipboard);
|
||||
|
||||
-static void
|
||||
+void
|
||||
ConvertHTMLtoUCS2 (guchar *data,
|
||||
PRInt32 dataLength,
|
||||
PRUnichar **unicodeData,
|
||||
@@ -473,7 +473,6 @@
|
||||
// utf-8.
|
||||
|
||||
PRInt32 whichClipboard;
|
||||
-
|
||||
// which clipboard?
|
||||
if (aSelectionData->selection == GDK_SELECTION_PRIMARY)
|
||||
whichClipboard = kSelectionClipboard;
|
||||
@@ -547,16 +546,8 @@
|
||||
* Byte Order Mark (BOM)). Adding BOM can help other app to
|
||||
* detect mozilla use UCS2 encoding when copy-paste.
|
||||
*/
|
||||
- guchar *buffer = (guchar *)
|
||||
- nsMemory::Alloc((len * sizeof(guchar)) + sizeof(PRUnichar));
|
||||
- if (!buffer)
|
||||
- return;
|
||||
- PRUnichar prefix = 0xFEFF;
|
||||
- memcpy(buffer, &prefix, sizeof(prefix));
|
||||
- memcpy(buffer + sizeof(prefix), primitive_data, len);
|
||||
- nsMemory::Free((guchar *)primitive_data);
|
||||
- primitive_data = (guchar *)buffer;
|
||||
- len += sizeof(prefix);
|
||||
+ addBOM(NS_REINTERPRET_CAST(guchar **, &primitive_data),
|
||||
+ NS_REINTERPRET_CAST(gint *, &len));
|
||||
}
|
||||
|
||||
gtk_selection_data_set(aSelectionData, aSelectionData->target,
|
||||
@@ -736,6 +727,22 @@
|
||||
return;
|
||||
}
|
||||
str.AssignLiteral("UNKNOWN");
|
||||
+}
|
||||
+
|
||||
+void addBOM(guchar **data, gint *len)
|
||||
+{
|
||||
+ guchar* indata = *data;
|
||||
+ gint inlen = *len;
|
||||
+ guchar *buffer = (guchar *)
|
||||
+ nsMemory::Alloc((inlen * sizeof(guchar)) + sizeof(PRUnichar));
|
||||
+ if (!buffer)
|
||||
+ return;
|
||||
+ PRUnichar prefix = 0xFEFF;
|
||||
+ memcpy(buffer, &prefix, sizeof(prefix));
|
||||
+ memcpy(buffer + sizeof(prefix), indata, inlen);
|
||||
+ nsMemory::Free((guchar *)indata);
|
||||
+ *data = (guchar *)buffer;
|
||||
+ *len += sizeof(prefix);
|
||||
}
|
||||
|
||||
static void
|
||||
Index: widget/src/gtk2/nsClipboard.h
|
||||
===================================================================
|
||||
RCS file: /export/src/cvs/mozilla1.7/mozilla/widget/src/gtk2/nsClipboard.h,v
|
||||
retrieving revision 1.1.1.1
|
||||
diff -u -r1.1.1.1 nsClipboard.h
|
||||
--- widget/src/gtk2/nsClipboard.h 2004/04/13 06:46:17 1.1.1.1
|
||||
+++ widget/src/gtk2/nsClipboard.h 2004/04/13 08:22:00
|
||||
@@ -87,4 +87,6 @@
|
||||
|
||||
};
|
||||
|
||||
+void addBOM(guchar **data, gint *len);
|
||||
+
|
||||
#endif /* __nsClipboard_h_ */
|
||||
Index: widget/src/gtk2/nsDragService.cpp
|
||||
===================================================================
|
||||
RCS file: /export/src/cvs/mozilla1.7/mozilla/widget/src/gtk2/nsDragService.cpp,v
|
||||
retrieving revision 1.1.1.1
|
||||
diff -u -r1.1.1.1 nsDragService.cpp
|
||||
--- widget/src/gtk2/nsDragService.cpp 2004/04/13 06:46:17 1.1.1.1
|
||||
+++ widget/src/gtk2/nsDragService.cpp 2004/04/13 08:22:00
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <gtk/gtkinvisible.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include "nsCRT.h"
|
||||
+#include "nsString.h"
|
||||
+#include "nsReadableUtils.h"
|
||||
|
||||
|
||||
static PRLogModuleInfo *sDragLm = NULL;
|
||||
@@ -49,6 +51,9 @@
|
||||
static const char gMozUrlType[] = "_NETSCAPE_URL";
|
||||
static const char gTextUriListType[] = "text/uri-list";
|
||||
|
||||
+static const char gPlainTextUTF16[] = "text/plain;charset=utf-16";
|
||||
+static const char gPlainTextUTF8[] = "text/plain;charset=utf-8";
|
||||
+
|
||||
NS_IMPL_ADDREF_INHERITED(nsDragService, nsBaseDragService)
|
||||
NS_IMPL_RELEASE_INHERITED(nsDragService, nsBaseDragService)
|
||||
NS_IMPL_QUERY_INTERFACE4(nsDragService,
|
||||
@@ -57,6 +62,10 @@
|
||||
nsIDragSessionGTK,
|
||||
nsIObserver)
|
||||
|
||||
+void addBOM(guchar **data, gint *len);
|
||||
+void ConvertHTMLtoUCS2(guchar * data, PRInt32 dataLength,
|
||||
+ PRUnichar** unicodeData, PRInt32& outUnicodeLen);
|
||||
+
|
||||
static void
|
||||
invisibleSourceDragEnd(GtkWidget *aWidget,
|
||||
GdkDragContext *aContext,
|
||||
@@ -70,6 +79,38 @@
|
||||
guint32 aTime,
|
||||
gpointer aData);
|
||||
|
||||
+struct AutoConvertTargetPair {
|
||||
+ const char * internal; // the drag data receiving side
|
||||
+ const char * outside; // the drag data providing side
|
||||
+ TargetConverter out2in;
|
||||
+ TargetConverter in2out;
|
||||
+};
|
||||
+
|
||||
+//converters
|
||||
+static void utf8_to_ucs2 (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen);
|
||||
+static void ucs2_to_text (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen);
|
||||
+static void text_to_ucs2 (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen);
|
||||
+
|
||||
+// The table used to match an internal target to an outside target
|
||||
+// the entry comes early has high priority in matching
|
||||
+static const AutoConvertTargetPair autoConvertPair[] = {
|
||||
+ {kUnicodeMime, "UTF8_STRING", utf8_to_ucs2, ucs2_to_text},
|
||||
+ {kUnicodeMime, "COMPOUND_TEXT", utf8_to_ucs2, ucs2_to_text},
|
||||
+ {kUnicodeMime, "TEXT", utf8_to_ucs2, ucs2_to_text},
|
||||
+ {kUnicodeMime, "STRING", utf8_to_ucs2, ucs2_to_text},
|
||||
+ {kUnicodeMime, kTextMime, text_to_ucs2, ucs2_to_text},
|
||||
+ {kUnicodeMime, gPlainTextUTF16, NULL, NULL},
|
||||
+ {kUnicodeMime, gPlainTextUTF8, text_to_ucs2, ucs2_to_text},
|
||||
+
|
||||
+ {kURLMime, gTextUriListType, NULL, ucs2_to_text},
|
||||
+ {kURLMime, gMozUrlType, text_to_ucs2, ucs2_to_text},
|
||||
+
|
||||
+ {NULL, NULL, NULL, NULL},
|
||||
+};
|
||||
+
|
||||
nsDragService::nsDragService()
|
||||
{
|
||||
// We have to destroy the hidden widget before the event loop stops
|
||||
@@ -92,7 +133,7 @@
|
||||
|
||||
// set up our logging module
|
||||
if (!sDragLm)
|
||||
- sDragLm = PR_NewLogModule("nsDragService");
|
||||
+ sDragLm = PR_NewLogModule("nsDragService");
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::nsDragService"));
|
||||
mTargetWidget = 0;
|
||||
mTargetDragContext = 0;
|
||||
@@ -101,6 +142,8 @@
|
||||
mTargetDragDataReceived = PR_FALSE;
|
||||
mTargetDragData = 0;
|
||||
mTargetDragDataLen = 0;
|
||||
+ mTargetDragGdkAtom = 0;
|
||||
+ mTargetConverter = NULL;
|
||||
}
|
||||
|
||||
nsDragService::~nsDragService()
|
||||
@@ -173,6 +216,16 @@
|
||||
event.button.window = mHiddenWidget->window;
|
||||
event.button.time = nsWindow::mLastButtonPressTime;
|
||||
|
||||
+ event.button.send_event = 0;
|
||||
+ event.button.x = 0;
|
||||
+ event.button.y = 0;
|
||||
+ event.button.state = 0;
|
||||
+ event.button.button = 0;
|
||||
+ event.button.device = 0;
|
||||
+ event.button.x_root = 0;
|
||||
+ event.button.y_root = 0;
|
||||
+
|
||||
+
|
||||
// start our drag.
|
||||
GdkDragContext *context = gtk_drag_begin(mHiddenWidget,
|
||||
sourceList,
|
||||
@@ -291,7 +344,7 @@
|
||||
NS_IMETHODIMP
|
||||
nsDragService::GetNumDropItems(PRUint32 * aNumItems)
|
||||
{
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::GetNumDropItems"));
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("==nsDragService::GetNumDropItems==\n"));
|
||||
PRBool isList = IsTargetContextList();
|
||||
if (isList)
|
||||
mSourceDataItems->Count(aNumItems);
|
||||
@@ -303,8 +356,9 @@
|
||||
*aNumItems = CountTextUriListItems(data, mTargetDragDataLen);
|
||||
} else
|
||||
*aNumItems = 1;
|
||||
+ TargetResetData();
|
||||
}
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("%d items", *aNumItems));
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("%d items\n", *aNumItems));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -360,7 +414,7 @@
|
||||
PRUint32 tmpDataLen = 0;
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
("trying to get transfer data for %s\n",
|
||||
- (const char *)flavorStr));
|
||||
+ (const char *)flavorStr));
|
||||
rv = item->GetTransferData(flavorStr,
|
||||
getter_AddRefs(data),
|
||||
&tmpDataLen);
|
||||
@@ -387,6 +441,7 @@
|
||||
// Now walk down the list of flavors. When we find one that is
|
||||
// actually present, copy out the data into the transferable in that
|
||||
// format. SetTransferData() implicitly handles conversions.
|
||||
+
|
||||
for ( i = 0; i < cnt; ++i ) {
|
||||
nsCOMPtr<nsISupports> genericWrapper;
|
||||
flavorList->GetElementAt(i,getter_AddRefs(genericWrapper));
|
||||
@@ -399,118 +454,58 @@
|
||||
GdkAtom gdkFlavor = gdk_atom_intern(flavorStr, FALSE);
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
("looking for data in type %s, gdk flavor %ld\n",
|
||||
- NS_STATIC_CAST(const char*,flavorStr), gdkFlavor));
|
||||
+ NS_STATIC_CAST(const char*,flavorStr), gdkFlavor));
|
||||
PRBool dataFound = PR_FALSE;
|
||||
if (gdkFlavor) {
|
||||
GetTargetDragData(gdkFlavor);
|
||||
}
|
||||
if (mTargetDragData) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("dataFound = PR_TRUE\n"));
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("dataFound = PR_TRUE for %s\n", gdk_atom_name(mTargetDragGdkAtom)));
|
||||
dataFound = PR_TRUE;
|
||||
- }
|
||||
- else {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("dataFound = PR_FALSE\n"));
|
||||
- // if we are looking for text/unicode and we fail to find it
|
||||
- // on the clipboard first, try again with text/plain. If that
|
||||
- // is present, convert it to unicode.
|
||||
- if ( strcmp(flavorStr, kUnicodeMime) == 0 ) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("we were looking for text/unicode... \
|
||||
- trying again with text/plain\n"));
|
||||
- gdkFlavor = gdk_atom_intern(kTextMime, FALSE);
|
||||
- GetTargetDragData(gdkFlavor);
|
||||
- if (mTargetDragData) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("Got textplain data\n"));
|
||||
- const char* castedText =
|
||||
- NS_REINTERPRET_CAST(char*, mTargetDragData);
|
||||
- PRUnichar* convertedText = nsnull;
|
||||
- PRInt32 convertedTextLen = 0;
|
||||
- nsPrimitiveHelpers::ConvertPlatformPlainTextToUnicode(
|
||||
- castedText, mTargetDragDataLen,
|
||||
- &convertedText, &convertedTextLen);
|
||||
- if ( convertedText ) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("successfully converted plain text \
|
||||
- to unicode.\n"));
|
||||
- // out with the old, in with the new
|
||||
- g_free(mTargetDragData);
|
||||
- mTargetDragData = convertedText;
|
||||
- mTargetDragDataLen = convertedTextLen * 2;
|
||||
- dataFound = PR_TRUE;
|
||||
- } // if plain text data on clipboard
|
||||
- } // if plain text flavor present
|
||||
- } // if looking for text/unicode
|
||||
-
|
||||
- // if we are looking for text/x-moz-url and we failed to find
|
||||
- // it on the clipboard, try again with text/uri-list, and then
|
||||
- // _NETSCAPE_URL
|
||||
- if (strcmp(flavorStr, kURLMime) == 0) {
|
||||
+
|
||||
+ // we need to do extra work for text/uri-list
|
||||
+ if (mTargetDragGdkAtom ==
|
||||
+ gdk_atom_intern(gTextUriListType, FALSE)) {
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("we were looking for text/x-moz-url...\
|
||||
- trying again with text/uri-list\n"));
|
||||
- gdkFlavor = gdk_atom_intern(gTextUriListType, FALSE);
|
||||
- GetTargetDragData(gdkFlavor);
|
||||
- if (mTargetDragData) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("Got text/uri-list data\n"));
|
||||
- const char *data =
|
||||
- NS_REINTERPRET_CAST(char*, mTargetDragData);
|
||||
- PRUnichar* convertedText = nsnull;
|
||||
- PRInt32 convertedTextLen = 0;
|
||||
+ ("Converting text/uri-list data\n"));
|
||||
+ const char *data =
|
||||
+ NS_REINTERPRET_CAST(char*, mTargetDragData);
|
||||
+ PRUnichar* convertedText = nsnull;
|
||||
+ PRInt32 convertedTextLen = 0;
|
||||
|
||||
- GetTextUriListItem(data, mTargetDragDataLen, aItemIndex,
|
||||
- &convertedText, &convertedTextLen);
|
||||
+ GetTextUriListItem(data, mTargetDragDataLen, aItemIndex,
|
||||
+ &convertedText, &convertedTextLen);
|
||||
|
||||
- if ( convertedText ) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("successfully converted \
|
||||
- _NETSCAPE_URL to unicode.\n"));
|
||||
- // out with the old, in with the new
|
||||
- g_free(mTargetDragData);
|
||||
- mTargetDragData = convertedText;
|
||||
- mTargetDragDataLen = convertedTextLen * 2;
|
||||
- dataFound = PR_TRUE;
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
+ if (convertedText) {
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("failed to get text/uri-list data\n"));
|
||||
+ ("successfully converted \
|
||||
+ %s to unicode.\n", gTextUriListType));
|
||||
+ // out with the old, in with the new
|
||||
+ g_free(mTargetDragData);
|
||||
+ mTargetDragData = convertedText;
|
||||
+ mTargetDragDataLen = convertedTextLen * 2;
|
||||
}
|
||||
- if (!dataFound) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("we were looking for text/x-moz-url...\
|
||||
- trying again with _NETSCAP_URL\n"));
|
||||
- gdkFlavor = gdk_atom_intern(gMozUrlType, FALSE);
|
||||
- GetTargetDragData(gdkFlavor);
|
||||
- if (mTargetDragData) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("Got _NETSCAPE_URL data\n"));
|
||||
- const char* castedText =
|
||||
- NS_REINTERPRET_CAST(char*, mTargetDragData);
|
||||
- PRUnichar* convertedText = nsnull;
|
||||
- PRInt32 convertedTextLen = 0;
|
||||
- nsPrimitiveHelpers::ConvertPlatformPlainTextToUnicode(castedText, mTargetDragDataLen, &convertedText, &convertedTextLen);
|
||||
- if ( convertedText ) {
|
||||
- PR_LOG(sDragLm,
|
||||
- PR_LOG_DEBUG,
|
||||
- ("successfully converted _NETSCAPE_URL \
|
||||
- to unicode.\n"));
|
||||
- // out with the old, in with the new
|
||||
- g_free(mTargetDragData);
|
||||
- mTargetDragData = convertedText;
|
||||
- mTargetDragDataLen = convertedTextLen * 2;
|
||||
- dataFound = PR_TRUE;
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("failed to get _NETSCAPE_URL data\n"));
|
||||
- }
|
||||
- }
|
||||
}
|
||||
-
|
||||
- } // else we try one last ditch effort to find our data
|
||||
-
|
||||
+ // Convert text/html into our unicode format
|
||||
+ else if (mTargetDragGdkAtom ==
|
||||
+ gdk_atom_intern(kHTMLMime, FALSE)) {
|
||||
+ PRUnichar* htmlBody= nsnull;
|
||||
+ PRInt32 htmlBodyLen = 0;
|
||||
+
|
||||
+ ConvertHTMLtoUCS2(NS_STATIC_CAST(guchar*, mTargetDragData),
|
||||
+ mTargetDragDataLen,
|
||||
+ &htmlBody, htmlBodyLen);
|
||||
+ if (!htmlBodyLen)
|
||||
+ break;
|
||||
+ g_free(mTargetDragData);
|
||||
+ mTargetDragData = (void *)htmlBody;
|
||||
+ mTargetDragDataLen = htmlBodyLen * 2;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("dataFound = PR_FALSE\n"));
|
||||
+ }
|
||||
if (dataFound) {
|
||||
// the DOM only wants LF, so convert from MacOS line endings
|
||||
// to DOM line endings.
|
||||
@@ -542,7 +537,7 @@
|
||||
nsDragService::IsDataFlavorSupported(const char *aDataFlavor,
|
||||
PRBool *_retval)
|
||||
{
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::IsDataFlavorSupported %s",
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::IsDataFlavorSupported %s\n",
|
||||
aDataFlavor));
|
||||
if (!_retval)
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
@@ -595,7 +590,7 @@
|
||||
currentFlavor->ToString(getter_Copies(flavorStr));
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
("checking %s against %s\n",
|
||||
- (const char *)flavorStr, aDataFlavor));
|
||||
+ (const char *)flavorStr, aDataFlavor));
|
||||
if (strcmp(flavorStr, aDataFlavor) == 0) {
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
("boioioioiooioioioing!\n"));
|
||||
@@ -609,50 +604,9 @@
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
- // check the target context vs. this flavor, one at a time
|
||||
- GList *tmp;
|
||||
- for (tmp = mTargetDragContext->targets; tmp; tmp = tmp->next) {
|
||||
- GdkAtom atom = (GdkAtom)GPOINTER_TO_INT(tmp->data);
|
||||
- gchar *name = NULL;
|
||||
- name = gdk_atom_name(atom);
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("checking %s against %s\n", name, aDataFlavor));
|
||||
- if (name && (strcmp(name, aDataFlavor) == 0)) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("good!\n"));
|
||||
- *_retval = PR_TRUE;
|
||||
- }
|
||||
- // check for automatic text/uri-list -> text/x-moz-url mapping
|
||||
- if (*_retval == PR_FALSE &&
|
||||
- name &&
|
||||
- (strcmp(name, gTextUriListType) == 0) &&
|
||||
- (strcmp(aDataFlavor, kURLMime) == 0)) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("good! ( it's text/uri-list and \
|
||||
- we're checking against text/x-moz-url )\n"));
|
||||
- *_retval = PR_TRUE;
|
||||
- }
|
||||
- // check for automatic _NETSCAPE_URL -> text/x-moz-url mapping
|
||||
- if (*_retval == PR_FALSE &&
|
||||
- name &&
|
||||
- (strcmp(name, gMozUrlType) == 0) &&
|
||||
- (strcmp(aDataFlavor, kURLMime) == 0)) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("good! ( it's _NETSCAPE_URL and \
|
||||
- we're checking against text/x-moz-url )\n"));
|
||||
- *_retval = PR_TRUE;
|
||||
- }
|
||||
- // check for auto text/plain -> text/unicode mapping
|
||||
- if (*_retval == PR_FALSE &&
|
||||
- name &&
|
||||
- (strcmp(name, kTextMime) == 0) &&
|
||||
- (strcmp(aDataFlavor, kUnicodeMime) == 0)) {
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("good! ( it's text plain and we're checking \
|
||||
- against text/unicode )\n"));
|
||||
- *_retval = PR_TRUE;
|
||||
- }
|
||||
- g_free(name);
|
||||
- }
|
||||
+ if (LookupFlavorInTargetList(aDataFlavor) ||
|
||||
+ LookupMatchedOutsideTarget(aDataFlavor, NULL, NULL))
|
||||
+ *_retval = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -691,14 +645,14 @@
|
||||
// notify the dragger if we can drop
|
||||
switch (mDragAction) {
|
||||
case DRAGDROP_ACTION_COPY:
|
||||
- action = GDK_ACTION_COPY;
|
||||
- break;
|
||||
+ action = GDK_ACTION_COPY;
|
||||
+ break;
|
||||
case DRAGDROP_ACTION_LINK:
|
||||
- action = GDK_ACTION_LINK;
|
||||
- break;
|
||||
+ action = GDK_ACTION_LINK;
|
||||
+ break;
|
||||
default:
|
||||
- action = GDK_ACTION_MOVE;
|
||||
- break;
|
||||
+ action = GDK_ACTION_MOVE;
|
||||
+ break;
|
||||
}
|
||||
gdk_drag_status(aContext, action, aTime);
|
||||
}
|
||||
@@ -719,12 +673,23 @@
|
||||
guint32 aTime)
|
||||
{
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::TargetDataReceived"));
|
||||
- TargetResetData();
|
||||
+ NS_ASSERTION(mTargetDragData == 0, "Data area is NOT empty!!\n");
|
||||
+ NS_ASSERTION(mTargetDragDataLen == 0, "Data area is NOT empty!!\n");
|
||||
+
|
||||
mTargetDragDataReceived = PR_TRUE;
|
||||
if (aSelectionData->length > 0) {
|
||||
- mTargetDragDataLen = aSelectionData->length;
|
||||
- mTargetDragData = g_malloc(mTargetDragDataLen);
|
||||
- memcpy(mTargetDragData, aSelectionData->data, mTargetDragDataLen);
|
||||
+ if (mTargetDragGdkAtom && mTargetConverter) {
|
||||
+ // need Converting
|
||||
+ (*mTargetConverter)((const char*)aSelectionData->data,
|
||||
+ aSelectionData->length,
|
||||
+ (char **)&mTargetDragData,
|
||||
+ &mTargetDragDataLen);
|
||||
+ }
|
||||
+ else {
|
||||
+ mTargetDragDataLen = aSelectionData->length;
|
||||
+ mTargetDragData = g_malloc(mTargetDragDataLen);
|
||||
+ memcpy(mTargetDragData, aSelectionData->data, mTargetDragDataLen);
|
||||
+ }
|
||||
}
|
||||
else {
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
@@ -781,13 +746,31 @@
|
||||
void
|
||||
nsDragService::GetTargetDragData(GdkAtom aFlavor)
|
||||
{
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("getting data flavor %d\n", aFlavor));
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("mLastWidget is %p and mLastContext is %p\n",
|
||||
- mTargetWidget, mTargetDragContext));
|
||||
+ const char *flavorStr = gdk_atom_name(aFlavor);
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("GetTargetData with flavor %s\n", flavorStr));
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("mLastWidget is %p, mLastContext is %p\n",
|
||||
+ (void*)mTargetWidget, (void*)mTargetDragContext));
|
||||
// reset our target data areas
|
||||
TargetResetData();
|
||||
- gtk_drag_get_data(mTargetWidget, mTargetDragContext, aFlavor, mTargetTime);
|
||||
-
|
||||
+ // if it is a direct match
|
||||
+ if (LookupFlavorInTargetList(flavorStr)) {
|
||||
+ gtk_drag_get_data(mTargetWidget, mTargetDragContext,
|
||||
+ aFlavor, mTargetTime);
|
||||
+ mTargetDragGdkAtom = aFlavor;
|
||||
+
|
||||
+ }
|
||||
+ // if it is a auto converting match
|
||||
+ else if (LookupMatchedOutsideTarget(flavorStr,
|
||||
+ &mTargetDragGdkAtom,
|
||||
+ &mTargetConverter))
|
||||
+ gtk_drag_get_data(mTargetWidget, mTargetDragContext,
|
||||
+ mTargetDragGdkAtom, mTargetTime);
|
||||
+ else {
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("Cannot request target %s\n",
|
||||
+ flavorStr));
|
||||
+ return;
|
||||
+ }
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG, ("about to start inner iteration."));
|
||||
PRTime entryTime = PR_Now();
|
||||
while (!mTargetDragDataReceived && mDoingDrag) {
|
||||
@@ -807,9 +791,11 @@
|
||||
mTargetDragDataReceived = PR_FALSE;
|
||||
// make sure to free old data if we have to
|
||||
if (mTargetDragData)
|
||||
- g_free(mTargetDragData);
|
||||
+ g_free(mTargetDragData);
|
||||
mTargetDragData = 0;
|
||||
mTargetDragDataLen = 0;
|
||||
+ mTargetDragGdkAtom = 0;
|
||||
+ mTargetConverter = NULL;
|
||||
}
|
||||
|
||||
GtkTargetList *
|
||||
@@ -841,7 +827,7 @@
|
||||
listTarget->info = (guint)listAtom;
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
("automatically adding target %s with id %ld\n",
|
||||
- listTarget->target, listAtom));
|
||||
+ listTarget->target, listAtom));
|
||||
targetArray.AppendElement(listTarget);
|
||||
|
||||
// check what flavours are supported so we can decide what other
|
||||
@@ -861,7 +847,7 @@
|
||||
++flavorIndex ) {
|
||||
nsCOMPtr<nsISupports> genericWrapper;
|
||||
flavorList->GetElementAt(flavorIndex,
|
||||
- getter_AddRefs(genericWrapper));
|
||||
+ getter_AddRefs(genericWrapper));
|
||||
nsCOMPtr<nsISupportsCString> currentFlavor;
|
||||
currentFlavor = do_QueryInterface(genericWrapper);
|
||||
if (currentFlavor) {
|
||||
@@ -908,51 +894,27 @@
|
||||
if (currentFlavor) {
|
||||
nsXPIDLCString flavorStr;
|
||||
currentFlavor->ToString(getter_Copies(flavorStr));
|
||||
- // get the atom
|
||||
- GdkAtom atom = gdk_atom_intern(flavorStr, FALSE);
|
||||
- GtkTargetEntry *target =
|
||||
- (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
|
||||
- target->target = g_strdup(flavorStr);
|
||||
- target->flags = 0;
|
||||
- target->info = GPOINTER_TO_UINT(atom);
|
||||
+ //add the target itself
|
||||
+ GtkTargetEntry *target = CreateGtkTargetFor(flavorStr);
|
||||
PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("adding target %s with id %ld\n",
|
||||
- target->target, atom));
|
||||
+ ("+++adding importable target %s\n",
|
||||
+ target->target));
|
||||
targetArray.AppendElement(target);
|
||||
- // Check to see if this is text/unicode.
|
||||
- // If it is, add text/plain
|
||||
- // since we automatically support text/plain
|
||||
- // if we support text/unicode.
|
||||
- if (strcmp(flavorStr, kUnicodeMime) == 0) {
|
||||
- // get the atom for the unicode string
|
||||
- GdkAtom plainAtom =
|
||||
- gdk_atom_intern(kTextMime, FALSE);
|
||||
- GtkTargetEntry *plainTarget =
|
||||
- (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
|
||||
- plainTarget->target = g_strdup(kTextMime);
|
||||
- plainTarget->flags = 0;
|
||||
- plainTarget->info = GPOINTER_TO_UINT(plainAtom);
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("automatically adding target %s with \
|
||||
- id %ld\n", plainTarget->target, plainAtom));
|
||||
- targetArray.AppendElement(plainTarget);
|
||||
- }
|
||||
- // Check to see if this is the x-moz-url type.
|
||||
- // If it is, add _NETSCAPE_URL
|
||||
- // this is a type used by everybody.
|
||||
- if (strcmp(flavorStr, kURLMime) == 0) {
|
||||
- // get the atom name for it
|
||||
- GdkAtom urlAtom =
|
||||
- gdk_atom_intern(gMozUrlType, FALSE);
|
||||
- GtkTargetEntry *urlTarget =
|
||||
- (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
|
||||
- urlTarget->target = g_strdup(gMozUrlType);
|
||||
- urlTarget->flags = 0;
|
||||
- urlTarget->info = GPOINTER_TO_UINT(urlAtom);
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
- ("automatically adding target %s with \
|
||||
- id %ld\n", urlTarget->target, urlAtom));
|
||||
- targetArray.AppendElement(urlTarget);
|
||||
+
|
||||
+ //add the auto convert targets
|
||||
+ PRUint16 convIndex = 0;
|
||||
+ while (autoConvertPair[convIndex].internal &&
|
||||
+ autoConvertPair[convIndex].outside) {
|
||||
+ if (!strcmp(autoConvertPair[convIndex].internal,
|
||||
+ flavorStr)) {
|
||||
+ target = CreateGtkTargetFor( \
|
||||
+ autoConvertPair[convIndex].outside);
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ (" ++auto adding target %s\n",
|
||||
+ target->target));
|
||||
+ targetArray.AppendElement(target);
|
||||
+ }
|
||||
+ ++convIndex;
|
||||
}
|
||||
}
|
||||
} // foreach flavor in item
|
||||
@@ -965,11 +927,11 @@
|
||||
if (targetCount) {
|
||||
// allocate space to create the list of valid targets
|
||||
targets =
|
||||
- (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry) * targetCount);
|
||||
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry) * targetCount);
|
||||
PRUint32 targetIndex;
|
||||
for ( targetIndex = 0; targetIndex < targetCount; ++targetIndex) {
|
||||
GtkTargetEntry *disEntry =
|
||||
- (GtkTargetEntry *)targetArray.ElementAt(targetIndex);
|
||||
+ (GtkTargetEntry *)targetArray.ElementAt(targetIndex);
|
||||
// this is a string reference but it will be freed later.
|
||||
targets[targetIndex].target = disEntry->target;
|
||||
targets[targetIndex].flags = disEntry->flags;
|
||||
@@ -979,7 +941,7 @@
|
||||
// clean up the target list
|
||||
for (PRUint32 cleanIndex = 0; cleanIndex < targetCount; ++cleanIndex) {
|
||||
GtkTargetEntry *thisTarget =
|
||||
- (GtkTargetEntry *)targetArray.ElementAt(cleanIndex);
|
||||
+ (GtkTargetEntry *)targetArray.ElementAt(cleanIndex);
|
||||
g_free(thisTarget->target);
|
||||
g_free(thisTarget);
|
||||
}
|
||||
@@ -1067,7 +1029,7 @@
|
||||
guint aInfo,
|
||||
guint32 aTime)
|
||||
{
|
||||
- PR_LOG(sDragLm, PR_LOG_DEBUG, ("nsDragService::SourceDataGet"));
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("\nnsDragService::SourceDataGet"));
|
||||
GdkAtom atom = (GdkAtom)aInfo;
|
||||
nsXPIDLCString mimeFlavor;
|
||||
gchar *typeName = 0;
|
||||
@@ -1104,22 +1066,18 @@
|
||||
nsCOMPtr<nsITransferable> item;
|
||||
item = do_QueryInterface(genericItem);
|
||||
if (item) {
|
||||
- // if someone was asking for text/plain, lookup unicode instead so
|
||||
- // we can convert it.
|
||||
- PRBool needToDoConversionToPlainText = PR_FALSE;
|
||||
+ TargetConverter converter = NULL;
|
||||
const char* actualFlavor = mimeFlavor;
|
||||
- if (strcmp(mimeFlavor,kTextMime) == 0) {
|
||||
- actualFlavor = kUnicodeMime;
|
||||
- needToDoConversionToPlainText = PR_TRUE;
|
||||
- }
|
||||
- // if someone was asking for _NETSCAPE_URL we need to convert to
|
||||
- // plain text but we also need to look for x-moz-url
|
||||
- else if (strcmp(mimeFlavor, gMozUrlType) == 0) {
|
||||
- actualFlavor = kURLMime;
|
||||
- needToDoConversionToPlainText = PR_TRUE;
|
||||
+ PRUint32 convIndex = 0;
|
||||
+ while (autoConvertPair[convIndex].outside &&
|
||||
+ autoConvertPair[convIndex].internal) {
|
||||
+ if (!strcmp(mimeFlavor, autoConvertPair[convIndex].outside)) {
|
||||
+ actualFlavor = autoConvertPair[convIndex].internal;
|
||||
+ converter = autoConvertPair[convIndex].in2out;
|
||||
+ break;
|
||||
+ }
|
||||
+ ++convIndex;
|
||||
}
|
||||
- else
|
||||
- actualFlavor = mimeFlavor;
|
||||
|
||||
PRUint32 tmpDataLen = 0;
|
||||
void *tmpData = NULL;
|
||||
@@ -1131,18 +1089,24 @@
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsPrimitiveHelpers::CreateDataFromPrimitive (actualFlavor, data,
|
||||
&tmpData, tmpDataLen);
|
||||
+
|
||||
+ if (strcmp(actualFlavor, kHTMLMime) == 0) {
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("add BOM prefix for %s\n",
|
||||
+ kHTMLMime));
|
||||
+ addBOM(NS_REINTERPRET_CAST(guchar **, &tmpData),
|
||||
+ NS_REINTERPRET_CAST(gint *, &tmpDataLen));
|
||||
+ }
|
||||
+
|
||||
// if required, do the extra work to convert unicode to plain
|
||||
// text and replace the output values with the plain text.
|
||||
- if (needToDoConversionToPlainText) {
|
||||
+ if (converter) {
|
||||
char* plainTextData = nsnull;
|
||||
PRUnichar* castedUnicode = NS_REINTERPRET_CAST(PRUnichar*,
|
||||
tmpData);
|
||||
- PRInt32 plainTextLen = 0;
|
||||
- nsPrimitiveHelpers::ConvertUnicodeToPlatformPlainText(
|
||||
- castedUnicode,
|
||||
- tmpDataLen / 2,
|
||||
- &plainTextData,
|
||||
- &plainTextLen);
|
||||
+ PRUint32 plainTextLen = 0;
|
||||
+ (*converter)((const char*)castedUnicode, tmpDataLen,
|
||||
+ &plainTextData, &plainTextLen);
|
||||
+
|
||||
if (tmpData) {
|
||||
// this was not allocated using glib
|
||||
free(tmpData);
|
||||
@@ -1190,3 +1154,149 @@
|
||||
dragService->SourceEndDrag();
|
||||
}
|
||||
|
||||
+PRBool
|
||||
+nsDragService::LookupFlavorInTargetList(const char *aDataFlavor)
|
||||
+{
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("nsDragService::LookupFlavorInTargetList,"
|
||||
+ "checking %s \n", aDataFlavor));
|
||||
+
|
||||
+ if (!mTargetDragContext || !aDataFlavor)
|
||||
+ return PR_FALSE;
|
||||
+
|
||||
+ GList *targetList = mTargetDragContext->targets;
|
||||
+ while (targetList) {
|
||||
+ GdkAtom atom = (GdkAtom)GPOINTER_TO_INT(targetList->data);
|
||||
+ gchar *atomName = gdk_atom_name(atom);
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("checking %s against %s\n", aDataFlavor, atomName));
|
||||
+ if (atomName && (strcmp(atomName, aDataFlavor) == 0)) {
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("good!\n"));
|
||||
+ g_free(atomName);
|
||||
+ return PR_TRUE;
|
||||
+ }
|
||||
+ targetList = targetList->next;
|
||||
+ }
|
||||
+ return PR_FALSE;
|
||||
+}
|
||||
+
|
||||
+PRBool
|
||||
+nsDragService::LookupMatchedOutsideTarget(const char *aDataFlavor,
|
||||
+ GdkAtom *aAtom,
|
||||
+ TargetConverter *aConverter)
|
||||
+{
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("nsDragService::LookupMatchedOutsideTarget,"
|
||||
+ "checking %s \n", aDataFlavor));
|
||||
+
|
||||
+ if (!mTargetDragContext || !aDataFlavor)
|
||||
+ return PR_FALSE;
|
||||
+
|
||||
+ gint index = 0;
|
||||
+ while (autoConvertPair[index].internal &&
|
||||
+ autoConvertPair[index].outside) {
|
||||
+ if (!strcmp(autoConvertPair[index].internal, aDataFlavor) &&
|
||||
+ LookupFlavorInTargetList(autoConvertPair[index].outside)) {
|
||||
+ if (aConverter)
|
||||
+ *aConverter = autoConvertPair[index].out2in;
|
||||
+ if (aAtom)
|
||||
+ *aAtom = gdk_atom_intern(autoConvertPair[index].outside,
|
||||
+ FALSE);
|
||||
+ return PR_TRUE;
|
||||
+ }
|
||||
+ ++index;
|
||||
+ }
|
||||
+ return PR_FALSE;
|
||||
+}
|
||||
+
|
||||
+PRBool
|
||||
+nsDragService::LookupMatchedInternalTarget(const char *aDataFlavor,
|
||||
+ GdkAtom *aAtom,
|
||||
+ TargetConverter *aConverter)
|
||||
+{
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("nsDragService::LookupMatchedInternalTarget,"
|
||||
+ "checking %s \n", aDataFlavor));
|
||||
+
|
||||
+ if (!mTargetDragContext || !aDataFlavor)
|
||||
+ return PR_FALSE;
|
||||
+
|
||||
+ gint index = 0;
|
||||
+ while (autoConvertPair[index].internal &&
|
||||
+ autoConvertPair[index].outside) {
|
||||
+ if (!strcmp(autoConvertPair[index].outside, aDataFlavor) &&
|
||||
+ LookupFlavorInTargetList(autoConvertPair[index].internal)) {
|
||||
+ if (aConverter)
|
||||
+ *aConverter = autoConvertPair[index].in2out;
|
||||
+ if (aAtom)
|
||||
+ *aAtom = gdk_atom_intern(autoConvertPair[index].internal,
|
||||
+ FALSE);
|
||||
+ return PR_TRUE;
|
||||
+ }
|
||||
+ ++index;
|
||||
+ }
|
||||
+ return PR_FALSE;
|
||||
+}
|
||||
+
|
||||
+GtkTargetEntry *
|
||||
+nsDragService::CreateGtkTargetFor(const char *aFlavorStr)
|
||||
+{
|
||||
+ // get the atom
|
||||
+ GdkAtom atom = gdk_atom_intern(aFlavorStr, FALSE);
|
||||
+ GtkTargetEntry *target =
|
||||
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
|
||||
+ NS_ASSERTION(target, "No enough mem");
|
||||
+
|
||||
+ target->target = g_strdup(aFlavorStr);
|
||||
+ target->flags = 0;
|
||||
+ target->info = (guint)atom;
|
||||
+
|
||||
+ return target;
|
||||
+}
|
||||
+
|
||||
+//converters
|
||||
+
|
||||
+// static
|
||||
+void
|
||||
+utf8_to_ucs2 (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen)
|
||||
+{
|
||||
+ nsAutoString ucs2string = NS_ConvertUTF8toUCS2(aDataIn);
|
||||
+ *aDataOut = (char *)ToNewUnicode(ucs2string);
|
||||
+ *aDataOutLen = ucs2string.Length() * 2;
|
||||
+
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("AutoConverting: utf8 ---> unicode.\n"));
|
||||
+
|
||||
+}
|
||||
+
|
||||
+//static
|
||||
+void
|
||||
+ucs2_to_text (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen)
|
||||
+{
|
||||
+ nsPrimitiveHelpers::
|
||||
+ ConvertUnicodeToPlatformPlainText((PRUnichar *)aDataIn,
|
||||
+ int(aDataInLen / 2),
|
||||
+ aDataOut, (PRInt32 *)aDataOutLen);
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("AutoConverting: ucs2 ---> platform text.\n"));
|
||||
+}
|
||||
+
|
||||
+//static
|
||||
+void
|
||||
+text_to_ucs2 (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen)
|
||||
+{
|
||||
+ PRUnichar *convertedText = nsnull;
|
||||
+ PRInt32 convertedTextLen = 0;
|
||||
+ nsPrimitiveHelpers::
|
||||
+ ConvertPlatformPlainTextToUnicode(aDataIn, aDataInLen,
|
||||
+ &convertedText, &convertedTextLen);
|
||||
+ if (convertedText) {
|
||||
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
|
||||
+ ("AutoConverting: plain text ---> unicode.\n"));
|
||||
+ *aDataOut = NS_REINTERPRET_CAST(char*, convertedText);
|
||||
+ *aDataOutLen = convertedTextLen * 2;
|
||||
+ }
|
||||
+}
|
||||
Index: widget/src/gtk2/nsDragService.h
|
||||
===================================================================
|
||||
RCS file: /export/src/cvs/mozilla1.7/mozilla/widget/src/gtk2/nsDragService.h,v
|
||||
retrieving revision 1.1.1.1
|
||||
diff -u -r1.1.1.1 nsDragService.h
|
||||
--- widget/src/gtk2/nsDragService.h 2004/04/13 06:46:17 1.1.1.1
|
||||
+++ widget/src/gtk2/nsDragService.h 2004/04/13 08:22:00
|
||||
@@ -33,6 +33,8 @@
|
||||
#include "nsIObserver.h"
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
+typedef void (*TargetConverter) (const char *aDataIn, unsigned int aDataInLen,
|
||||
+ char **aDataOut, unsigned int *aDataOutLen);
|
||||
|
||||
/**
|
||||
* Native GTK DragService wrapper
|
||||
@@ -64,7 +66,8 @@
|
||||
NS_IMETHOD GetNumDropItems (PRUint32 * aNumItems);
|
||||
NS_IMETHOD GetData (nsITransferable * aTransferable,
|
||||
PRUint32 aItemIndex);
|
||||
- NS_IMETHOD IsDataFlavorSupported (const char *aDataFlavor, PRBool *_retval);
|
||||
+ NS_IMETHOD IsDataFlavorSupported (const char *aDataFlavor,
|
||||
+ PRBool *_retval);
|
||||
|
||||
// nsIDragSessionGTK
|
||||
|
||||
@@ -112,6 +115,9 @@
|
||||
// last data received and its length
|
||||
void *mTargetDragData;
|
||||
PRUint32 mTargetDragDataLen;
|
||||
+ GdkAtom mTargetDragGdkAtom; // the real target we asked for
|
||||
+ TargetConverter mTargetConverter; //
|
||||
+
|
||||
// is the current target drag context contain a list?
|
||||
PRBool IsTargetContextList(void);
|
||||
// this will get the native data from the last target given a
|
||||
@@ -129,7 +135,17 @@
|
||||
// get a list of the sources in gtk's format
|
||||
GtkTargetList *GetSourceList(void);
|
||||
|
||||
+ // check if a flavor supported by source target list
|
||||
+ PRBool LookupFlavorInTargetList(const char *aDataFlavor);
|
||||
+ PRBool LookupMatchedOutsideTarget(const char *aDataFlavor,
|
||||
+ GdkAtom *aAtom,
|
||||
+ TargetConverter *aConverter);
|
||||
+ PRBool LookupMatchedInternalTarget(const char *aDataFlavor,
|
||||
+ GdkAtom *aAtom,
|
||||
+ TargetConverter *aConverter);
|
||||
+
|
||||
+ GtkTargetEntry *CreateGtkTargetFor(const char *aFlavorStr);
|
||||
+
|
||||
};
|
||||
|
||||
#endif // nsDragService_h__
|
||||
-
|
15
firefox.spec
15
firefox.spec
@ -14,8 +14,8 @@
|
||||
|
||||
Summary: Mozilla Firefox Web browser.
|
||||
Name: firefox
|
||||
Version: 2.0.0.5
|
||||
Release: 3%{?dist}
|
||||
Version: 2.0.0.6
|
||||
Release: 1%{?dist}
|
||||
URL: http://www.mozilla.org/projects/firefox/
|
||||
License: MPL/LGPL
|
||||
Group: Applications/Internet
|
||||
@ -26,7 +26,7 @@ Group: Applications/Internet
|
||||
%endif
|
||||
Source0: %{tarball}
|
||||
Source1: %{plugin_config_name}.tar.gz
|
||||
Source2: firefox-langpacks-%{version}-20070718.tar.bz2
|
||||
Source2: firefox-langpacks-%{version}-20070731.tar.bz2
|
||||
Source10: firefox-mozconfig
|
||||
Source11: firefox-mozconfig-branded
|
||||
Source12: firefox-redhat-default-prefs.js
|
||||
@ -75,6 +75,7 @@ Patch89: firefox-1.5-xft-rangewidth.patch
|
||||
# Other
|
||||
Patch102: firefox-1.5-theme-change.patch
|
||||
Patch104: firefox-1.5-ppc64.patch
|
||||
Patch105: firefox-2.0-dnd.patch
|
||||
|
||||
%if %{official_branding}
|
||||
# Required by Mozilla Corporation
|
||||
@ -175,6 +176,7 @@ removed in favor of xulrunner-devel.
|
||||
|
||||
%patch102 -p0 -b .theme-change
|
||||
%patch104 -p1 -b .ppc64
|
||||
%patch105 -p0 -b .dnd
|
||||
|
||||
# For branding specific patches.
|
||||
|
||||
@ -236,7 +238,7 @@ DESTDIR=$RPM_BUILD_ROOT make install
|
||||
|
||||
%{__mkdir_p} $RPM_BUILD_ROOT{%{_libdir},%{_bindir},%{_datadir}/applications}
|
||||
|
||||
%{__install} -p -D %{SOURCE22} $RPM_BUILD_ROOT%{_datadir}/pixmaps/%{name}.png
|
||||
%{__install} -p -D -m 644 %{SOURCE22} $RPM_BUILD_ROOT%{_datadir}/pixmaps/%{name}.png
|
||||
|
||||
desktop-file-install --vendor mozilla \
|
||||
--dir $RPM_BUILD_ROOT%{_datadir}/applications \
|
||||
@ -462,6 +464,11 @@ fi
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
%changelog
|
||||
* Sat Aug 4 2007 Christopher Aillon <caillon@redhat.com> 2.0.0.6-1
|
||||
- Update to 2.0.0.6
|
||||
- Fix dnd support to/from gtk2 apps
|
||||
- Fix installed permissions of *.png
|
||||
|
||||
* Mon Jul 23 2007 Martin Stransky <stransky@redhat.com> 2.0.0.5-3
|
||||
- added nspluginwrapper support
|
||||
|
||||
|
4
sources
4
sources
@ -1,3 +1,3 @@
|
||||
5a6ca3e4ac3ebc335d473cd3f682a916 firefox-2.0.0.5-source.tar.bz2
|
||||
0d24292fcd40f85b3ed64bb1ed2e006e firefox-langpacks-2.0.0.5-20070718.tar.bz2
|
||||
73e1094a055496486b1ef685a6bc3960 firefox-langpacks-2.0.0.6-20070731.tar.bz2
|
||||
16fb252fb7b0371894f7101b88fd9076 firefox-2.0.0.6-source.tar.bz2
|
||||
92d71693f1d9d77c0a4d2fcc63de17b2 plugin-config-1.1.tar.gz
|
||||
|
Loading…
Reference in New Issue
Block a user