summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2018-05-21 23:12:35 +0200
committerFlorian Müllner <fmuellner@gnome.org>2018-05-25 18:23:55 +0200
commitb03bcc85aad825e15521408fbb08777d3ff7fd3f (patch)
tree07fce2c2698460658f8f0b342ddcfed1eb30e76e
parent70057c6a5544a3a9884c9d5f04ed58005194151e (diff)
downloadgnome-shell-wip/fmuellner/ping-frozen-windows.tar.gz
closeDialog: Periodically check for window to become responsive againwip/fmuellner/ping-frozen-windows
The close dialog for non-responding windows is closed automatically when we detect that the window is responding again. However as we currently only ping the window in response to certain user actions (like focusing the window or opening the window menu), this can easily go undetected. Address this by periodically pinging the window while the close dialog is shown. https://gitlab.gnome.org/GNOME/gnome-shell/issues/298
-rw-r--r--js/ui/closeDialog.js12
1 files changed, 12 insertions, 0 deletions
diff --git a/js/ui/closeDialog.js b/js/ui/closeDialog.js
index 821480a9c..7943880d8 100644
--- a/js/ui/closeDialog.js
+++ b/js/ui/closeDialog.js
@@ -2,6 +2,7 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
@@ -13,6 +14,7 @@ const Tweener = imports.ui.tweener;
var FROZEN_WINDOW_BRIGHTNESS = -0.3
var DIALOG_TRANSITION_TIME = 0.15
+var ALIVE_TIMEOUT = 5000;
var CloseDialog = new Lang.Class({
Name: 'CloseDialog',
@@ -26,6 +28,7 @@ var CloseDialog = new Lang.Class({
this.parent();
this._window = window;
this._dialog = null;
+ this._timeoutId = 0;
},
get window() {
@@ -99,6 +102,12 @@ var CloseDialog = new Lang.Class({
Meta.disable_unredirect_for_screen(global.screen);
+ this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ALIVE_TIMEOUT,
+ () => {
+ this._window.check_alive(global.display.get_current_time_roundtrip());
+ return GLib.SOURCE_CONTINUE;
+ });
+
this._addWindowEffect();
this._initDialog();
@@ -121,6 +130,9 @@ var CloseDialog = new Lang.Class({
Meta.enable_unredirect_for_screen(global.screen);
+ GLib.source_remove(this._timeoutId);
+ this._timeoutId = 0;
+
let dialog = this._dialog;
this._dialog = null;
this._removeWindowEffect();