summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChidambar Zinnoury <chidambar.zinnoury@zefla.fr>2016-07-23 08:58:09 +0200
committerChidambar Zinnoury <chidambar.zinnoury@zefla.fr>2016-07-23 08:58:09 +0200
commita99b10a6b633cbc38e880bebc13bfd3487b93b41 (patch)
tree9c0401691bb8613444c0e791185960fa215012a3
parent926d9ab6d80dffcc871d571cdff583107e0158b9 (diff)
downloadenlightenment-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.h1
-rw-r--r--src/bin/e_comp_x.c32
-rw-r--r--src/bin/e_int_client_menu.c15
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;