summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2014-07-30 19:28:55 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2014-08-07 10:23:59 -0400
commit6191dca3343ce85f69e2d4934dc97fdebcbab191 (patch)
tree6e20950454e2fdd5db0d28d49210c2418e315926
parent4e7c44d534d4443fb5af71d04ea6b2ac0810f4e8 (diff)
downloadenlightenment-devs/discomfitor/align.tar.gz
feature: add alignment client menudevs/discomfitor/align
-rw-r--r--src/bin/e_int_client_menu.c236
1 files changed, 236 insertions, 0 deletions
diff --git a/src/bin/e_int_client_menu.c b/src/bin/e_int_client_menu.c
index 2a1eb45197..1c216ef012 100644
--- a/src/bin/e_int_client_menu.c
+++ b/src/bin/e_int_client_menu.c
@@ -34,6 +34,7 @@ static void _e_client_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *m
static void _e_client_menu_cb_skip_pager(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_skip_taskbar(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_client_menu_cb_align_pre(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_client_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi);
@@ -148,6 +149,13 @@ e_int_client_menu_create(E_Client *ec)
"e/widgets/border/default/sendto");
}
+ if ((!ec->lock_user_location) && (!ec->iconic) && (!ec->maximized) && (!ec->fullscreen))
+ {
+ mi = e_menu_item_new(m);
+ e_menu_item_label_set(mi, _("Align"));
+ e_menu_item_submenu_pre_callback_set(mi, _e_client_menu_cb_align_pre, ec);
+ }
+
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Always on Top"));
e_menu_item_check_set(mi, 1);
@@ -958,6 +966,234 @@ _e_client_menu_cb_sendto_icon_pre(void *data, E_Menu *m, E_Menu_Item *mi)
#endif
static void
+_e_client_menu_cb_align_setup(E_Client *ec, Evas_Object_Event_Cb cb)
+{
+ E_Notification_Notify n;
+ Evas_Object *o;
+
+ memset(&n, 0, sizeof(E_Notification_Notify));
+ n.timeout = 3000;
+ n.summary = _("Alignment");
+ n.body = _("Click an object to align with.");
+ n.urgency = E_NOTIFICATION_NOTIFY_URGENCY_NORMAL;
+ e_notification_client_send(&n, NULL, NULL);
+
+ o = evas_object_rectangle_add(ec->comp->evas);
+ evas_object_resize(o, ec->comp->man->w, ec->comp->man->h);
+ evas_object_color_set(o, 0, 0, 0, 0);
+ evas_object_layer_set(o, E_LAYER_POPUP);
+ evas_object_show(o);
+ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, cb, ec);
+ e_comp_shape_queue(ec->comp);
+}
+
+static Evas_Object *
+_e_client_menu_cb_align_cb(Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ evas_object_hide(obj);
+ evas_object_del(obj);
+ e_comp_shape_queue(e_comp_util_evas_object_comp_get(obj));
+ return evas_object_top_at_xy_get(e, ev->output.x, ev->output.y, 0, 0);
+}
+
+static void
+_e_client_menu_cb_align_on_center(E_Client *ec, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ Evas_Object *o;
+
+ o = _e_client_menu_cb_align_cb(e, obj, ev);
+ e_comp_object_util_center_on(ec->frame, o);
+}
+
+static void
+_e_client_menu_cb_align_center(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
+{
+ E_Client *ec = e_object_data_get(E_OBJECT(m));
+
+ if (data)
+ _e_client_menu_cb_align_setup(ec, (Evas_Object_Event_Cb)_e_client_menu_cb_align_on_center);
+ else
+ e_comp_object_util_center(ec->frame);
+}
+
+static void
+_e_client_menu_cb_align_on_top(E_Client *ec, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ Evas_Object *o;
+ int y;
+
+ o = _e_client_menu_cb_align_cb(e, obj, ev);
+ evas_object_geometry_get(o, NULL, &y, NULL, NULL);
+ evas_object_move(ec->frame, ec->x, y);
+}
+
+static void
+_e_client_menu_cb_align_top(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
+{
+ E_Client *ec = e_object_data_get(E_OBJECT(m));
+
+ if (data)
+ _e_client_menu_cb_align_setup(ec, (Evas_Object_Event_Cb)_e_client_menu_cb_align_on_top);
+ else
+ {
+ int y;
+
+ e_zone_useful_geometry_get(ec->zone, NULL, &y, NULL, NULL);
+ evas_object_move(ec->frame, ec->x, y);
+ }
+}
+
+static void
+_e_client_menu_cb_align_on_left(E_Client *ec, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ Evas_Object *o;
+ int x;
+
+ o = _e_client_menu_cb_align_cb(e, obj, ev);
+ evas_object_geometry_get(o, &x, NULL, NULL, NULL);
+ evas_object_move(ec->frame, x, ec->y);
+}
+
+static void
+_e_client_menu_cb_align_left(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
+{
+ E_Client *ec = e_object_data_get(E_OBJECT(m));
+
+ if (data)
+ _e_client_menu_cb_align_setup(ec, (Evas_Object_Event_Cb)_e_client_menu_cb_align_on_left);
+ else
+ {
+ int x;
+
+ e_zone_useful_geometry_get(ec->zone, &x, NULL, NULL, NULL);
+ evas_object_move(ec->frame, x, ec->y);
+ }
+}
+
+static void
+_e_client_menu_cb_align_on_right(E_Client *ec, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ Evas_Object *o;
+ int x, w;
+
+ o = _e_client_menu_cb_align_cb(e, obj, ev);
+ evas_object_geometry_get(o, &x, NULL, &w, NULL);
+ evas_object_move(ec->frame, x + w - ec->w, ec->y);
+}
+
+static void
+_e_client_menu_cb_align_right(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
+{
+ E_Client *ec = e_object_data_get(E_OBJECT(m));
+
+ if (data)
+ _e_client_menu_cb_align_setup(ec, (Evas_Object_Event_Cb)_e_client_menu_cb_align_on_right);
+ else
+ {
+ int x, w;
+
+ e_zone_useful_geometry_get(ec->zone, &x, NULL, &w, NULL);
+ evas_object_move(ec->frame, x + w - ec->w, ec->y);
+ }
+}
+
+static void
+_e_client_menu_cb_align_on_bottom(E_Client *ec, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+ Evas_Object *o;
+ int y, h;
+
+ o = _e_client_menu_cb_align_cb(e, obj, ev);
+ evas_object_geometry_get(o, NULL, &y, NULL, &h);
+ evas_object_move(ec->frame, ec->x, y + h - ec->h);
+}
+
+static void
+_e_client_menu_cb_align_bottom(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
+{
+ E_Client *ec = e_object_data_get(E_OBJECT(m));
+
+ if (data)
+ _e_client_menu_cb_align_setup(ec, (Evas_Object_Event_Cb)_e_client_menu_cb_align_on_bottom);
+ else
+ {
+ int y, h;
+
+ e_zone_useful_geometry_get(ec->zone, NULL, &y, NULL, &h);
+ evas_object_move(ec->frame, ec->x, y + h - ec->h);
+ }
+}
+
+static void
+_e_client_menu_cb_align_pre(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi)
+{
+ E_Menu *subm, *mm;
+ E_Menu_Item *submi;
+ E_Client *ec = data;
+
+ subm = e_menu_new();
+ e_menu_title_set(subm, _("Alignment"));
+ e_object_data_set(E_OBJECT(subm), ec);
+ e_menu_item_submenu_set(mi, subm);
+ e_object_unref(E_OBJECT(subm));
+
+ submi = e_menu_item_new(subm);
+ e_menu_item_label_set(submi, _("Center"));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_center, NULL);
+ mm = e_menu_new();
+ e_object_data_set(E_OBJECT(mm), ec);
+ e_menu_item_submenu_set(submi, mm);
+ e_object_unref(E_OBJECT(mm));
+ submi = e_menu_item_new(mm);
+ e_menu_item_label_set(submi, _("On window..."));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_center, (void*)1);
+
+ submi = e_menu_item_new(subm);
+ e_menu_item_label_set(submi, _("Top"));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_top, NULL);
+ mm = e_menu_new();
+ e_object_data_set(E_OBJECT(mm), ec);
+ e_menu_item_submenu_set(submi, mm);
+ e_object_unref(E_OBJECT(mm));
+ submi = e_menu_item_new(mm);
+ e_menu_item_label_set(submi, _("Of window..."));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_top, (void*)1);
+
+ submi = e_menu_item_new(subm);
+ e_menu_item_label_set(submi, _("Left"));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_left, NULL);
+ mm = e_menu_new();
+ e_object_data_set(E_OBJECT(mm), ec);
+ e_menu_item_submenu_set(submi, mm);
+ e_object_unref(E_OBJECT(mm));
+ submi = e_menu_item_new(mm);
+ e_menu_item_label_set(submi, _("Of window..."));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_left, (void*)1);
+
+ submi = e_menu_item_new(subm);
+ e_menu_item_label_set(submi, _("Right"));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_right, NULL);
+ mm = e_menu_new();
+ e_object_data_set(E_OBJECT(mm), ec);
+ e_menu_item_submenu_set(submi, mm);
+ e_object_unref(E_OBJECT(mm));
+ submi = e_menu_item_new(mm);
+ e_menu_item_label_set(submi, _("Of window..."));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_right, (void*)1);
+
+ submi = e_menu_item_new(subm);
+ e_menu_item_label_set(submi, _("Bottom"));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_bottom, NULL);
+ mm = e_menu_new();
+ e_object_data_set(E_OBJECT(mm), ec);
+ e_menu_item_submenu_set(submi, mm);
+ e_object_unref(E_OBJECT(mm));
+ submi = e_menu_item_new(mm);
+ e_menu_item_label_set(submi, _("Of window..."));
+ e_menu_item_callback_set(submi, _e_client_menu_cb_align_bottom, (void*)1);
+}
+
+static void
_e_client_menu_cb_sendto_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi)
{
E_Menu *subm;