Glade Panel in Axis blocks arrow keys

More
8 years 9 months ago #105219 by +Jan+
Hey Chris,
I tested your code today, my xembed file:
Code:
#!/usr/bin/env python # vim: sts=4 sw=4 et """ XEmbed helper functions to allow correct embeding inside Axis """ import gtk def reparent(window, parent): """ Forced reparent. When reparenting Gtk applications into Tk some extra protocol calls are needed. """ from Xlib import display from Xlib.xobject import drawable if not parent: return window plug = gtk.Plug(long(parent)) plug.show() d = display.Display() w = drawable.Window(d.display, plug.window.xid, 0) # Honor XEmbed spec atom = d.get_atom('_XEMBED_INFO') w.change_property(atom, atom, 32, [0, 1]) w.reparent(parent, 0, 0) w.map() d.sync() for c in window.get_children(): window.remove(c) plug.add(c) # Hide window if it's displayed window.unmap() return plug def keyboard_forward(window, forward): """ XXX: Keyboard events forwardind This is kind of hack needed to properly function inside Tk windows. Gtk app will receive _all_ events, even not needed. So we have to forward back things that left over after our widgets. Connect handlers _after_ all others and listen for key-presss and key-release events. If key is not in ignore list - forward it to window id found in evironment. """ if not forward: return try: forward = int(forward, 0) except: return from Xlib.protocol import event from Xlib import display, X from Xlib.xobject import drawable d = display.Display() fw = drawable.Window(d.display, forward, 0) ks = gtk.keysyms ignore = [ ks.Tab, ks.Page_Up, ks.Page_Down , ks.KP_Page_Up, ks.KP_Page_Down , ks.Left, ks.Right, ks.Up, ks.Down , ks.KP_Left, ks.KP_Right, ks.KP_Up, ks.KP_Down , ks.bracketleft, ks.bracketright ] def gtk2xlib(e, fw, g, type=None): if type is None: type = e.type if type == gtk.gdk.KEY_PRESS: klass = event.KeyPress elif type == gtk.gdk.KEY_RELEASE: klass = event.KeyRelease else: return kw = dict(window=fw, detail=e.hardware_keycode, state=e.state & 0xff, child=X.NONE, root=g._data['root'], root_x=g._data['x'], root_y=g._data['y'], event_x=0, event_y=0, same_screen=1) return klass(time=e.time, **kw) def forward_press(w, e, fw): if e.keyval in ignore: return g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return fw.send_event(fe) def forward_release(w, e, fw): g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return fw.send_event(fe) window.connect_after("key-press-event", forward_press, fw) window.connect("key-release-event", forward_release, fw) window.add_events(gtk.gdk.KEY_PRESS_MASK) window.add_events(gtk.gdk.KEY_RELEASE_MASK)

Now xyz behave the same way (no oszillating on z anymore), but they still do not stop on the FIRST button release after moving the mouse into the panel.

hmm i see press events use 'connect_after' and release uses 'connect'
changing those commands could make a difference too.


No difference :huh:

Thanks in advance

Jan

Please Log in or Create an account to join the conversation.

More
8 years 9 months ago - 8 years 9 months ago #105225 by cmorley
Starting with my last code
Change the one function to this:
Code:
def forward_release(w, e, fw): CMD.jog(self.emc.JOG_STOP, 0) CMD.jog(self.emc.JOG_STOP, 1) CMD.jog(self.emc.JOG_STOP, 2) g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return fw.send_event(fe)

add this to the top of the file:

import linuxcnc
CMD = linuxcnc.cmmand()

This will only work in 2.7.X
It's a brute force way to do it but will be interesting if it actually works as expected.

Chris M
Last edit: 8 years 9 months ago by cmorley.

Please Log in or Create an account to join the conversation.

More
8 years 9 months ago - 8 years 9 months ago #105236 by +Jan+
Hello Chris,
I tried to use your on code on a 2.7 machine and got on the terminal the message:

CMD.jog(self.emc.JOG_STOP, 0)
NameError: global name 'self' is not defined



I suppose I have to do something additional?

I corrected

CMD = linuxcnc.cmmand()

to

CMD = linuxcnc.command()


Is that correct?
Last edit: 8 years 9 months ago by +Jan+.

Please Log in or Create an account to join the conversation.

More
8 years 9 months ago #105239 by cmorley
change them to like this:
CMD.jog(linuxcnc.JOG_STOP, 0)

and yes i misspelled command

Chris M

Please Log in or Create an account to join the conversation.

More
8 years 9 months ago - 8 years 9 months ago #105249 by +Jan+
Hey Chris,
thanks for your comments, It works now under 2.7. :)
I did my very first python programmning approach with some changes, so that this brute force event only takes place when I release on of the keys mentioned in the ignore section:
Code:
def forward_press(w, e, fw): if e.keyval in ignore: return g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return fw.send_event(fe) def forward_release(w, e, fw): if e.keyval in ignore: CMD.jog(linuxcnc.JOG_STOP, 0) print 'stop0' CMD.jog(linuxcnc.JOG_STOP, 1) print 'stop1' CMD.jog(linuxcnc.JOG_STOP, 2) print 'stop2' g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return g = fw.get_geometry() fe = gtk2xlib(e, fw, g) if not fe: return fw.send_event(fe) window.connect_after("key-press-event", forward_press, fw) window.connect("key-release-event", forward_release, fw)

This avoids error messages after hitting for example the esc key.
I`m still interested in a "clean" way which works also in 2.8. How should I go on?

Best wishes

Jan
Last edit: 8 years 9 months ago by +Jan+.

Please Log in or Create an account to join the conversation.

More
8 years 9 months ago #105257 by cmorley
Excellent !
Nice on the editing too - that is one reason why I like python it is pretty easy to figure out and test changes.

The CMD.jog function has changed in master requiring another bit of data.
It is part of the upgrade for axis to joints.
I will look at whats required soon for you.

I would prefer to see the code send out release events rather then assume they are jogging keys.
If someone changed the jogging key is AXIS it could mess things up - but thats a problem if we pushed this fix to linuxcnc.
At this point I am just glade we have made a positive step...

Chris M

Please Log in or Create an account to join the conversation.

Time to create page: 0.417 seconds
Powered by Kunena Forum