app: Consider minimized windows for app comparisons

We used to take window visibility into account when comparing apps
until commit 1dfc38d078, following changes in the window switcher
due to auto-minimization. However auto-minimization was abolished
and the window switcher changes reverted, so it makes sense again
to sort apps without non-minimized windows last again.

https://bugzilla.gnome.org/show_bug.cgi?id=766238
This commit is contained in:
Florian Müllner 2016-05-10 21:15:36 +02:00
parent 3cf2e1ad8b
commit ae6256ba16

View File

@ -722,6 +722,23 @@ shell_app_get_last_user_time (ShellApp *app)
return (int)last_user_time; return (int)last_user_time;
} }
static gboolean
shell_app_is_minimized (ShellApp *app)
{
GSList *iter;
if (app->running_state == NULL)
return FALSE;
for (iter = app->running_state->windows; iter; iter = iter->next)
{
if (meta_window_showing_on_its_workspace (iter->data))
return FALSE;
}
return TRUE;
}
/** /**
* shell_app_compare: * shell_app_compare:
* @app: * @app:
@ -729,13 +746,17 @@ shell_app_get_last_user_time (ShellApp *app)
* *
* Compare one #ShellApp instance to another, in the following way: * Compare one #ShellApp instance to another, in the following way:
* - Running applications sort before not-running applications. * - Running applications sort before not-running applications.
* - The application which the user interacted with most recently * - If one of them has non-minimized windows and the other does not,
* the one with visible windows is first.
* - Finally, the application which the user interacted with most recently
* compares earlier. * compares earlier.
*/ */
int int
shell_app_compare (ShellApp *app, shell_app_compare (ShellApp *app,
ShellApp *other) ShellApp *other)
{ {
gboolean min_app, min_other;
if (app->state != other->state) if (app->state != other->state)
{ {
if (app->state == SHELL_APP_STATE_RUNNING) if (app->state == SHELL_APP_STATE_RUNNING)
@ -743,6 +764,16 @@ shell_app_compare (ShellApp *app,
return 1; return 1;
} }
min_app = shell_app_is_minimized (app);
min_other = shell_app_is_minimized (other);
if (min_app != min_other)
{
if (min_other)
return -1;
return 1;
}
if (app->state == SHELL_APP_STATE_RUNNING) if (app->state == SHELL_APP_STATE_RUNNING)
{ {
if (app->running_state->windows && !other->running_state->windows) if (app->running_state->windows && !other->running_state->windows)