J'essaye de capturer l'événement configure pour chaque fenêtre pour créer une fonction d'accrochage Windows 7-esque. Je sais qu'il existe des solutions impliquant compiz-fusion, mais mon installation fonctionne dans vmware et n'a pas d'accélération matérielle pour faire fonctionner compiz. J'ai pensé qu'un simple script python pourrait faire ce que je voulais, mais je n'arrive pas à trouver le bon endroit pour lier l'événement configure.pyGTK détecter tous les événements de déplacement de la fenêtre
Comment/à quoi lier le rappel configure-event, ou y a-t-il un événement différent que je dois surveiller? J'ai essayé de le lier à l'écran et à la fenêtre racine en utilisant get_root_window() sans chance.
EDIT2
Maintenant je peux capturer tous les événements, le problème est que chaque événement renvoyé est de type GDK_NOTHING, donc je ne peux pas dire la différence entre les événements de discussion, déplacer les événements, les événements à proximité, etc.
#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk, wnck
import inspect
def move_event(e):
print e.type, e.window
print inspect.getmembers(e)
return gtk.gdk.FILTER_CONTINUE
def bind_win(screen, win):
w = gtk.gdk.window_foreign_new(win.get_xid())
if w:
w.set_events(w.get_events() | gtk.gdk.ALL_EVENTS_MASK)
w.add_filter(move_event)
if __name__ == "__main__":
screen = wnck.screen_get_default()
screen.connect("window_opened", bind_win)
gtk.main()
une itération de move_event (e) tout en faisant glisser une fenêtre:
<enum GDK_NOTHING of type GdkEventType> <gtk.gdk.Window object at 0x7f38f72f8730 (GdkWindow at 0x196ce20)> [('copy', <built-in method copy of gtk.gdk.Event object at 0x7f3900513d00>), ('free', <built-in method free of gtk.gdk.Event object at 0x7f3900513d00>), ('get_axis', <built-in method get_axis of gtk.gdk.Event object at 0x7f3900513d00>), ('get_coords', <built-in method get_coords of gtk.gdk.Event object at 0x7f3900513d00>), ('get_root_coords', <built-in method get_root_coords of gtk.gdk.Event object at 0x7f3900513d00>), ('get_screen', <built-in method get_screen of gtk.gdk.Event object at 0x7f3900513d00>), ('get_state', <built-in method get_state of gtk.gdk.Event object at 0x7f3900513d00>), ('get_time', <built-in method get_time of gtk.gdk.Event object at 0x7f3900513d00>), ('put', <built-in method put of gtk.gdk.Event object at 0x7f3900513d00>), ('send_client_message', <built-in method send_client_message of gtk.gdk.Event object at 0x7f3900513d00>), ('send_clientmessage_toall', <built-in method send_clientmessage_toall of gtk.gdk.Event object at 0x7f3900513d00>), ('send_event', 1), ('set_screen', <built-in method set_screen of gtk.gdk.Event object at 0x7f3900513d00>), ('type', <enum GDK_NOTHING of type GdkEventType>), ('window', <gtk.gdk.Window object at 0x7f38f72f8730 (GdkWindow at 0x196ce20)>)]
J'ai le même problème. Je pense que ce pourrait être un bug gtk. – simonzack
J'ai déposé un bug ici: https://bugzilla.gnome.org/show_bug.cgi?id=722027 – simonzack