Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.0, 1.0.1, and 1.0.2

cslist: add signal to notify dropping files from file manager

Changeset 37f3dfa2884b

Parent eeb2b2b45492

by Yuki KODAMA

Changes to one file · Browse files at 37f3dfa2884b Showing diff from parent eeb2b2b45492 Diff from another changeset...

 
5
6
7
 
8
9
 
10
11
12
 
15
16
17
18
 
 
19
20
21
 
25
26
27
28
 
 
 
 
 
29
30
31
 
101
102
103
104
105
106
107
 
 
 
 
108
109
110
 
661
662
663
664
665
 
 
666
667
668
 
 
 
 
 
 
 
 
669
670
671
672
 
673
674
675
 
5
6
7
8
9
10
11
12
13
14
 
17
18
19
 
20
21
22
23
24
 
28
29
30
 
31
32
33
34
35
36
37
38
 
108
109
110
 
 
 
 
111
112
113
114
115
116
117
 
668
669
670
 
 
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
 
687
688
689
690
@@ -5,8 +5,10 @@
 # This software may be used and distributed according to the terms of the  # GNU General Public License version 2, incorporated herein by reference.   +import os  import gtk  import gobject +import urllib    from mercurial import hg, ui   @@ -15,7 +17,8 @@
   from tortoisehg.hgtk import csinfo, gtklib   -CSL_DND_ID = 1024 +CSL_DND_ITEM = 1024 +CSL_DND_URI_LIST = 1025    class ChangesetList(gtk.Frame):   @@ -25,7 +28,11 @@
  (object, # number of all items or None   object, # number of selections or None   object, # number of showings or None - bool)) # whether cslist is updating + bool)), # whether cslist is updating + 'files-dropped': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + (object, # list of dropped files + str)) # raw string data   }     def __init__(self): @@ -101,10 +108,10 @@
  self.curitems, self.currepo, queue=False, keep=True))     # dnd setup - self.dnd_targets = [('thg-dnd', gtk.TARGET_SAME_WIDGET, CSL_DND_ID)] - csevent.drag_dest_set(gtk.DEST_DEFAULT_MOTION | - gtk.DEST_DEFAULT_DROP, self.dnd_targets, - gtk.gdk.ACTION_MOVE) + self.dnd_targets = [('thg-dnd', gtk.TARGET_SAME_WIDGET, CSL_DND_ITEM)] + targets = self.dnd_targets + [('text/uri-list', 0, CSL_DND_URI_LIST)] + csevent.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_DROP, + targets, gtk.gdk.ACTION_MOVE)   csevent.connect('drag-begin', self.dnd_begin)   csevent.connect('drag-end', self.dnd_end)   csevent.connect('drag-motion', self.dnd_motion) @@ -661,15 +668,23 @@
  def dnd_leave(self, widget, context, event_time):   self.teardown_dnd(pause=True)   - def dnd_received(self, widget, context, x, y, sel, target_type, event_time): - if target_type == CSL_DND_ID: + def dnd_received(self, widget, context, x, y, sel, target_type, *args): + if target_type == CSL_DND_ITEM:   items = self.curitems   pos, start, end = self.get_item_pos(y, detail=True)   self.reorder_item(self.item_drag, end) + elif target_type == CSL_DND_URI_LIST: + files = [] + for line in sel.data.rstrip('\x00').splitlines(): + if line.startswith('file:'): + path = os.path.normpath(urllib.url2pathname(line[5:])) + files.append(path) + if files: + self.emit('files-dropped', files, sel.data)     def dnd_get(self, widget, context, sel, target_type, event_time):   pos = self.item_drag - if target_type == CSL_DND_ID and pos is not None: + if target_type == CSL_DND_ITEM and pos is not None:   sel.set(sel.target, 8, str(self.curitems[pos]))     def button_press(self, widget, event):