ShellApp: Junk last_used_time
Instead of saving the last_used_time per-app, grab the maximum time for all windows. The logic is less hard to keep track of, and it solves some edge case issues where windows that no longer exist update the user time, even if none of the other windows have been used recently. https://bugzilla.gnome.org/show_bug.cgi?id=660650
This commit is contained in:
parent
a147d0428d
commit
95de48e986
@ -30,9 +30,6 @@ typedef enum {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
guint refcount;
|
guint refcount;
|
||||||
|
|
||||||
/* Last time the user interacted with any of this application's windows */
|
|
||||||
guint32 last_user_time;
|
|
||||||
|
|
||||||
/* Signal connection to dirty window sort list on workspace changes */
|
/* Signal connection to dirty window sort list on workspace changes */
|
||||||
guint workspace_switch_id;
|
guint workspace_switch_id;
|
||||||
|
|
||||||
@ -509,15 +506,6 @@ shell_app_activate_window (ShellApp *app,
|
|||||||
window = most_recent_transient;
|
window = most_recent_transient;
|
||||||
|
|
||||||
|
|
||||||
if (!shell_window_tracker_is_window_interesting (window))
|
|
||||||
{
|
|
||||||
/* We won't get notify::user-time signals for uninteresting windows,
|
|
||||||
* which means that an app's last_user_time won't get updated.
|
|
||||||
* Update it here instead.
|
|
||||||
*/
|
|
||||||
app->running_state->last_user_time = timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active != workspace)
|
if (active != workspace)
|
||||||
meta_workspace_activate_with_focus (workspace, window, timestamp);
|
meta_workspace_activate_with_focus (workspace, window, timestamp);
|
||||||
else
|
else
|
||||||
@ -752,6 +740,23 @@ shell_app_is_on_workspace (ShellApp *app,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
shell_app_get_last_user_time (ShellApp *app)
|
||||||
|
{
|
||||||
|
GSList *iter;
|
||||||
|
int last_user_time;
|
||||||
|
|
||||||
|
last_user_time = 0;
|
||||||
|
|
||||||
|
if (app->running_state != NULL)
|
||||||
|
{
|
||||||
|
for (iter = app->running_state->windows; iter; iter = iter->next)
|
||||||
|
last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data));
|
||||||
|
}
|
||||||
|
|
||||||
|
return last_user_time;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_app_compare:
|
* shell_app_compare:
|
||||||
* @app:
|
* @app:
|
||||||
@ -791,7 +796,8 @@ shell_app_compare (ShellApp *app,
|
|||||||
return -1;
|
return -1;
|
||||||
else if (!app->running_state->windows && other->running_state->windows)
|
else if (!app->running_state->windows && other->running_state->windows)
|
||||||
return 1;
|
return 1;
|
||||||
return other->running_state->last_user_time - app->running_state->last_user_time;
|
|
||||||
|
return shell_app_get_last_user_time (other) - shell_app_get_last_user_time (app);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -871,8 +877,6 @@ shell_app_on_user_time_changed (MetaWindow *window,
|
|||||||
{
|
{
|
||||||
g_assert (app->running_state != NULL);
|
g_assert (app->running_state != NULL);
|
||||||
|
|
||||||
app->running_state->last_user_time = meta_window_get_user_time (window);
|
|
||||||
|
|
||||||
/* Ideally we don't want to emit windows-changed if the sort order
|
/* Ideally we don't want to emit windows-changed if the sort order
|
||||||
* isn't actually changing. This check catches most of those.
|
* isn't actually changing. This check catches most of those.
|
||||||
*/
|
*/
|
||||||
@ -903,8 +907,6 @@ void
|
|||||||
_shell_app_add_window (ShellApp *app,
|
_shell_app_add_window (ShellApp *app,
|
||||||
MetaWindow *window)
|
MetaWindow *window)
|
||||||
{
|
{
|
||||||
guint32 user_time;
|
|
||||||
|
|
||||||
if (app->running_state && g_slist_find (app->running_state->windows, window))
|
if (app->running_state && g_slist_find (app->running_state->windows, window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -918,10 +920,6 @@ _shell_app_add_window (ShellApp *app,
|
|||||||
g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
|
g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
|
||||||
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
|
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
|
||||||
|
|
||||||
user_time = meta_window_get_user_time (window);
|
|
||||||
if (user_time > app->running_state->last_user_time)
|
|
||||||
app->running_state->last_user_time = user_time;
|
|
||||||
|
|
||||||
if (app->state != SHELL_APP_STATE_STARTING)
|
if (app->state != SHELL_APP_STATE_STARTING)
|
||||||
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
|
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user