e: Add signals priority support.

This is a per-client setting: activating it in the menu will have the process being SIGSTOPped/SIGCONTed instead of having its priority changed on focus change.
This commit is contained in:
Chidambar Zinnoury 2016-07-23 08:58:09 +02:00
parent 926d9ab6d8
commit a99b10a6b6
3 changed files with 40 additions and 8 deletions

View File

@ -703,6 +703,7 @@ struct E_Client
Eina_Bool keyboard_resizing : 1;
Eina_Bool on_post_updates : 1; // client is on the post update list
Eina_Bool signals_priority : 1; // send sigstop/sigcont on focus out/in instead of niceing
};
#define e_client_focus_policy_click(ec) \

View File

@ -870,10 +870,18 @@ _e_comp_x_client_pri_raise(E_Client *ec)
{
if (ec->netwm.pid <= 0) return;
if (ec->netwm.pid == getpid()) return;
_pri_adj(ec->netwm.pid,
e_config->priority - 1, -1, EINA_FALSE,
// EINA_TRUE, EINA_TRUE);
EINA_TRUE, EINA_FALSE);
if (!ec->signals_priority)
{
_pri_adj(ec->netwm.pid,
e_config->priority - 1, -1, EINA_FALSE,
// EINA_TRUE, EINA_TRUE);
EINA_TRUE, EINA_FALSE);
}
else
{
kill(ec->netwm.pid, SIGCONT);
}
// printf("WIN: pid %i, title %s (HI!!!!!!!!!!!!!!!!!!)\n",
// ec->netwm.pid, e_client_util_name_get(ec));
}
@ -883,10 +891,18 @@ _e_comp_x_client_pri_norm(E_Client *ec)
{
if (ec->netwm.pid <= 0) return;
if (ec->netwm.pid == getpid()) return;
_pri_adj(ec->netwm.pid,
e_config->priority, 1, EINA_FALSE,
// EINA_TRUE, EINA_TRUE);
EINA_TRUE, EINA_FALSE);
if (!ec->signals_priority)
{
_pri_adj(ec->netwm.pid,
e_config->priority, 1, EINA_FALSE,
// EINA_TRUE, EINA_TRUE);
EINA_TRUE, EINA_FALSE);
}
else
{
kill(ec->netwm.pid, SIGSTOP);
}
// printf("WIN: pid %i, title %s (NORMAL)\n",
// ec->netwm.pid, e_client_util_name_get(ec));
}

View File

@ -51,6 +51,7 @@ static void _e_client_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item
static void _e_client_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_default_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_signals_priority(void *data, E_Menu *m, E_Menu_Item *mi);
static Eina_List *menu_hooks = NULL;
@ -214,6 +215,12 @@ e_int_client_menu_create(E_Client *ec)
"e/widgets/border/default/borderless");
}
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Signals priority"));
e_menu_item_check_set(mi, 1);
e_menu_item_toggle_set(mi, ec->signals_priority ? 1 : 0);
e_menu_item_callback_set(mi, _e_client_menu_cb_signals_priority, ec);
if (e_comp_config_get()->enable_advanced_features)
{
E_Menu *subm;
@ -1498,6 +1505,14 @@ _e_client_menu_cb_netwm_icon(void *data, E_Menu *m, E_Menu_Item *mi)
}
}
static void
_e_client_menu_cb_signals_priority(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
{
E_Client *ec = data;
ec->signals_priority = mi->toggle;
}
static void
_e_client_menu_cb_border_pre(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
{