diff options
author | Chidambar Zinnoury <chidambar.zinnoury@zefla.fr> | 2016-07-23 08:58:09 +0200 |
---|---|---|
committer | Chidambar Zinnoury <chidambar.zinnoury@zefla.fr> | 2016-07-23 08:58:09 +0200 |
commit | a99b10a6b633cbc38e880bebc13bfd3487b93b41 (patch) | |
tree | 9c0401691bb8613444c0e791185960fa215012a3 | |
parent | 926d9ab6d80dffcc871d571cdff583107e0158b9 (diff) | |
download | enlightenment-a99b10a6b633cbc38e880bebc13bfd3487b93b41.tar.gz |
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.
-rw-r--r-- | src/bin/e_client.h | 1 | ||||
-rw-r--r-- | src/bin/e_comp_x.c | 32 | ||||
-rw-r--r-- | src/bin/e_int_client_menu.c | 15 |
3 files changed, 40 insertions, 8 deletions
diff --git a/src/bin/e_client.h b/src/bin/e_client.h index 1508e27149..41f68464e6 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -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) \ diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index e1ee1c7d87..bac3da30fb 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -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)); } diff --git a/src/bin/e_int_client_menu.c b/src/bin/e_int_client_menu.c index e8625ca327..b5026f0a02 100644 --- a/src/bin/e_int_client_menu.c +++ b/src/bin/e_int_client_menu.c @@ -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; @@ -1499,6 +1506,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) { E_Menu *subm; |