Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/gtk3-drag-and-drop-example.py
diff options
context:
space:
mode:
Diffstat (limited to 'gtk3-drag-and-drop-example.py')
-rw-r--r--gtk3-drag-and-drop-example.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/gtk3-drag-and-drop-example.py b/gtk3-drag-and-drop-example.py
new file mode 100644
index 0000000..4a899b7
--- /dev/null
+++ b/gtk3-drag-and-drop-example.py
@@ -0,0 +1,73 @@
+from gi.repository import Gtk
+from gi.repository import GdkPixbuf
+from gi.repository import Gdk
+from gi.repository import Pango
+
+# The images used in this example are these ones:
+# http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/demos/data/apple-red.png
+
+def _destroy_cb(widget, data=None):
+ Gtk.main_quit()
+
+def drag_begin_event(widget, context, data):
+ print 'drag_BEGIN_event'
+ widget.drag_source_set_icon_pixbuf(widget.get_child().get_pixbuf())
+
+def drag_data_get_event(widget, context, selection_data, info,
+ timestamp, data):
+ print 'drag_data_GET_event'
+ selection_data.set_pixbuf(widget.get_child().get_pixbuf())
+
+def drag_data_received_event(widget, drag_context, x, y, data,
+ info, time, user_data):
+ print 'drag_data_RECEIVED_event'
+ if user_data == 'Image':
+ widget.set_from_pixbuf(data.get_pixbuf())
+ elif user_data == 'TextView':
+ buf = widget.get_buffer()
+ buf.insert_pixbuf(buf.get_start_iter(), data.get_pixbuf())
+ Gtk.drag_finish(drag_context, True, False, time)
+
+window = Gtk.Window()
+window.set_title('Gtk3 Drag And Drop Example')
+window.set_default_size(300, 180)
+window.connect("destroy", _destroy_cb)
+
+
+image = Gtk.Image()
+imagebuf = GdkPixbuf.Pixbuf.new_from_file('apple-red.png')
+image.set_from_pixbuf(imagebuf)
+
+imagebox = Gtk.EventBox()
+imagebox.add(image)
+
+imagebox.drag_source_set(
+ Gdk.ModifierType.BUTTON1_MASK,
+ [],
+ Gdk.DragAction.COPY)
+imagebox.drag_source_add_image_targets()
+
+imagebox.connect('drag-begin', drag_begin_event, None)
+imagebox.connect('drag-data-get', drag_data_get_event, None)
+
+hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
+hbox.pack_start(imagebox, True, True, 10)
+
+text = Gtk.TextView()
+text.set_wrap_mode(Gtk.WrapMode.WORD)
+text.set_editable(True)
+text.modify_font(Pango.FontDescription('arial 12'))
+text.connect('drag-data-received', drag_data_received_event, 'TextView')
+text.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
+# text.drag_dest_set_target_list(None)
+text.drag_dest_add_text_targets()
+text.drag_dest_add_image_targets()
+
+vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+vbox.add(hbox)
+vbox.add(text)
+
+window.add(vbox)
+
+window.show_all()
+Gtk.main()