aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2013-02-05 13:13:33 +0000
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>2013-02-05 13:13:33 +0000
commit41759238cd3a84b27f58d3e7d6647bd25b0b190f (patch)
tree83cb4e919392e0ec485aca3e7716fe9817613d0e
parent6f2737928db25491165fb73372b382d053a4797d (diff)
downloadenlightenment-41759238cd3a84b27f58d3e7d6647bd25b0b190f.tar.gz
enlightenment-41759238cd3a84b27f58d3e7d6647bd25b0b190f.tar.xz
enlightenment-41759238cd3a84b27f58d3e7d6647bd25b0b190f.zip
a much requested feature: drag-only edge bindings
ticket #281 SVN revision: 83628
-rw-r--r--ChangeLog1
-rw-r--r--NEWS1
-rw-r--r--data/themes/edc/edgebindings.edc40
-rw-r--r--src/bin/e_bindings.c13
-rw-r--r--src/bin/e_bindings.h7
-rw-r--r--src/bin/e_canvas.c6
-rw-r--r--src/bin/e_canvas.h1
-rw-r--r--src/bin/e_config.c2
-rw-r--r--src/bin/e_config.h1
-rw-r--r--src/bin/e_shelf.c34
-rw-r--r--src/bin/e_zone.c20
-rw-r--r--src/bin/e_zone.h1
-rw-r--r--src/modules/conf_edgebindings/e_int_config_edgebindings.c36
13 files changed, 112 insertions, 51 deletions
diff --git a/ChangeLog b/ChangeLog
index 4644bbdb3..b80475d5a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
* improve load time of apps dialogs
* fix bug where edge flips would stop functioning after dragging to an invalid edge containing a shelf
+ * edge bindings can now be set to "drag only"
2013-02-04 Mike Blumenkrantz
diff --git a/NEWS b/NEWS
index f40a929d0..4651f1d6c 100644
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,7 @@ Additions:
* added option to disable comp effects on screen
* added options and functionality for "fast" composite effects
* split comp window match settings into separate dialog
+ * edge bindings can now be set to "drag only"
Changes:
Modules:
diff --git a/data/themes/edc/edgebindings.edc b/data/themes/edc/edgebindings.edc
index 9b9b25146..bf5cc07e5 100644
--- a/data/themes/edc/edgebindings.edc
+++ b/data/themes/edc/edgebindings.edc
@@ -180,32 +180,35 @@ group { name: "e/modules/conf_edgebindings/selection";
fill.smooth: 0;
}
}
- part { name: "e.swallow.check"; type: SWALLOW;
+ part { name: "e.box"; type: BOX;
description { state: "default" 0.0;
rel1 {
-relative: 1 1;
-offset: 5 4;
-to_x: "e.swallow.background";
-to_y: "e.text.description";
+ relative: 1 1;
+ offset: 50 4;
+ to_x: "e.edge.bottom_right";
+ to_y: "e.text.description";
}
rel2 {
-relative: 1 1;
-offset: -5 24;
-to_y: "e.text.description";
+ offset: -50 24;
+ to_y: "e.text.description";
+ }
+ box { layout: "horizontal";
+ padding: 0 0;
+ align: 0.5 0.5;
+ min: 1 1;
}
}
}
part { name: "e.swallow.slider"; type: SWALLOW;
description { state: "default" 0.0;
rel1 {
-relative: 1 1;
-offset: 5 1;
-to_x: "e.edge.bottom_right";
-to_y: "e.swallow.check";
+ relative: 1 1;
+ offset: 5 1;
+ to_x: "e.edge.bottom_right";
+ to_y: "e.box";
}
rel2 {
-relative: 1 1;
-offset: -5 -1;
+ offset: -5 -1;
}
}
}
@@ -213,13 +216,12 @@ offset: -5 -1;
scale: 1;
description { state: "default" 0.0;
rel1 {
-relative: 1 0;
-offset: 5 4;
-to_x: "e.swallow.background";
+ relative: 1 0;
+ offset: 80 4;
+ to_x: "e.edge.right";
}
rel2 {
-relative: 1 1;
-offset: -5 -45;
+ offset: -80 -45;
}
text {
style: "edge_binding_style";
diff --git a/src/bin/e_bindings.c b/src/bin/e_bindings.c
index ec52b980a..09aa77ca2 100644
--- a/src/bin/e_bindings.c
+++ b/src/bin/e_bindings.c
@@ -61,7 +61,7 @@ e_bindings_init(void)
ebk->any_mod, ebk->action, ebk->params);
EINA_LIST_FOREACH(e_bindings->edge_bindings, l, ebe)
- e_bindings_edge_add(ebe->context, ebe->edge, ebe->modifiers,
+ e_bindings_edge_add(ebe->context, ebe->edge, ebe->drag_only, ebe->modifiers,
ebe->any_mod, ebe->action, ebe->params, ebe->delay);
EINA_LIST_FOREACH(e_bindings->signal_bindings, l, ebs)
@@ -179,7 +179,7 @@ e_bindings_edge_reset(void)
E_FREE_LIST(edge_bindings, _e_bindings_edge_free);
EINA_LIST_FOREACH(e_bindings->edge_bindings, l, ebe)
- e_bindings_edge_add(ebe->context, ebe->edge, ebe->modifiers,
+ e_bindings_edge_add(ebe->context, ebe->edge, ebe->drag_only, ebe->modifiers,
ebe->any_mod, ebe->action, ebe->params, ebe->delay);
}
@@ -604,7 +604,7 @@ e_bindings_key_up_event_find(E_Binding_Context ctxt, Ecore_Event_Key *ev)
}
EAPI void
-e_bindings_edge_add(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay)
+e_bindings_edge_add(E_Binding_Context ctxt, E_Zone_Edge edge, Eina_Bool drag_only, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay)
{
E_Binding_Edge *binding;
@@ -614,6 +614,7 @@ e_bindings_edge_add(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier
binding->mod = mod;
binding->any_mod = any_mod;
binding->delay = delay;
+ binding->drag_only = drag_only;
if (action) binding->action = eina_stringshare_add(action);
if (params) binding->params = eina_stringshare_add(params);
edge_bindings = eina_list_append(edge_bindings, binding);
@@ -677,7 +678,7 @@ e_bindings_edge_get(const char *action, E_Zone_Edge edge, int click)
}
EAPI void
-e_bindings_edge_del(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay)
+e_bindings_edge_del(E_Binding_Context ctxt, E_Zone_Edge edge, Eina_Bool drag_only, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay)
{
E_Binding_Edge *binding;
Eina_List *l, *ll;
@@ -691,6 +692,7 @@ e_bindings_edge_del(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier
(binding->mod == mod) &&
((binding->delay * 1000) == (delay * 1000)) &&
(binding->any_mod == any_mod) &&
+ (binding->drag_only == drag_only) &&
(((binding->action) && (action) && (!strcmp(binding->action, action))) ||
((!binding->action) && (!action))) &&
(((binding->params) && (params) && (!strcmp(binding->params, params))) ||
@@ -727,6 +729,7 @@ e_bindings_edge_in_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Z
{
/* A value of <= -1.0 for the delay indicates it as a mouse-click binding on that edge */
if (((binding->edge == ev->edge)) && (binding->delay >= 0.0) &&
+ ((binding->drag_only == ev->drag) || ev->drag) &&
((binding->any_mod) || (binding->mod == mod)))
{
if (_e_bindings_context_match(binding->ctxt, ctxt))
@@ -817,7 +820,7 @@ e_bindings_edge_down_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event
EINA_LIST_FOREACH(edge_bindings, l, binding)
{
if (((binding->edge == ev->edge)) && (binding->delay == -1.0 * ev->button) &&
- ((binding->any_mod) || (binding->mod == mod)))
+ (!binding->drag_only) && ((binding->any_mod) || (binding->mod == mod)))
{
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
diff --git a/src/bin/e_bindings.h b/src/bin/e_bindings.h
index 8026061d4..668698bbe 100644
--- a/src/bin/e_bindings.h
+++ b/src/bin/e_bindings.h
@@ -63,12 +63,13 @@ struct _E_Binding_Edge
E_Binding_Context ctxt;
E_Zone_Edge edge;
E_Binding_Modifier mod;
- unsigned char any_mod : 1;
const char *action;
const char *params;
float delay;
Ecore_Timer *timer;
+ Eina_Bool any_mod : 1;
+ Eina_Bool drag_only : 1;
};
struct _E_Binding_Signal
@@ -130,11 +131,11 @@ EAPI E_Action *e_bindings_key_up_event_handle(E_Binding_Context ctxt, E_Object
EAPI E_Action *e_bindings_key_down_event_find(E_Binding_Context ctxt, Ecore_Event_Key *ev);
EAPI E_Action *e_bindings_key_up_event_find(E_Binding_Context ctxt, Ecore_Event_Key *ev);
-EAPI void e_bindings_edge_add(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay);
+EAPI void e_bindings_edge_add(E_Binding_Context ctxt, E_Zone_Edge edge, Eina_Bool drag_only, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay);
EAPI Eina_Bool e_bindings_edge_flippable_get(E_Zone_Edge edge);
EAPI Eina_Bool e_bindings_edge_non_flippable_get(E_Zone_Edge edge);
EAPI E_Binding_Edge *e_bindings_edge_get(const char *action, E_Zone_Edge edge, int click);
-EAPI void e_bindings_edge_del(E_Binding_Context ctxt, E_Zone_Edge edge, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay);
+EAPI void e_bindings_edge_del(E_Binding_Context ctxt, E_Zone_Edge edge, Eina_Bool drag_only, E_Binding_Modifier mod, int any_mod, const char *action, const char *params, float delay);
EAPI E_Action *e_bindings_edge_in_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Zone_Edge *ev);
EAPI E_Action *e_bindings_edge_out_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Zone_Edge *ev);
EAPI E_Action *e_bindings_edge_down_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Zone_Edge *ev);
diff --git a/src/bin/e_canvas.c b/src/bin/e_canvas.c
index 24762aaf6..636aa8cb0 100644
--- a/src/bin/e_canvas.c
+++ b/src/bin/e_canvas.c
@@ -160,6 +160,12 @@ e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
return ee;
}
+EAPI const Eina_List *
+e_canvas_list(void)
+{
+ return _e_canvases;
+}
+
/* local subsystem functions */
static Eina_Bool
_e_canvas_cb_flush(void *data __UNUSED__)
diff --git a/src/bin/e_canvas.h b/src/bin/e_canvas.h
index 6529d8bf7..59050c23b 100644
--- a/src/bin/e_canvas.h
+++ b/src/bin/e_canvas.h
@@ -12,5 +12,6 @@ EAPI void e_canvas_idle_flush(void);
EAPI void e_canvas_rehint(void);
EAPI Ecore_Evas *e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret);
+EAPI const Eina_List *e_canvas_list(void);
#endif
#endif
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index 4545bfb6d..16017a8c8 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -968,6 +968,7 @@ e_config_init(void)
E_CONFIG_VAL(D, T, params, STR);
E_CONFIG_VAL(D, T, edge, UCHAR);
E_CONFIG_VAL(D, T, any_mod, UCHAR);
+ E_CONFIG_VAL(D, T, drag_only, UCHAR);
E_CONFIG_VAL(D, T, delay, FLOAT);
_e_config_bindings_signal_edd = E_CONFIG_DD_NEW("E_Config_Binding_Signal",
@@ -1886,6 +1887,7 @@ e_config_binding_edge_match(E_Config_Binding_Edge *eb_in)
(eb->any_mod == eb_in->any_mod) &&
(eb->edge == eb_in->edge) &&
(eb->delay == eb_in->delay) &&
+ (eb->drag_only == eb_in->drag_only) &&
(((eb->action) && (eb_in->action) && (!strcmp(eb->action, eb_in->action))) ||
((!eb->action) && (!eb_in->action))) &&
(((eb->params) && (eb_in->params) && (!strcmp(eb->params, eb_in->params))) ||
diff --git a/src/bin/e_config.h b/src/bin/e_config.h
index 7afaeb37b..db44a4c58 100644
--- a/src/bin/e_config.h
+++ b/src/bin/e_config.h
@@ -505,6 +505,7 @@ struct _E_Config_Binding_Edge
const char *params;
unsigned char edge;
unsigned char any_mod;
+ Eina_Bool drag_only;
};
struct _E_Config_Binding_Signal
diff --git a/src/bin/e_shelf.c b/src/bin/e_shelf.c
index fd772c688..dc979a767 100644
--- a/src/bin/e_shelf.c
+++ b/src/bin/e_shelf.c
@@ -2647,62 +2647,62 @@ _e_shelf_bindings_add(E_Shelf *es)
case E_GADCON_ORIENT_LEFT:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_LEFT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_RIGHT:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_RIGHT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_TOP:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_TOP,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_BOTTOM:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_BOTTOM,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_CORNER_TL:
case E_GADCON_ORIENT_CORNER_LT:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_TOP,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_LEFT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_TOP_LEFT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_CORNER_TR:
case E_GADCON_ORIENT_CORNER_RT:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_TOP,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_RIGHT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_TOP_RIGHT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_CORNER_BL:
case E_GADCON_ORIENT_CORNER_LB:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_BOTTOM,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_LEFT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_BOTTOM_LEFT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
case E_GADCON_ORIENT_CORNER_BR:
case E_GADCON_ORIENT_CORNER_RB:
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_BOTTOM,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_RIGHT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
e_bindings_edge_add(E_BINDING_CONTEXT_ZONE, E_ZONE_EDGE_BOTTOM_RIGHT,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
break;
}
}
@@ -2716,7 +2716,7 @@ _e_shelf_bindings_del(E_Shelf *es)
snprintf(buf, sizeof(buf), "shelf.%d", es->id);
for (edge = E_ZONE_EDGE_LEFT; edge <= E_ZONE_EDGE_BOTTOM_LEFT; edge++)
e_bindings_edge_del(E_BINDING_CONTEXT_ZONE, edge,
- E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
+ 0, E_BINDING_MODIFIER_NONE, 1, buf, NULL, 0);
}
static Eina_Bool
diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c
index 946e3172a..dc70e2abb 100644
--- a/src/bin/e_zone.c
+++ b/src/bin/e_zone.c
@@ -1547,6 +1547,8 @@ _e_zone_cb_mouse_in(void *data,
E_Event_Zone_Edge *zev;
E_Zone_Edge edge;
E_Zone *zone;
+ const Eina_List *l;
+ Ecore_Evas *ee;
ev = event;
zone = data;
@@ -1560,6 +1562,14 @@ _e_zone_cb_mouse_in(void *data,
zev->x = ev->root.x;
zev->y = ev->root.y;
zev->modifiers = ev->modifiers;
+ EINA_LIST_FOREACH(e_canvas_list(), l, ee)
+ {
+ /* FIXME: comp */
+ if (!evas_pointer_button_down_mask_get(ecore_evas_get(ee))) continue;
+ zev->drag = 1;
+ break;
+ }
+
ecore_event_add(E_EVENT_ZONE_EDGE_IN, zev, NULL, NULL);
e_bindings_edge_in_event_handle(E_BINDING_CONTEXT_ZONE, E_OBJECT(zone), zev);
@@ -1575,6 +1585,8 @@ _e_zone_cb_mouse_out(void *data,
E_Event_Zone_Edge *zev;
E_Zone_Edge edge;
E_Zone *zone;
+ const Eina_List *l;
+ Ecore_Evas *ee;
ev = event;
zone = data;
@@ -1588,6 +1600,14 @@ _e_zone_cb_mouse_out(void *data,
zev->x = ev->root.x;
zev->y = ev->root.y;
zev->modifiers = ev->modifiers;
+ EINA_LIST_FOREACH(e_canvas_list(), l, ee)
+ {
+ /* FIXME: comp */
+ if (!evas_pointer_button_down_mask_get(ecore_evas_get(ee))) continue;
+ zev->drag = 1;
+ break;
+ }
+
ecore_event_add(E_EVENT_ZONE_EDGE_OUT, zev, NULL, NULL);
e_bindings_edge_out_event_handle(E_BINDING_CONTEXT_ZONE, E_OBJECT(zone), zev);
return ECORE_CALLBACK_PASS_ON;
diff --git a/src/bin/e_zone.h b/src/bin/e_zone.h
index e56121e9b..fcc0a5d6a 100644
--- a/src/bin/e_zone.h
+++ b/src/bin/e_zone.h
@@ -127,6 +127,7 @@ struct _E_Event_Zone_Edge
int x, y;
int modifiers;
int button;
+ Eina_Bool drag : 1;
};
EINTERN int e_zone_init(void);
diff --git a/src/modules/conf_edgebindings/e_int_config_edgebindings.c b/src/modules/conf_edgebindings/e_int_config_edgebindings.c
index 587fe684a..97f9af7e9 100644
--- a/src/modules/conf_edgebindings/e_int_config_edgebindings.c
+++ b/src/modules/conf_edgebindings/e_int_config_edgebindings.c
@@ -65,6 +65,7 @@ struct _E_Config_Dialog_Data
const char *cur;
double delay;
int click;
+ int drag_only;
int button;
int cur_act, add;
E_Zone_Edge edge;
@@ -76,7 +77,7 @@ struct _E_Config_Dialog_Data
{
Evas_Object *o_add, *o_mod, *o_del, *o_del_all;
Evas_Object *o_binding_list, *o_action_list;
- Evas_Object *o_params, *o_selector, *o_slider, *o_check, *o_button;
+ Evas_Object *o_params, *o_selector, *o_slider, *o_check, *o_check2, *o_button;
} gui;
const char *params;
@@ -139,6 +140,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
bi2->modifiers = bi->modifiers;
bi2->any_mod = bi->any_mod;
bi2->delay = bi->delay;
+ bi2->drag_only = bi->drag_only;
bi2->action = eina_stringshare_ref(bi->action);
bi2->params = eina_stringshare_ref(bi->params);
@@ -196,7 +198,7 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
EINA_LIST_FREE(e_bindings->edge_bindings, bi)
{
- e_bindings_edge_del(bi->context, bi->edge, bi->modifiers, bi->any_mod,
+ e_bindings_edge_del(bi->context, bi->edge, bi->drag_only, bi->modifiers, bi->any_mod,
bi->action, bi->params, bi->delay);
eina_stringshare_del(bi->action);
eina_stringshare_del(bi->params);
@@ -212,13 +214,14 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
bi->modifiers = bi2->modifiers;
bi->any_mod = bi2->any_mod;
bi->delay = bi2->delay;
+ bi->drag_only = bi2->drag_only;
bi->action =
((!bi2->action) || (!bi2->action[0])) ? NULL : eina_stringshare_add(bi2->action);
bi->params =
((!bi2->params) || (!bi2->params[0])) ? NULL : eina_stringshare_add(bi2->params);
e_bindings->edge_bindings = eina_list_append(e_bindings->edge_bindings, bi);
- e_bindings_edge_add(bi->context, bi->edge, bi->modifiers, bi->any_mod,
+ e_bindings_edge_add(bi->context, bi->edge, bi->drag_only, bi->modifiers, bi->any_mod,
bi->action, bi->params, bi->delay);
}
@@ -389,6 +392,7 @@ _modify_edge_binding_cb(void *data, void *data2 __UNUSED__)
bi = eina_list_nth(cfdata->binding.edge, n);
cfdata->locals.edge = bi->edge;
+ cfdata->locals.drag_only = bi->drag_only;
cfdata->locals.delay = ((double)bi->delay);
if (bi->delay <= -1.0) cfdata->locals.click = 1, cfdata->locals.button = -bi->delay;
else cfdata->locals.click = 0, cfdata->locals.button = 0;
@@ -879,11 +883,23 @@ _edge_grab_wnd_show(E_Config_Dialog_Data *cfdata)
cfdata->gui.o_check = os = e_widget_check_add(evas, _("Clickable edge"), &(cfdata->locals.click));
e_widget_size_min_resize(os);
- edje_object_part_swallow(o, "e.swallow.check", os);
e_widget_on_change_hook_set(os, _edge_grab_wnd_check_changed_cb, cfdata);
+ edje_object_part_box_append(o, "e.box", os);
evas_object_show(os);
- if (cfdata->locals.click)
- e_widget_disabled_set(cfdata->gui.o_slider, 1);
+ e_widget_size_min_get(os, &minw, &minh);
+ edje_extern_object_min_size_set(os, minw, minh);
+
+ cfdata->gui.o_check2 = os = e_widget_check_add(evas, _("Drag only"), &(cfdata->locals.drag_only));
+ e_widget_size_min_resize(os);
+ e_widget_on_change_hook_set(os, _edge_grab_wnd_check_changed_cb, cfdata);
+ edje_object_part_box_append(o, "e.box", os);
+ evas_object_show(os);
+ e_widget_size_min_get(os, &minw, &minh);
+ edje_extern_object_min_size_set(os, minw, minh);
+
+ e_widget_disabled_set(cfdata->gui.o_slider, cfdata->locals.click);
+ e_widget_disabled_set(cfdata->gui.o_check2, cfdata->locals.click);
+ e_widget_disabled_set(cfdata->gui.o_check, cfdata->locals.drag_only);
edje_object_part_text_set(o, "e.text.description", TEXT_PRESS_EDGE_SEQUENCE);
@@ -971,7 +987,6 @@ _edge_grab_wnd_check_changed_cb(void *data, Evas_Object *obj __UNUSED__)
{
if (cfdata->locals.edge && cfdata->locals.button)
label = _edge_binding_text_get(cfdata->locals.edge, -1.0 * cfdata->locals.button, cfdata->locals.modifiers);
- e_widget_disabled_set(cfdata->gui.o_slider, 1);
}
else
{
@@ -979,6 +994,9 @@ _edge_grab_wnd_check_changed_cb(void *data, Evas_Object *obj __UNUSED__)
label = _edge_binding_text_get(cfdata->locals.edge, ((float)cfdata->locals.delay), cfdata->locals.modifiers);
e_widget_disabled_set(cfdata->gui.o_slider, 0);
}
+ e_widget_disabled_set(cfdata->gui.o_slider, cfdata->locals.click);
+ e_widget_disabled_set(cfdata->gui.o_check2, cfdata->locals.click);
+ e_widget_disabled_set(cfdata->gui.o_check, cfdata->locals.drag_only);
edje_object_part_text_set(cfdata->gui.o_selector, "e.text.selection", label);
E_FREE(label);
@@ -1083,6 +1101,7 @@ _edge_grab_wnd_selection_apply(E_Config_Dialog_Data *cfdata)
EINA_LIST_FOREACH(cfdata->binding.edge, l, bi)
if ((bi->modifiers == cfdata->locals.modifiers) &&
(bi->edge == cfdata->locals.edge) &&
+ (bi->drag_only == cfdata->locals.drag_only) &&
((bi->delay * 1000) == (cfdata->locals.delay * 1000)))
{
found = 1;
@@ -1100,6 +1119,7 @@ _edge_grab_wnd_selection_apply(E_Config_Dialog_Data *cfdata)
if (bi == bi2) continue;
if ((bi->modifiers == cfdata->locals.modifiers) &&
(bi->edge == cfdata->locals.edge) &&
+ (bi->drag_only == cfdata->locals.drag_only) &&
((bi->delay * 1000) == (cfdata->locals.delay * 1000)))
{
found = 1;
@@ -1121,6 +1141,7 @@ _edge_grab_wnd_selection_apply(E_Config_Dialog_Data *cfdata)
bi->action = NULL;
bi->params = NULL;
bi->modifiers = cfdata->locals.modifiers;
+ bi->drag_only = cfdata->locals.drag_only;
cfdata->binding.edge = eina_list_append(cfdata->binding.edge, bi);
}
else
@@ -1133,6 +1154,7 @@ _edge_grab_wnd_selection_apply(E_Config_Dialog_Data *cfdata)
bi->modifiers = cfdata->locals.modifiers;
bi->delay = cfdata->locals.delay;
bi->edge = cfdata->locals.edge;
+ bi->drag_only = cfdata->locals.drag_only;
}
}