altTab: Don't refuse to work when a pointer grab is in place
Allow push_modal to optionally only work with a keyboard only grab and use that in altTab as a fallback to allow switching windows while a pointer grab is in effect (like during DND operations). https://bugzilla.gnome.org/show_bug.cgi?id=660457
This commit is contained in:
@ -170,8 +170,12 @@ AltTabPopup.prototype = {
|
||||
if (localApps.length == 0 && otherApps.length == 0)
|
||||
return false;
|
||||
|
||||
if (!Main.pushModal(this.actor))
|
||||
return false;
|
||||
if (!Main.pushModal(this.actor)) {
|
||||
// Probably someone else has a pointer grab, try again with keyboard only
|
||||
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
this._haveModal = true;
|
||||
this._modifierMask = primaryModifier(mask);
|
||||
|
||||
|
@ -668,14 +668,17 @@ function _findModal(actor) {
|
||||
* initiated event. If not provided then the value of
|
||||
* global.get_current_time() is assumed.
|
||||
*
|
||||
* @options: optional Meta.ModalOptions flags to indicate that the
|
||||
* pointer is alrady grabbed
|
||||
*
|
||||
* Returns: true iff we successfully acquired a grab or already had one
|
||||
*/
|
||||
function pushModal(actor, timestamp) {
|
||||
function pushModal(actor, timestamp, options) {
|
||||
if (timestamp == undefined)
|
||||
timestamp = global.get_current_time();
|
||||
|
||||
if (modalCount == 0) {
|
||||
if (!global.begin_modal(timestamp)) {
|
||||
if (!global.begin_modal(timestamp, options ? options : 0)) {
|
||||
log('pushModal: invocation of begin_modal failed');
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user