aboutsummaryrefslogtreecommitdiffstats
path: root/legacy/elementary/src/lib/elm_win.c
diff options
context:
space:
mode:
authorChristopher Michael <cpmichael1@comcast.net>2012-01-08 11:23:59 +0000
committerChristopher Michael <cpmichael1@comcast.net>2012-01-08 11:23:59 +0000
commit4603acbf0f1cb843a318934272ff943b4ed0b390 (patch)
treebfed306dde145cdca30d9d9968e003029ff5ff86 /legacy/elementary/src/lib/elm_win.c
parentgenlist: one more bug, relative insertion of subitems. (diff)
downloadefl-4603acbf0f1cb843a318934272ff943b4ed0b390.tar.gz
Elm (wayland): Handle frame resize via edje callbacks.
SVN revision: 66968
Diffstat (limited to 'legacy/elementary/src/lib/elm_win.c')
-rw-r--r--legacy/elementary/src/lib/elm_win.c76
1 files changed, 49 insertions, 27 deletions
diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c
index e054093f8c..4171b1ace2 100644
--- a/legacy/elementary/src/lib/elm_win.c
+++ b/legacy/elementary/src/lib/elm_win.c
@@ -1,4 +1,4 @@
-#include <Elementary.h>
+ #include <Elementary.h>
#include "elm_priv.h"
typedef struct _Elm_Win Elm_Win;
@@ -26,7 +26,8 @@ struct _Elm_Win
} shot;
Eina_Bool autodel : 1;
Eina_Bool constrain : 1;
- Eina_Bool moving : 1;
+ Eina_Bool resizing : 1;
+ int resize_location;
int *autodel_clear, rot;
int show_count;
struct {
@@ -78,11 +79,10 @@ static void _elm_win_focus_highlight_reconfigure(Elm_Win *win);
static void _elm_win_frame_add(Elm_Win *win, const char *style);
static void _elm_win_frame_cb_move_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__);
-static void _elm_win_frame_cb_move_stop(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__);
+static void _elm_win_frame_cb_resize_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source);
static void _elm_win_frame_cb_minimize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__);
static void _elm_win_frame_cb_maximize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__);
static void _elm_win_frame_cb_close(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__);
-static void _elm_win_frame_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
static const char SIG_DELETE_REQUEST[] = "delete,request";
static const char SIG_FOCUS_OUT[] = "focus,out";
@@ -308,6 +308,17 @@ _elm_win_resize(Ecore_Evas *ee)
win->deferred_resize_job = ecore_job_add(_elm_win_resize_job, win);
}
+static void
+_elm_win_mouse_in(Ecore_Evas *ee)
+{
+ Evas_Object *obj;
+ Elm_Win *win;
+
+ if (!(obj = ecore_evas_object_associate_get(ee))) return;
+ if (!(win = elm_widget_data_get(obj))) return;
+ if (win->resizing) win->resizing = EINA_FALSE;
+}
+
static void
_elm_win_focus_in(Ecore_Evas *ee)
{
@@ -1315,13 +1326,10 @@ _elm_win_frame_add(Elm_Win *win, const char *style)
evas_object_move(win->frame_obj, 0, 0);
evas_object_resize(win->frame_obj, 1, 1);
- evas_object_event_callback_add(win->frame_obj, EVAS_CALLBACK_MOUSE_MOVE,
- _elm_win_frame_cb_mouse_move, win);
-
edje_object_signal_callback_add(win->frame_obj, "elm,action,move,start",
"elm", _elm_win_frame_cb_move_start, win);
- edje_object_signal_callback_add(win->frame_obj, "elm,action,move,stop",
- "elm", _elm_win_frame_cb_move_stop, win);
+ edje_object_signal_callback_add(win->frame_obj, "elm,action,resize,start",
+ "*", _elm_win_frame_cb_resize_start, win);
edje_object_signal_callback_add(win->frame_obj, "elm,action,minimize",
"elm", _elm_win_frame_cb_minimize, win);
edje_object_signal_callback_add(win->frame_obj, "elm,action,maximize",
@@ -1336,16 +1344,44 @@ _elm_win_frame_cb_move_start(void *data, Evas_Object *obj __UNUSED__, const char
Elm_Win *win;
if (!(win = data)) return;
- win->moving = EINA_TRUE;
+ /* FIXME: Change mouse pointer */
+
+ /* NB: 0,0 are dummy values. Wayland handles the move by itself */
+ ecore_evas_move(win->ee, 0, 0);
}
static void
-_elm_win_frame_cb_move_stop(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
+_elm_win_frame_cb_resize_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source)
{
Elm_Win *win;
if (!(win = data)) return;
- win->moving = EINA_FALSE;
+ if (win->resizing) return;
+ win->resizing = EINA_TRUE;
+
+ /* FIXME: Change mouse pointer */
+
+ if (!strcmp(source, "elm.event.resize.t"))
+ win->resize_location = 1;
+ else if (!strcmp(source, "elm.event.resize.b"))
+ win->resize_location = 2;
+ else if (!strcmp(source, "elm.event.resize.l"))
+ win->resize_location = 4;
+ else if (!strcmp(source, "elm.event.resize.r"))
+ win->resize_location = 8;
+ else if (!strcmp(source, "elm.event.resize.tl"))
+ win->resize_location = 5;
+ else if (!strcmp(source, "elm.event.resize.tr"))
+ win->resize_location = 9;
+ else if (!strcmp(source, "elm.event.resize.bl"))
+ win->resize_location = 6;
+ else if (!strcmp(source, "elm.event.resize.br"))
+ win->resize_location = 10;
+ else
+ win->resize_location = 0;
+
+ if (win->resize_location > 0)
+ ecore_evas_wayland_shm_resize(win->ee, win->resize_location);
}
static void
@@ -1375,21 +1411,6 @@ _elm_win_frame_cb_close(void *data, Evas_Object *obj __UNUSED__, const char *sig
evas_object_del(win->win_obj);
}
-static void
-_elm_win_frame_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
-{
- Elm_Win *win;
- Evas_Event_Mouse_Move *ev;
-
- if (!(win = data)) return;
- ev = event_info;
- if (win->moving)
- {
- /* NB: 0, 0 are bogus values and not used in wayland */
- ecore_evas_move(win->ee, 0, 0);
- }
-}
-
#ifdef ELM_DEBUG
static void
_debug_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
@@ -1724,6 +1745,7 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
ecore_evas_name_class_set(win->ee, name, _elm_appname);
ecore_evas_callback_delete_request_set(win->ee, _elm_win_delete_request);
ecore_evas_callback_resize_set(win->ee, _elm_win_resize);
+ ecore_evas_callback_mouse_in_set(win->ee, _elm_win_mouse_in);
ecore_evas_callback_focus_in_set(win->ee, _elm_win_focus_in);
ecore_evas_callback_focus_out_set(win->ee, _elm_win_focus_out);
ecore_evas_callback_move_set(win->ee, _elm_win_move);