Re: [pygtk] Drag and drop (DND) of gtk.Notebook tab to another widget [SOLVED]

2010-07-13 Thread Zyphos
Because there it seems that there is no source of this on internet, here
is a way to achieve this.
This is a hack, we are going to override the data parameter with the
page number instead of the C pointer to the widget.

===Code.py===
notebook = gtk.notebook()
drag_page_number = 0 # global var

notebook.connect_after(drag_begin, _sig_notebook_drag_begin)
notebook.connect_after(drag_data_get, _sig_notebook_drag_data_get)
# do not use drag_source_set on Notebook, you will get a Segmentation
Fault, use set_tab_detachable instead.
# https://bugs.launchpad.net/ubuntu/+source/pygtk/+bug/604534
# notebook.drag_source_set(gtk.gdk.BUTTON1_MASK, [], gtk.gdk.ACTION_COPY)

# add tabs to notebook
notebook.append_page(child_widget, label)
notebook.set_tab_detachable(child_widget, True)
...

def _sig_notebook_drag_begin(widget, context):
# Drag and drop begin, save current page number
drag_page_number = notebook.get_current_page()

def _sig_notebook_drag_data_get(widget, context, selection, info,
timestamp):
# Override the C pointer to the widget with page_number
selection.set(selection.target, 8, str(drag_page_number)) # data is
only of string type !

# The widget that will receive the drag and drop
button = gtk.Button(Test)
button.connect(drag_drop, _sig_drag_drop)
button.connect(drag_data_received, _sig_drag_data_received)
button.drag_dest_set(0, [], 0) # button can receive any drag and drop

def _sig_drag_drop(widget, context, x, y, time):
# widget = button here
if GTK_NOTEBOOK_TAB in context.targets:
widget.drag_get_data(context, GTK_NOTEBOOK_TAB)
context.finish(True, False, time)
return True

def _sig_drag_data_received(widget, context, x, y, selection, info,
timestamp):
# widget = button here
src_widget = context.get_source_widget() # src_widget = notebook here
the_page_number = int(selection.data)
child_widget = src_widget.get_nth_page(the_page_number)

===End of code===

Zyphos


Zyphos a écrit :
 Hi,
 I try to make a DND from a gtk.Notebook to another widget.
 I receive the 'selection' on the other widget.

 The documentation say:
 The notebook will fill the selection with a reference to the child
 widget that corresponds to the dropped tab.

 Src:
 http://library.gnome.org/devel/pygtk/stable/class-gtknotebook.html#method-gtknotebook--set-tab-detachable

 Here is the selection of this DND ('drag-data-received'):

 Selection: SelectionData: GtkSelectionData at 0xbfcc1cc4
 .data: str: ��
 .format: int: 8
 .selection: str: XdndSelection
 .target: str: GTK_NOTEBOOK_TAB
 .type: str: GTK_NOTEBOOK_TAB

 But selection.data is a string with this str: ��  (I think this is a
 pointer reference to the C code child widget) it isn't usable with Python.

 How can I retrieve the notebook child widget which the DND come from ?

 Thank you for any suggestion.

   

___
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

[pygtk] Drag and drop (DND) of gtk.Notebook tab to another widget

2010-07-12 Thread Zyphos
Hi,
I try to make a DND from a gtk.Notebook to another widget.
I receive the 'selection' on the other widget.

The documentation say:
The notebook will fill the selection with a reference to the child
widget that corresponds to the dropped tab.

Src:
http://library.gnome.org/devel/pygtk/stable/class-gtknotebook.html#method-gtknotebook--set-tab-detachable

Here is the selection of this DND ('drag-data-received'):

Selection: SelectionData: GtkSelectionData at 0xbfcc1cc4
.data: str: ��
.format: int: 8
.selection: str: XdndSelection
.target: str: GTK_NOTEBOOK_TAB
.type: str: GTK_NOTEBOOK_TAB

But selection.data is a string with this str: ��  (I think this is a
pointer reference to the C code child widget) it isn't usable with Python.

How can I retrieve the notebook child widget which the DND come from ?

Thank you for any suggestion.
___
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/