using global.display.begin_grab_op to move a window



Hi all,

I'm trying to implement the functionality of 'Move' in the right-click
menu of a window (you right click the system title bar, select 'move',
and then moving your cursor about moves the target window about until
you click, on which it then has its position set). Note that this is
not a drag operation as the cursor does not need to be held down while
you're moving the window around.

I was suggested to use global.display.begin_grab_op on the window, so
this is what I'm doing:

    global.display.begin_grab_op(global.screen, window, Meta.GrabOp.MOVING,
                                               false /* whether
cursor's already grabbed */,
                                               true /* frame action */,
                                               1    /* primary mouse button */,
                                               0    /* event flags */,
                                               global.get_current_time(),
                                               x,  /* x coord of the window */
                                               y); /* y coord of the window */

However, this always fails with:

Window manager warning: Attempt to perform window operation 1 on
window 0x2006f32 when operation 38 on none already in effect.

A bit of digging around revelas that operation 38 is
Meta.GrabOp.COMPOSITOR, which "is returned if a compositor-plugin
modal operation is in effect".

My grab op won't happen until this one finishes, but it looks like
this is always in effect (thanks to calls to meta_plugin_begin_modal
on the global stage).

If I try to finish the grab op 38
(global.display.end_grab_op(global.get_current_time()) and then
perform my command, it works, but on finishing moving my window around
I can't get focus back to the global stage - clicking & keyboard don't
work. I have to switch to tty to gnome-shell --replace to get
funcitonality back.

So how do I do my grab op without interfering with gnome-shell? Should
I try ending the grab op as before, but set a signal for when I'm
finished moving the window to call global.begin_modal (??) to restore
the grab op 38 that gnome-shell has?

cheers.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]