Hi. Sorry. Was away. Will have a look at this and reply back ASAP. Satyajit Sahoo UX Designer Behance Profile <https://www.behance.net/satyajitha28c7>
We're all stories, in the end. Just make it a good one, eh? — The Doctor, Season 5, Episode 13. On 20 May 2015 at 10:15, Alan Knowles <a...@roojs.com> wrote: > this is the code from seed, it should give you an idea. > > The original code is here > > https://github.com/roojs/app.Builder.js/blob/master/old-javascript/Builder3/Window.js > > - but it's pretty confusing to read that without understanding the whole > codebase.. > I've summarized the important stuff below > > ----------- (globally somewhere) > atoms = { > "STRING" : Gdk.atom_intern("STRING") > }; > targetList = new Gtk.TargetList(); > targetList.add( atoms["STRING"], 0, 0); > > > > ----------------------------------------- > setting up widget..(note 'this.el' - is a GtkTreeView) > > this.el.drag_source_set( /* widget will be drag-able */ > Gdk.ModifierType.BUTTON1_MASK, /* modifier that will start a > drag */ > null, /* lists of target to support */ > 0, /* size of list */ > Gdk.DragAction.COPY | Gdk.DragAction.MOVE /* what to do > with data after dropped */ > ); > > this.el.drag_source_set_target_list(targetList); > > this.el.drag_source_add_text_targets(); > this.el.drag_dest_set > ( > Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT, > null, /* lists of target to support */ > 0, /* size of list */ > Gdk.DragAction.COPY | Gdk.DragAction.MOVE /* what to do with > data after dropped */ > ); > > this.el.drag_dest_set_target_list( imports.Builder3.Globals.targetList); > this.el.drag_dest_add_text_targets( ); > > ---------------- > signal handlers (note 'this.el' - is a GtkTreeView) > > drag_begin : function (self, ctx) { > var ret ={}; > this.selection.get_selected(ret); > > > > // make the drag icon a picture of the node that was selected > var path = ret.model.get_path(ret.iter); > > > // returns a cairo surface > var pix = this.el.create_row_drag_icon ( path); > > if (Gtk.drag_set_icon_surface) { > Gtk.drag_set_icon_surface( ctx, pix ); > } else { > Gtk.drag_set_icon_pixmap (ctx, > pix.get_colormap(), pix, null, -10, -10); > } > > return true; > }, > > drag_end : function (self, drag_context) { > > return true; > }, > > > > drag_data_get : function(self, ctx, sel_data, info, time) > { > // not sure if this is needed..... > sel_data.set_text( > "HELOLW" > > ); > > }, > > drag_motion : function (self, ctx, x, y, time) { > var src = Gtk.drag_get_source_widget( ctx); > > > var action = Gdk.DragAction.COPY; > if (src == this.el) { > // unless we are copying!!! ctl button.. > action = ctx.get_actions() & Gdk.DragAction.MOVE ? > Gdk.DragAction.MOVE : Gdk.DragAction.COPY ; > } > var data = {}; > > > > if (!something_is_wrong) { // just an example > Gdk.drag_status(ctx, 0 ,time); > return false; // not over apoint!?! > } > > > Gdk.drag_status(ctx, action ,time); > > return true; > }, > > > > drag_drop : function (w, ctx, x, y, time) { > Seed.print("TARGET: drag-drop"); > > w.drag_get_data > ( /* will receive 'drag-data-received' signal */ > ctx, /* represents the current state of the DnD */ > atoms["STRING"], /* the target type we want */ > time /* time stamp */ > ); > > > return true; > }, > > drag_data_received : function (self, ctx, x, y, sel_data, info, time) { > > var delete_selection_data = false; > var dnd_success = false; > > > if( true || (sel_data && sel_data.length )) { > > if (ctx.action == Gdk.DragAction.ASK) { > /* Ask the user to move or copy, then set the ctx action. */ > } > > if (ctx.action == Gdk.DragAction.MOVE) { > //delete_selection_data = true; > } > > var source = Gtk.drag_get_source_widget( ctx ); > > > > // we can send stuff to souce here... > > dnd_success = true; > > } > > > Gtk.drag_finish ( ctx, dnd_success, delete_selection_data, time); > return true; > }, > > > > > > On Wednesday, May 20, 2015 08:23 AM, Satyajit Sahoo wrote: > > Hello all. > > I was trying to build a simple app with drag 'n drop with GJS. But since > I'm new to this stuff, I'm having a hard time figuring out what to do. Here > is the code I've. > > #!/usr/bin/gjs > > const Gio = imports.gi.Gio; > const Gdk = imports.gi.Gdk; > const Gtk = imports.gi.Gtk; > const Lang = imports.lang; > > const APP_NAME = "Crush"; > > const Application = new Lang.Class({ > Name: APP_NAME, > > _init: function() { > this.application = new Gtk.Application({ > application_id: "org.ozonos.crush", > flags: Gio.ApplicationFlags.FLAGS_NONE > }); > > this.application.connect("activate", Lang.bind(this, > this._onActivate)); > this.application.connect("startup", Lang.bind(this, > this._onStartup)); > }, > > _buildUI: function() { > this._window = new Gtk.ApplicationWindow({ > application: this.application, > window_position: Gtk.WindowPosition.CENTER, > title: APP_NAME > }); > > try { > let icon = Gtk.IconTheme.get_default().load_icon("crush", 48, > 0); > > this._window.set_icon(icon); > } catch (e) { > print("Failed to load application icon: " + e.message); > } > > this._headerbar = new Gtk.HeaderBar({ > title: APP_NAME, > show_close_button: true > }); > > // Let's set up our window for drag 'n drop > let dnd = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); > > dnd.set_vexpand(true); > dnd.set_hexpand(true); > > * let target = new Gtk.TargetEntry("text/uri-list", > Gtk.TargetFlags.OTHER_APP, 0);* > > * dnd.drag_dest_set(Gtk.DestDefaults.ALL, [ target ], > Gdk.DragAction.PRIVATE);* > > * dnd.drag_dest_add_image_targets();* > > * dnd.connect("drag_drop", (...args) => {* > * print("Stuff dropped here" + args);* > * });* > > let label = new Gtk.Label({ label: "Drop images here to Crush!" > }); > > dnd.set_center_widget(label); > > this._window.add(dnd); > > this._window.set_default_size(800, 600); > this._window.set_titlebar(this._headerbar); > this._window.show_all(); > }, > > _onActivate: function() { > this._window.present(); > }, > > _onStartup: function() { > this._buildUI(); > } > }); > > let app = new Application(); > > app.application.run(ARGV); > > Satyajit Sahoo > UX Designer > Behance Profile <https://www.behance.net/satyajitha28c7> > > We're all stories, in the end. Just make it a good one, eh? — The Doctor, > Season 5, Episode 13. > > > _______________________________________________ > javascript-list mailing > listjavascript-list@gnome.orghttps://mail.gnome.org/mailman/listinfo/javascript-list > > >
_______________________________________________ javascript-list mailing list javascript-list@gnome.org https://mail.gnome.org/mailman/listinfo/javascript-list