Hi,

Am Montag, den 02.01.2006, 20:43 +0100 schrieb Mattias Gaertner:
> On Mon, 02 Jan 2006 20:20:12 +0100
> dannym <[EMAIL PROTECTED]> wrote:
> 
> > Hi,
> > 
> > Am Montag, den 02.01.2006, 19:48 +0100 schrieb Christian U.:
> > > Seems taht nobody have used something bevore...
> > > We don___t need LM_DROPFILES for Linux i do need it in windows, iam
> > > underway to implement it in windows.
> > > Also I have found documentations for qt (kde) so thers also no big
> > > problem.
> > > Does the gtk+ drag/drop support work also for not gtk applications ?
> > > At example with kfm ? 
> > 
> > yes, XDND is a freedesktop standard, so it works with everything that
> > honors it. Gnome honors it, KDE honors it and firefox honors it (the
> > latter a little bit only).
> > http://www.newplanetsoftware.com/xdnd/dragging_files.html
> > 
> > Are you only talking about dragging+dropping files or do you want
> > dragging+dropping work for anything else too? (text, images, .....)
> > 
> > > Or is it needed to use the lib of the wm ?
> > 
> > No, as far as I know the window manager does not take part in drag&drop.
> > What would it do?
> > 
> > > 
> > > What schould we do to implement drag & drop correct @ Matthias ?
> > > Implement it in the Interface (I think that___s the best choice)
> > > Or implement it in an special unit that musnt come with lazarus ?
> 
> Drag&Drop needs to be completed in the interface and controls.pp.
> For Drag&Drop between applications we need to gather the different ways of
> winapi, gtk, qt and carbon and find a platform independent interface for the
> LCL.
> How does it work under gtk2, carbon, winapi? Examples would be nice.

gtk2 (python, as that is where i used it most):

action = gtk.gdk.ACTION_COPY

# the TARGET_TYPE_URL_LIST is just some numeric id for _us_, not for
gtk.
# the "0" is just some flags whether to pre-limit drops to the same
application or the same widget or not at all (0 = not at all).

dndDests = [
        ( "text/uri-list", 0, TARGET_TYPE_URI_LIST ),

# text:
        ( "text/plain", 0, TARGET_TYPE_TEXT ),
        ( "UTF8_STRING", 0, TARGET_TYPE_TEXT ),
        ( "text/unicode", 0, TARGET_TYPE_TEXT ), # netscape...weird
        ( "STRING", 0, TARGET_TYPE_TEXT )
]

self.drag_dest_set(
  gtk.DEST_DEFAULT_ALL,
  #gtk.DEST_DEFAULT_DROP|gtk.DEST_DEFAULT_HIGHLIGHT|
  gtk.DEST_DEFAULT_MOTION,
  targets,
  action)

self.connect("drag-data-received", self.drag_data_received_cb)

def drag_data_received_cb(self, widget, context, x, y, sdata, info,
time):
  items = sdata.data.split("\r\n") 
  # not sure of the line endings - 
  # but it is standardized in some RFC, can't remember

  for item in items:
    if item.startswith("file:"):
      # item: "file://full-hostname/path/to/file"

      if item.split("/", 3)[2] != socket.gethostname():
        # wtf 
        # failed, do not delete source
        context.finish(False, False, time)
      else: # ok
        # most use the local encoding for that url, 
        # NOT neccessarily UTF-8
    elif item.startswith("http:"):
      # official http URLs are required to use urlencoded UTF-8
      # so, no whacky characters/encodings,...
    else.....


  # 1st parameter: successful?
  # 2nd parameter: source_should_delete_original?
  context.finish(True, False, time)

That is a little example supporting XDND drop of url-list (uris, encoded
file paths) only.

(It is possible to change the highlighting or do it oneself used when
hovering somewhere with a grabbed item, but I didn't do that here)

(It is also possible to make it change the mouse pointer or whatever
really depending on whether it's ok to drop at the current place or not,
but I didn't do that here)


>  
> > > I think the best way could be to implement it in the interface and make
> > > it useable in OnDragOver/OnDragDrop of the Form or OnDragFiles or
> > > something similar ...
> > 
> > In my opinion having a OnDropFiles or so would be nice to have. Note
> > that XDND (X Drag and Drop) and XDS (X Drag Save) payloads are somewhat
> > sophisticated, so I'm not sure if OnDropFiles can do much stuff on
> > behalf of the programmer. That is, even with OnDropFiles provided, it
> > still will be a bit of work for the actual application programmer to get
> > some useful data out of the drop :)
> > 
> > Do we want to handle the "drag" part of "drag&drop" too ? :)
> 
> Of course.

Okay :) the dragging part is totally distinct from the dropping part so
we can do them one at a time in order not to get confused :) [skipping
for now]

(common functions for them only are gtk_drag_set_icon_* and
gtk_drag_finish, gtk_drag_get_data, gtk_drag_get_source_widget,
gtk_drag_highlight, gtk_drag_unhighlight, gtk_drag_check_threshold -
these all operates on "the drag context", "context" in the example)

> 
> Mattias

cheers,
  Danny


_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to