Thanx for help. I have gone through it. What you have suggested is, to implement "drag_motion" to destination. But I think implementation should be on source. Because "drag_motion" of destination gets called when pointer moves or enteres on it. And I want to set pointer(of my choice) from start of dragging, so that it will show me set pointer any where on the screen even if I have not entered the destination. Will you plz. clear my doubts. Thanx Vijay ------ learfox furry ao net wrote:
Is there any function or method to set cursor. Or shall I ungrab source widget and grab it again passing cursor of my choice. But where to ungrab and grab source?Hi, I'm the original author that wrote the GTK+ Drag and Drop tutorial. I've experimented with this area of GTK+'s implmentation of DND for quite some time. Although I have never actually tried to change the pointer cursor (as what you are trying to do) I have modified drag status during drag and the steps to change the cursor may be similar so atleast I can give you a lead. First when you set up your destination widget, use: gtk_drag_dest_set( widget, /* GTK_DEST_DEFAULT_MOTION | */ GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, target_entry, total_target_entries, actions ); Note that GTK_DEST_DEFAULT_MOTION is commented out, this is so that we can handle the "drag_motion" signal. So just below that put: gtk_signal_connect( GTK_OBJECT(widget), "drag_motion", GTK_SIGNAL_FUNC(GUIDragMotionCB), cb_data_ptr ); Now for our GUIDragMotionCB() function: gboolean GUIDragMotionCB( GtkWidget *widget, GdkDragContext *dc, gint x, gint y, guint t, gpointer data ) { gbool same; GtkWidget *source_widget; GdkDragAction action; /* Get source widget and check if it is the same as the * destination widget. */ source_widget = gtk_drag_get_source_widget(dc); same = ((source_widget == widget) ? TRUE : FALSE); /* Insert code to get our default action here. */ /* Change this as needed. */ action = GDK_ACTION_MOVE; /* Respond with default drag action (status). First we check * the dc's list of actions. If the list only contains * move or copy then we select just that, otherwise we return * with our default suggested action. * If no valid actions are listed then we respond with 0. */ /* Only move? */ if(dc->actions == GDK_ACTION_MOVE) gdk_drag_status(dc, GDK_ACTION_MOVE, t); /* Only copy? */ else if(dc->actions == GDK_ACTION_COPY) gdk_drag_status(dc, GDK_ACTION_COPY, t); /* Our default action in list? */ else if(dc->actions & action) gdk_drag_status(dc, action, t); /* All else respond with 0. */ else gdk_drag_status(dc, 0, t); return(TRUE); } What you've seen above is basically changing the drag action based on what the source widget and target widget's attributes. The modification of a cursor *MIGHT* be done in a similar way. So I would recommend trying to add some experimental code to the above function. Maybe inserting some gdk cursor setting functions or regrabbing the pointer (may be messy). I've been stumped on the same problem you have and this is the best lead I can give you at the moment. If I find anything new I'll post it on the GTK+ list, good luck!!! :) -- Sincerely, ,"-_ \|/ -Capt. Taura M. , O=__ --X-- ..__ ,_JNMNNEO=_ /|\ OMNOUMmnne. {OMMNNNEEEEOO=_ UOOOBIOOOEOMMn. 'LONMMMMNNEEEOOO=.__..,,.. UUOOEUUOOOOOOOObe '"=OMMMMWNEEEOOOOO,"=OEEEOO=,._ OOUUUIEEIOONNOIUbe. "7OMMMMNNNNNWWEEEEOOOOOO" "'. EEBNNMMMNWNWWEEIMMNe. __ 7EMMMNNNNNWWWEEEEEEEOO. " . NNMMMMWWWMMMWEINMMMNn "=BBEEEEMMMMMMMMNNNWWWEEOOOOO=._ . http://furry.ao.net/~learfox/
-- --------------------------------------------------------------------- VIJAYKUMAR S. KALE ESG, TTIL, Telco Campus,PUNE - 411 018 email: vskale telco co in phone: (off.) +91-212-7402049 (Direct) +91-212-7402947 (Direct) (resi.) +91-212-4358085 ---------------------------------------------------------------------- ~
Attachment:
vsk.vcf
Description: Card for VijayaKumar S. Kale