Author: jackson
Date: 2007-02-16 13:07:25 -0500 (Fri, 16 Feb 2007)
New Revision: 73034

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/X11Dnd.cs
Log:

        * X11Dnd.cs: Implement aliases on mime handlers, so things like
        System.String are mapped to text.
        - Handle dataobjects, getting all the possible formats out of
          them
        - We dont need the drag event args before we give feedback. This
        allows feedback cursors to be immediate before selections have
        been converted.



Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-02-16 17:53:02 UTC (rev 73033)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-02-16 18:07:25 UTC (rev 73034)
@@ -1,5 +1,14 @@
 2007-02-16  Jackson Harper  <[EMAIL PROTECTED]>
 
+       * X11Dnd.cs: Implement aliases on mime handlers, so things like
+       System.String are mapped to text.
+       - Handle dataobjects, getting all the possible formats out of them
+       - We dont need the drag event args before we give feedback. This
+       allows feedback cursors to be immediate before selections have
+       been converted.
+
+2007-02-16  Jackson Harper  <[EMAIL PROTECTED]>
+
        * TextBoxBase.cs: Modified the method for inserting images to
        taking a line and position instead of tag and position.
        * RichTextBox.cs: Handle PngBlip data by inserting the png image

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/X11Dnd.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/X11Dnd.cs        
2007-02-16 17:53:02 UTC (rev 73033)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/X11Dnd.cs        
2007-02-16 18:07:25 UTC (rev 73034)
@@ -60,14 +60,20 @@
 
                private class MimeHandler {
                        public string Name;
+                       public string [] Aliases;
                        public IntPtr Type;
                        public IntPtr NonProtocol;
                        public IDataConverter Converter;
                        
-                       public MimeHandler (string name, IDataConverter 
converter)
+                       public MimeHandler (string name, IDataConverter 
converter) : this (name, converter, name)
                        {
+                       }
+
+                       public MimeHandler (string name, IDataConverter 
converter, params string [] aliases)
+                       {
                                Name = name;
                                Converter = converter;
+                               Aliases = aliases;
                        }
 
                        public override string ToString ()
@@ -83,8 +89,9 @@
 //                     new MimeHandler ("text/richtext", new MimeConverter 
(RtfConverter)),
 
                        new MimeHandler ("text/plain", new TextConverter ()),
-                       new MimeHandler ("text/html", new HtmlConverter ()),
-                       new MimeHandler ("text/uri-list", new UriListConverter 
()),
+                       new MimeHandler ("text/plain", new TextConverter (), 
"System.String", DataFormats.Text),
+                       new MimeHandler ("text/html", new HtmlConverter (), 
DataFormats.Html),
+                       new MimeHandler ("text/uri-list", new UriListConverter 
(), DataFormats.FileDrop),
                        new MimeHandler ("application/x-mono-serialized-object",
                                        new SerializedObjectConverter ())
                };
@@ -181,9 +188,13 @@
                                int len;
                                string str = data as string;
 
-                               if (data == null)
-                                       return;
-                               
+                               if (str == null) {
+                                       IDataObject dobj = data as IDataObject;
+                                       if (dobj == null)
+                                               return;
+                                       str = (string) dobj.GetData 
("System.String", true);
+                               }
+
                                if (xevent.SelectionRequestEvent.target == 
(IntPtr)Atom.XA_STRING) {
                                        byte [] bytes = Encoding.ASCII.GetBytes 
(str);
                                        buffer = Marshal.AllocHGlobal 
(bytes.Length);
@@ -236,6 +247,13 @@
                        {
                                string [] uri_list = data as string [];
 
+                               if (uri_list == null) {
+                                       IDataObject dobj = data as IDataObject;
+                                       if (dobj == null)
+                                               return;
+                                       uri_list = dobj.GetData 
(DataFormats.FileDrop, true) as string [];
+                               }
+
                                if (uri_list == null)
                                        return;
 
@@ -246,7 +264,7 @@
                                        res.Append ("\r\n");
                                }
 
-                               IntPtr buffer = Marshal.StringToHGlobalAnsi 
((string) data);
+                               IntPtr buffer = Marshal.StringToHGlobalAnsi 
((string) res.ToString ());
                                int len = 0;
                                while (Marshal.ReadByte (buffer, len) != 0)
                                        len++;
@@ -564,6 +582,7 @@
                {
                        QueryContinueDragEventArgs qce = new 
QueryContinueDragEventArgs ((int) XplatUI.State.ModifierKeys,
                                        escape, action);
+
                        Control c = MwfWindow (source);
                        c.DndContinueDrag (qce);
 
@@ -584,13 +603,11 @@
 
                private void GiveFeedback (IntPtr action)
                {
-                       if (drag_event == null)
-                               return;
-                       GiveFeedbackEventArgs gfe = new GiveFeedbackEventArgs 
(drag_event.Effect, true);
+                       GiveFeedbackEventArgs gfe = new GiveFeedbackEventArgs 
(EffectFromAction (drag_data.Action), true);
+
                        Control c = MwfWindow (source);
+                       c.DndFeedback (gfe);
 
-                       c.DndFeedback (gfe);
-                       
                        if (gfe.UseDefaultCursors) {
                                Cursor cursor = CursorNo;
                                if (drag_data.WillAccept) {
@@ -783,7 +800,7 @@
                                        return true;
 
                                drag_data.WillAccept = ((int) 
xevent.ClientMessageEvent.ptr2 & 0x1) != 0;
-
+                               
                                GiveFeedback (xevent.ClientMessageEvent.ptr5);
                        }
                        return true;
@@ -875,8 +892,10 @@
                private MimeHandler FindHandler (string name)
                {
                        foreach (MimeHandler handler in MimeHandlers) {
-                               if (handler.Name == name)
-                                       return handler;
+                               foreach (string alias in handler.Aliases) {
+                                       if (alias == name)
+                                               return handler;
+                               }
                        }
                        return null;
                }
@@ -1188,9 +1207,13 @@
 
                         */
 
-                       if (data is IDataObject) {
-                               
-
+                       IDataObject data_object = data as IDataObject;
+                       if (data_object != null) {
+                               foreach (string format in 
data_object.GetFormats (true)) {
+                                       MimeHandler handler = FindHandler 
(format);
+                                       if (handler != null && !res.Contains 
(handler.Type))
+                                               res.Add (handler.Type);
+                               }
                        }
 
                        if (data is ISerializable) {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to