aboutsummaryrefslogtreecommitdiffstats
path: root/legacy/elementary/src/lib/elm_win.c
diff options
context:
space:
mode:
authorGustavo Lima Chaves <glima@profusion.mobi>2012-05-03 22:42:15 +0000
committerGustavo Lima Chaves <glima@profusion.mobi>2012-05-03 22:42:15 +0000
commita239210a0da80d66895b4e04ef614a9e308f7504 (patch)
tree72994682d5881ed4141e655285c7012f84525637 /legacy/elementary/src/lib/elm_win.c
parent[Elm] Clock now an elm layout, too. (diff)
downloadefl-a239210a0da80d66895b4e04ef614a9e308f7504.tar.gz
[Elm] Now elm win and inwin got into the new
widget hierarchy. Win inherits directly from Elm_Widget_Smart_Class, while inwin is now an elm layout. Note that elm_widget_sub_object_list_get(), which was an unecessary hack only used on win, was killed. SVN revision: 70717
Diffstat (limited to 'legacy/elementary/src/lib/elm_win.c')
-rw-r--r--legacy/elementary/src/lib/elm_win.c3894
1 files changed, 1987 insertions, 1907 deletions
diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c
index 7b859273ae..51cb66020d 100644
--- a/legacy/elementary/src/lib/elm_win.c
+++ b/legacy/elementary/src/lib/elm_win.c
@@ -1,124 +1,125 @@
#include <Elementary.h>
#include "elm_priv.h"
-
-typedef struct _Elm_Win Elm_Win;
-
-struct _Elm_Win
-{
- Ecore_Evas *ee;
- Evas *evas;
- Evas_Object *parent, *win_obj, *img_obj, *frame_obj;
- Eina_List *subobjs;
+#include "elm_widget_layout.h" /* for inwin */
+
+static const char WIN_SMART_NAME[] = "elm_win";
+
+#define ELM_WIN_DATA_GET(o, sd) \
+ Elm_Win_Smart_Data * sd = evas_object_smart_data_get(o)
+
+#define ELM_WIN_DATA_GET_OR_RETURN(o, ptr) \
+ ELM_WIN_DATA_GET(o, ptr); \
+ if (!ptr) \
+ { \
+ CRITICAL("No widget data for object %p (%s)", \
+ o, evas_object_type_get(o)); \
+ return; \
+ }
+
+#define ELM_WIN_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
+ ELM_WIN_DATA_GET(o, ptr); \
+ if (!ptr) \
+ { \
+ CRITICAL("No widget data for object %p (%s)", \
+ o, evas_object_type_get(o)); \
+ return val; \
+ }
+
+#define ELM_WIN_CHECK(obj) \
+ if (!obj || !elm_widget_type_check((obj), WIN_SMART_NAME, __func__)) \
+ return
+
+typedef struct _Elm_Win_Smart_Data Elm_Win_Smart_Data;
+
+struct _Elm_Win_Smart_Data
+{
+ Elm_Widget_Smart_Data base; /* base widget smart data as
+ * first member obligatory, as
+ * we're inheriting from it */
+
+ Ecore_Evas *ee;
+ Evas *evas;
+ Evas_Object *parent; /* parent *window* object*/
+ Evas_Object *img_obj, *frame_obj;
+ Eina_List *resize_objs; /* a window may have
+ * *multiple* resize
+ * objects */
#ifdef HAVE_ELEMENTARY_X
- Ecore_X_Window xwin;
- Ecore_Event_Handler *client_message_handler;
+ Ecore_X_Window xwin;
+ Ecore_Event_Handler *client_message_handler;
#endif
- Ecore_Job *deferred_resize_job;
- Ecore_Job *deferred_child_eval_job;
+ Ecore_Job *deferred_resize_job;
+ Ecore_Job *deferred_child_eval_job;
- Elm_Win_Type type;
- Elm_Win_Keyboard_Mode kbdmode;
- Elm_Win_Indicator_Mode indmode;
+ Elm_Win_Type type;
+ Elm_Win_Keyboard_Mode kbdmode;
+ Elm_Win_Indicator_Mode indmode;
Elm_Win_Indicator_Opacity_Mode ind_o_mode;
struct
- {
- const char *info;
- Ecore_Timer *timer;
- int repeat_count;
- int shot_counter;
- } shot;
- int resize_location;
- int *autodel_clear, rot;
- int show_count;
+ {
+ const char *info;
+ Ecore_Timer *timer;
+ int repeat_count;
+ int shot_counter;
+ } shot;
+ int resize_location;
+ int *autodel_clear, rot;
+ int show_count;
struct
- {
- int x, y;
- } screen;
+ {
+ int x, y;
+ } screen;
struct
- {
- Ecore_Evas *ee;
- Evas *evas;
- Evas_Object *obj, *hot_obj;
- int hot_x, hot_y;
- } pointer;
+ {
+ Ecore_Evas *ee;
+ Evas *evas;
+ Evas_Object *obj, *hot_obj;
+ int hot_x, hot_y;
+ } pointer;
struct
- {
- Evas_Object *top;
+ {
+ Evas_Object *top;
- struct
- {
- Evas_Object *target;
- Eina_Bool visible : 1;
- Eina_Bool handled : 1;
- } cur, prev;
+ struct
+ {
+ Evas_Object *target;
+ Eina_Bool visible : 1;
+ Eina_Bool handled : 1;
+ } cur, prev;
- const char *style;
- Ecore_Job *reconf_job;
+ const char *style;
+ Ecore_Job *reconf_job;
- Eina_Bool enabled : 1;
- Eina_Bool changed_theme : 1;
- Eina_Bool top_animate : 1;
- Eina_Bool geometry_changed : 1;
- } focus_highlight;
+ Eina_Bool enabled : 1;
+ Eina_Bool changed_theme : 1;
+ Eina_Bool top_animate : 1;
+ Eina_Bool geometry_changed : 1;
+ } focus_highlight;
Evas_Object *icon;
- const char *title;
- const char *icon_name;
- const char *role;
-
- double aspect;
- Eina_Bool urgent : 1;
- Eina_Bool modal : 1;
- Eina_Bool demand_attention : 1;
- Eina_Bool autodel : 1;
- Eina_Bool constrain : 1;
- Eina_Bool resizing : 1;
- Eina_Bool iconified : 1;
- Eina_Bool withdrawn : 1;
- Eina_Bool sticky : 1;
- Eina_Bool fullscreen : 1;
- Eina_Bool maximized : 1;
- Eina_Bool skip_focus : 1;
+ const char *title;
+ const char *icon_name;
+ const char *role;
+
+ double aspect;
+ Eina_Bool urgent : 1;
+ Eina_Bool modal : 1;
+ Eina_Bool demand_attention : 1;
+ Eina_Bool autodel : 1;
+ Eina_Bool constrain : 1;
+ Eina_Bool resizing : 1;
+ Eina_Bool iconified : 1;
+ Eina_Bool withdrawn : 1;
+ Eina_Bool sticky : 1;
+ Eina_Bool fullscreen : 1;
+ Eina_Bool maximized : 1;
+ Eina_Bool skip_focus : 1;
};
-static const char *widtype = NULL;
-static void _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _elm_win_obj_callback_img_obj_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _elm_win_obj_callback_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _elm_win_obj_intercept_move(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y);
-static void _elm_win_obj_intercept_show(void *data, Evas_Object *obj);
-static void _elm_win_move(Ecore_Evas *ee);
-static void _elm_win_resize(Ecore_Evas *ee);
-static void _elm_win_delete_request(Ecore_Evas *ee);
-static void _elm_win_resize_job(void *data);
-#ifdef HAVE_ELEMENTARY_X
-static void _elm_win_xwin_update(Elm_Win *win);
-#endif
-static void _elm_win_eval_subobjs(Evas_Object *obj);
-static void _elm_win_subobj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _elm_win_subobj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _elm_win_focus_highlight_init(Elm_Win *win);
-static void _elm_win_focus_highlight_shutdown(Elm_Win *win);
-static void _elm_win_focus_highlight_visible_set(Elm_Win *win, Eina_Bool visible);
-static void _elm_win_focus_highlight_reconfigure_job_start(Elm_Win *win);
-static void _elm_win_focus_highlight_reconfigure_job_stop(Elm_Win *win);
-static void _elm_win_focus_highlight_anim_end(void *data, Evas_Object *obj, const char *emission, const char *source);
-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_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_pointer_add(Elm_Win *win, const char *style);
-
static const char SIG_DELETE_REQUEST[] = "delete,request";
static const char SIG_FOCUS_OUT[] = "focus,out";
static const char SIG_FOCUS_IN[] = "focus,in";
static const char SIG_MOVED[] = "moved";
-static const char SIG_THEME_CHANGED[] = "theme,changed";
static const char SIG_WITHDRAWN[] = "withdrawn";
static const char SIG_ICONIFIED[] = "iconified";
static const char SIG_NORMAL[] = "normal";
@@ -129,7 +130,7 @@ static const char SIG_UNFULLSCREEN[] = "unfullscreen";
static const char SIG_MAXIMIZED[] = "maximized";
static const char SIG_UNMAXIMIZED[] = "unmaximized";
-static const Evas_Smart_Cb_Description _signals[] = {
+static const Evas_Smart_Cb_Description _smart_callbacks[] = {
{SIG_DELETE_REQUEST, ""},
{SIG_FOCUS_OUT, ""},
{SIG_FOCUS_IN, ""},
@@ -146,7 +147,9 @@ static const Evas_Smart_Cb_Description _signals[] = {
{NULL, NULL}
};
-
+EVAS_SMART_SUBCLASS_NEW
+ (WIN_SMART_NAME, _elm_win, Elm_Widget_Smart_Class,
+ Elm_Widget_Smart_Class, elm_widget_smart_class_get, _smart_callbacks);
Eina_List *_elm_win_list = NULL;
int _elm_win_deferred_free = 0;
@@ -155,13 +158,13 @@ int _elm_win_deferred_free = 0;
// ELM_ENGINE="shot:delay=0.1:file=my-window.png"
static double
-_shot_delay_get(Elm_Win *win)
+_shot_delay_get(Elm_Win_Smart_Data *sd)
{
char *p, *pd;
- char *d = strdup(win->shot.info);
+ char *d = strdup(sd->shot.info);
if (!d) return 0.5;
- for (p = (char *)win->shot.info; *p; p++)
+ for (p = (char *)sd->shot.info; *p; p++)
{
if (!strncmp(p, "delay=", 6))
{
@@ -178,34 +181,36 @@ _shot_delay_get(Elm_Win *win)
}
}
free(d);
+
return 0.5;
}
static char *
-_shot_file_get(Elm_Win *win)
+_shot_file_get(Elm_Win_Smart_Data *sd)
{
char *p;
- char *tmp = strdup(win->shot.info);
+ char *tmp = strdup(sd->shot.info);
char *repname = NULL;
if (!tmp) return NULL;
- for (p = (char *)win->shot.info; *p; p++)
+ for (p = (char *)sd->shot.info; *p; p++)
{
if (!strncmp(p, "file=", 5))
{
strcpy(tmp, p + 5);
- if (!win->shot.repeat_count) return tmp;
+ if (!sd->shot.repeat_count) return tmp;
else
{
char *dotptr = strrchr(tmp, '.');
if (dotptr)
{
- size_t size = sizeof(char)*(strlen(tmp) + 16);
+ size_t size = sizeof(char) * (strlen(tmp) + 16);
repname = malloc(size);
strncpy(repname, tmp, dotptr - tmp);
- snprintf(repname + (dotptr - tmp), size - (dotptr - tmp), "%03i",
- win->shot.shot_counter + 1);
+ snprintf(repname + (dotptr - tmp), size -
+ (dotptr - tmp), "%03i",
+ sd->shot.shot_counter + 1);
strcat(repname, dotptr);
free(tmp);
return repname;
@@ -214,21 +219,23 @@ _shot_file_get(Elm_Win *win)
}
}
free(tmp);
- if (!win->shot.repeat_count) return strdup("out.png");
+ if (!sd->shot.repeat_count) return strdup("out.png");
repname = malloc(sizeof(char) * 24);
- snprintf(repname, sizeof(char) * 24, "out%03i.png", win->shot.shot_counter + 1);
+ snprintf(repname, sizeof(char) * 24, "out%03i.png",
+ sd->shot.shot_counter + 1);
+
return repname;
}
static int
-_shot_repeat_count_get(Elm_Win *win)
+_shot_repeat_count_get(Elm_Win_Smart_Data *sd)
{
char *p, *pd;
- char *d = strdup(win->shot.info);
+ char *d = strdup(sd->shot.info);
if (!d) return 0;
- for (p = (char *)win->shot.info; *p; p++)
+ for (p = (char *)sd->shot.info; *p; p++)
{
if (!strncmp(p, "repeat=", 7))
{
@@ -247,23 +254,24 @@ _shot_repeat_count_get(Elm_Win *win)
}
}
free(d);
+
return 0;
}
static char *
-_shot_key_get(Elm_Win *win __UNUSED__)
+_shot_key_get(Elm_Win_Smart_Data *sd __UNUSED__)
{
return NULL;
}
static char *
-_shot_flags_get(Elm_Win *win __UNUSED__)
+_shot_flags_get(Elm_Win_Smart_Data *sd __UNUSED__)
{
return NULL;
}
static void
-_shot_do(Elm_Win *win)
+_shot_do(Elm_Win_Smart_Data *sd)
{
Ecore_Evas *ee;
Evas_Object *o;
@@ -271,18 +279,21 @@ _shot_do(Elm_Win *win)
int w, h;
char *file, *key, *flags;
- ecore_evas_manual_render(win->ee);
- pixels = (void *)ecore_evas_buffer_pixels_get(win->ee);
+ ecore_evas_manual_render(sd->ee);
+ pixels = (void *)ecore_evas_buffer_pixels_get(sd->ee);
if (!pixels) return;
- ecore_evas_geometry_get(win->ee, NULL, NULL, &w, &h);
+
+ ecore_evas_geometry_get(sd->ee, NULL, NULL, &w, &h);
if ((w < 1) || (h < 1)) return;
- file = _shot_file_get(win);
+
+ file = _shot_file_get(sd);
if (!file) return;
- key = _shot_key_get(win);
- flags = _shot_flags_get(win);
+
+ key = _shot_key_get(sd);
+ flags = _shot_flags_get(sd);
ee = ecore_evas_buffer_new(1, 1);
o = evas_object_image_add(ecore_evas_get(ee));
- evas_object_image_alpha_set(o, ecore_evas_alpha_get(win->ee));
+ evas_object_image_alpha_set(o, ecore_evas_alpha_get(sd->ee));
evas_object_image_size_set(o, w, h);
evas_object_image_data_set(o, pixels);
if (!evas_object_image_save(o, file, key, flags))
@@ -294,104 +305,303 @@ _shot_do(Elm_Win *win)
if (key) free(key);
if (flags) free(flags);
ecore_evas_free(ee);
- if (win->shot.repeat_count) win->shot.shot_counter++;
+ if (sd->shot.repeat_count) sd->shot.shot_counter++;
}
static Eina_Bool
_shot_delay(void *data)
{
- Elm_Win *win = data;
- _shot_do(win);
- if (win->shot.repeat_count)
+ Elm_Win_Smart_Data *sd = data;
+
+ _shot_do(sd);
+ if (sd->shot.repeat_count)
{
- int remainshot = (win->shot.repeat_count - win->shot.shot_counter);
+ int remainshot = (sd->shot.repeat_count - sd->shot.shot_counter);
if (remainshot > 0) return EINA_TRUE;
}
- win->shot.timer = NULL;
+ sd->shot.timer = NULL;
elm_exit();
+
return EINA_FALSE;
}
static void
-_shot_init(Elm_Win *win)
+_shot_init(Elm_Win_Smart_Data *sd)
{
- if (!win->shot.info) return;
- win->shot.repeat_count = _shot_repeat_count_get(win);
- win->shot.shot_counter = 0;
+ if (!sd->shot.info) return;
+
+ sd->shot.repeat_count = _shot_repeat_count_get(sd);
+ sd->shot.shot_counter = 0;
}
static void
-_shot_handle(Elm_Win *win)
+_shot_handle(Elm_Win_Smart_Data *sd)
{
- if (!win->shot.info) return;
- win->shot.timer = ecore_timer_add(_shot_delay_get(win), _shot_delay, win);
+ if (!sd->shot.info) return;
+
+ sd->shot.timer = ecore_timer_add(_shot_delay_get(sd), _shot_delay, sd);
}
static void
_elm_win_move(Ecore_Evas *ee)
{
Evas_Object *obj = ecore_evas_object_associate_get(ee);
- Elm_Win *win;
int x, y;
if (!obj) return;
- win = elm_widget_data_get(obj);
- if (!win) return;
+
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
ecore_evas_geometry_get(ee, &x, &y, NULL, NULL);
- win->screen.x = x;
- win->screen.y = y;
- evas_object_smart_callback_call(win->win_obj, SIG_MOVED, NULL);
+ sd->screen.x = x;
+ sd->screen.y = y;
+ evas_object_smart_callback_call(obj, SIG_MOVED, NULL);
+}
+
+static void
+_elm_win_resize_job(void *data)
+{
+ Elm_Win_Smart_Data *sd = data;
+ const Eina_List *l;
+ Evas_Object *obj;
+ int w, h;
+
+ sd->deferred_resize_job = NULL;
+ ecore_evas_request_geometry_get(sd->ee, NULL, NULL, &w, &h);
+ if (sd->constrain)
+ {
+ int sw, sh;
+ ecore_evas_screen_geometry_get(sd->ee, NULL, NULL, &sw, &sh);
+ w = MIN(w, sw);
+ h = MIN(h, sh);
+ }
+ if (sd->frame_obj)
+ {
+ evas_object_resize(sd->frame_obj, w, h);
+ }
+ else if (sd->img_obj)
+ {
+ }
+ evas_object_resize(ELM_WIDGET_DATA(sd)->obj, w, h);
+ EINA_LIST_FOREACH (sd->resize_objs, l, obj)
+ {
+ evas_object_move(obj, 0, 0);
+ evas_object_resize(obj, w, h);
+ }
}
static void
_elm_win_resize(Ecore_Evas *ee)
{
Evas_Object *obj = ecore_evas_object_associate_get(ee);
- Elm_Win *win;
if (!obj) return;
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (win->deferred_resize_job) ecore_job_del(win->deferred_resize_job);
- win->deferred_resize_job = ecore_job_add(_elm_win_resize_job, win);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->deferred_resize_job) ecore_job_del(sd->deferred_resize_job);
+ sd->deferred_resize_job = ecore_job_add(_elm_win_resize_job, sd);
}
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;
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->resizing) sd->resizing = EINA_FALSE;
+}
+
+static void
+_elm_win_focus_highlight_reconfigure_job_stop(Elm_Win_Smart_Data *sd)
+{
+ if (sd->focus_highlight.reconf_job)
+ ecore_job_del(sd->focus_highlight.reconf_job);
+ sd->focus_highlight.reconf_job = NULL;
+}
+
+static void
+_elm_win_focus_highlight_visible_set(Elm_Win_Smart_Data *sd,
+ Eina_Bool visible)
+{
+ Evas_Object *top;
+
+ top = sd->focus_highlight.top;
+ if (visible)
+ {
+ if (top)
+ {
+ evas_object_show(top);
+ edje_object_signal_emit(top, "elm,action,focus,show", "elm");
+ }
+ }
+ else
+ {
+ if (top)
+ edje_object_signal_emit(top, "elm,action,focus,hide", "elm");
+ }
+}
+
+static void
+_elm_win_focus_highlight_anim_setup(Elm_Win_Smart_Data *sd,
+ Evas_Object *obj)
+{
+ Evas_Coord tx, ty, tw, th;
+ Evas_Coord w, h, px, py, pw, ph;
+ Edje_Message_Int_Set *m;
+ Evas_Object *previous = sd->focus_highlight.prev.target;
+ Evas_Object *target = sd->focus_highlight.cur.target;
+
+ evas_object_geometry_get(ELM_WIDGET_DATA(sd)->obj, NULL, NULL, &w, &h);
+ evas_object_geometry_get(target, &tx, &ty, &tw, &th);
+ evas_object_geometry_get(previous, &px, &py, &pw, &ph);
+ evas_object_move(obj, 0, 0);
+ evas_object_resize(obj, tw, th);
+ evas_object_clip_unset(obj);
+
+ m = alloca(sizeof(*m) + (sizeof(int) * 8));
+ m->count = 8;
+ m->val[0] = px;
+ m->val[1] = py;
+ m->val[2] = pw;
+ m->val[3] = ph;
+ m->val[4] = tx;
+ m->val[5] = ty;
+ m->val[6] = tw;
+ m->val[7] = th;
+ edje_object_message_send(obj, EDJE_MESSAGE_INT_SET, 1, m);
+}
+
+static void
+_elm_win_focus_highlight_simple_setup(Elm_Win_Smart_Data *sd,
+ Evas_Object *obj)
+{
+ Evas_Object *clip, *target = sd->focus_highlight.cur.target;
+ Evas_Coord x, y, w, h;
+
+ clip = evas_object_clip_get(target);
+ evas_object_geometry_get(target, &x, &y, &w, &h);
+
+ evas_object_move(obj, x, y);
+ evas_object_resize(obj, w, h);
+ evas_object_clip_set(obj, clip);
+}
+
+static void
+_elm_win_focus_highlight_reconfigure(Elm_Win_Smart_Data *sd)
+{
+ Evas_Object *target = sd->focus_highlight.cur.target;
+ Evas_Object *previous = sd->focus_highlight.prev.target;
+ Evas_Object *top = sd->focus_highlight.top;
+ Eina_Bool visible_changed;
+ Eina_Bool common_visible;
+ const char *sig = NULL;
+
+ _elm_win_focus_highlight_reconfigure_job_stop(sd);
+
+ visible_changed = (sd->focus_highlight.cur.visible !=
+ sd->focus_highlight.prev.visible);
+
+ if ((target == previous) && (!visible_changed) &&
+ (!sd->focus_highlight.geometry_changed))
+ return;
+
+ if ((previous) && (sd->focus_highlight.prev.handled))
+ elm_widget_signal_emit
+ (previous, "elm,action,focus_highlight,hide", "elm");
+
+ if (!target)
+ common_visible = EINA_FALSE;
+ else if (sd->focus_highlight.cur.handled)
+ {
+ common_visible = EINA_FALSE;
+ if (sd->focus_highlight.cur.visible)
+ sig = "elm,action,focus_highlight,show";
+ else
+ sig = "elm,action,focus_highlight,hide";
+ }
+ else
+ common_visible = sd->focus_highlight.cur.visible;
+
+ _elm_win_focus_highlight_visible_set(sd, common_visible);
+ if (sig)
+ elm_widget_signal_emit(target, sig, "elm");
+
+ if ((!target) || (!common_visible) || (sd->focus_highlight.cur.handled))
+ goto the_end;
+
+ if (sd->focus_highlight.changed_theme)
+ {
+ const char *str;
+ if (sd->focus_highlight.style)
+ str = sd->focus_highlight.style;
+ else
+ str = "default";
+ elm_widget_theme_object_set
+ (ELM_WIDGET_DATA(sd)->obj, top, "focus_highlight", "top", str);
+ sd->focus_highlight.changed_theme = EINA_FALSE;
+
+ if (_elm_config->focus_highlight_animate)
+ {
+ str = edje_object_data_get(sd->focus_highlight.top, "animate");
+ sd->focus_highlight.top_animate = ((str) && (!strcmp(str, "on")));
+ }
+ }
+
+ if ((sd->focus_highlight.top_animate) && (previous) &&
+ (!sd->focus_highlight.prev.handled))
+ _elm_win_focus_highlight_anim_setup(sd, top);
+ else
+ _elm_win_focus_highlight_simple_setup(sd, top);
+ evas_object_raise(top);
+
+the_end:
+ sd->focus_highlight.geometry_changed = EINA_FALSE;
+ sd->focus_highlight.prev = sd->focus_highlight.cur;
+}
+
+static void
+_elm_win_focus_highlight_reconfigure_job(void *data)
+{
+ _elm_win_focus_highlight_reconfigure((Elm_Win_Smart_Data *)data);
+}
+
+static void
+_elm_win_focus_highlight_reconfigure_job_start(Elm_Win_Smart_Data *sd)
+{
+ if (sd->focus_highlight.reconf_job)
+ ecore_job_del(sd->focus_highlight.reconf_job);
+
+ sd->focus_highlight.reconf_job = ecore_job_add(
+ _elm_win_focus_highlight_reconfigure_job, sd);
}
static void
_elm_win_focus_in(Ecore_Evas *ee)
{
Evas_Object *obj = ecore_evas_object_associate_get(ee);
- Elm_Win *win;
if (!obj) return;
- win = elm_widget_data_get(obj);
- if (!win) return;
- _elm_widget_top_win_focused_set(win->win_obj, EINA_TRUE);
+
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ _elm_widget_top_win_focused_set(obj, EINA_TRUE);
if (!elm_widget_focus_order_get(obj))
{
- elm_widget_focus_steal(win->win_obj);
- win->show_count++;
+ elm_widget_focus_steal(obj);
+ sd->show_count++;
}
else
- elm_widget_focus_restore(win->win_obj);
- evas_object_smart_callback_call(win->win_obj, SIG_FOCUS_IN, NULL);
- win->focus_highlight.cur.visible = EINA_TRUE;
- _elm_win_focus_highlight_reconfigure_job_start(win);
- if (win->frame_obj)
+ elm_widget_focus_restore(obj);
+ evas_object_smart_callback_call(obj, SIG_FOCUS_IN, NULL);
+ sd->focus_highlight.cur.visible = EINA_TRUE;
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+ if (sd->frame_obj)
{
- edje_object_signal_emit(win->frame_obj, "elm,action,focus", "elm");
+ edje_object_signal_emit(sd->frame_obj, "elm,action,focus", "elm");
}
- else if (win->img_obj)
+ else if (sd->img_obj)
{
/* do nothing */
}
@@ -401,21 +611,21 @@ static void
_elm_win_focus_out(Ecore_Evas *ee)
{
Evas_Object *obj = ecore_evas_object_associate_get(ee);
- Elm_Win *win;
if (!obj) return;
- win = elm_widget_data_get(obj);
- if (!win) return;
- elm_object_focus_set(win->win_obj, EINA_FALSE);
- _elm_widget_top_win_focused_set(win->win_obj, EINA_FALSE);
- evas_object_smart_callback_call(win->win_obj, SIG_FOCUS_OUT, NULL);
- win->focus_highlight.cur.visible = EINA_FALSE;
- _elm_win_focus_highlight_reconfigure_job_start(win);
- if (win->frame_obj)
+
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ elm_object_focus_set(obj, EINA_FALSE);
+ _elm_widget_top_win_focused_set(obj, EINA_FALSE);
+ evas_object_smart_callback_call(obj, SIG_FOCUS_OUT, NULL);
+ sd->focus_highlight.cur.visible = EINA_FALSE;
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+ if (sd->frame_obj)
{
- edje_object_signal_emit(win->frame_obj, "elm,action,unfocus", "elm");
+ edje_object_signal_emit(sd->frame_obj, "elm,action,unfocus", "elm");
}
- else if (win->img_obj)
+ else if (sd->img_obj)
{
/* do nothing */
}
@@ -425,7 +635,6 @@ static void
_elm_win_state_change(Ecore_Evas *ee)
{
Evas_Object *obj;
- Elm_Win *win;
Eina_Bool ch_withdrawn = EINA_FALSE;
Eina_Bool ch_sticky = EINA_FALSE;
Eina_Bool ch_iconified = EINA_FALSE;
@@ -434,83 +643,84 @@ _elm_win_state_change(Ecore_Evas *ee)
if (!(obj = ecore_evas_object_associate_get(ee))) return;
- if (!(win = elm_widget_data_get(obj))) return;
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
- if (win->withdrawn != ecore_evas_withdrawn_get(win->ee))
+ if (sd->withdrawn != ecore_evas_withdrawn_get(sd->ee))
{
- win->withdrawn = ecore_evas_withdrawn_get(win->ee);
+ sd->withdrawn = ecore_evas_withdrawn_get(sd->ee);
ch_withdrawn = EINA_TRUE;
}
- if (win->sticky != ecore_evas_sticky_get(win->ee))
+ if (sd->sticky != ecore_evas_sticky_get(sd->ee))
{
- win->sticky = ecore_evas_sticky_get(win->ee);
+ sd->sticky = ecore_evas_sticky_get(sd->ee);
ch_sticky = EINA_TRUE;
}
- if (win->iconified != ecore_evas_iconified_get(win->ee))
+ if (sd->iconified != ecore_evas_iconified_get(sd->ee))
{
- win->iconified = ecore_evas_iconified_get(win->ee);
+ sd->iconified = ecore_evas_iconified_get(sd->ee);
ch_iconified = EINA_TRUE;
}
- if (win->fullscreen != ecore_evas_fullscreen_get(win->ee))
+ if (sd->fullscreen != ecore_evas_fullscreen_get(sd->ee))
{
- win->fullscreen = ecore_evas_fullscreen_get(win->ee);
+ sd->fullscreen = ecore_evas_fullscreen_get(sd->ee);
ch_fullscreen = EINA_TRUE;
}
- if (win->maximized != ecore_evas_maximized_get(win->ee))
+ if (sd->maximized != ecore_evas_maximized_get(sd->ee))
{
- win->maximized = ecore_evas_maximized_get(win->ee);
+ sd->maximized = ecore_evas_maximized_get(sd->ee);
ch_maximized = EINA_TRUE;
}
if ((ch_withdrawn) || (ch_iconified))
{
- if (win->withdrawn)
- evas_object_smart_callback_call(win->win_obj, SIG_WITHDRAWN, NULL);
- else if (win->iconified)
- evas_object_smart_callback_call(win->win_obj, SIG_ICONIFIED, NULL);
+ if (sd->withdrawn)
+ evas_object_smart_callback_call(obj, SIG_WITHDRAWN, NULL);
+ else if (sd->iconified)
+ evas_object_smart_callback_call(obj, SIG_ICONIFIED, NULL);
else
- evas_object_smart_callback_call(win->win_obj, SIG_NORMAL, NULL);
+ evas_object_smart_callback_call(obj, SIG_NORMAL, NULL);
}
if (ch_sticky)
{
- if (win->sticky)
- evas_object_smart_callback_call(win->win_obj, SIG_STICK, NULL);
+ if (sd->sticky)
+ evas_object_smart_callback_call(obj, SIG_STICK, NULL);
else
- evas_object_smart_callback_call(win->win_obj, SIG_UNSTICK, NULL);
+ evas_object_smart_callback_call(obj, SIG_UNSTICK, NULL);
}
if (ch_fullscreen)
{
- if (win->fullscreen)
- evas_object_smart_callback_call(win->win_obj, SIG_FULLSCREEN, NULL);
+ if (sd->fullscreen)
+ evas_object_smart_callback_call(obj, SIG_FULLSCREEN, NULL);
else
- evas_object_smart_callback_call(win->win_obj, SIG_UNFULLSCREEN, NULL);
+ evas_object_smart_callback_call(obj, SIG_UNFULLSCREEN, NULL);
}
if (ch_maximized)
{
- if (win->maximized)
- evas_object_smart_callback_call(win->win_obj, SIG_MAXIMIZED, NULL);
+ if (sd->maximized)
+ evas_object_smart_callback_call(obj, SIG_MAXIMIZED, NULL);
else
- evas_object_smart_callback_call(win->win_obj, SIG_UNMAXIMIZED, NULL);
+ evas_object_smart_callback_call(obj, SIG_UNMAXIMIZED, NULL);
}
}
static Eina_Bool
-_elm_win_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next)
+_elm_win_smart_focus_next(const Evas_Object *obj,
+ Elm_Focus_Direction dir,
+ Evas_Object **next)
{
- Elm_Win *wd = elm_widget_data_get(obj);
- const Eina_List *items;
- const Eina_List *list;
- void *(*list_data_get) (const Eina_List *list);
+ ELM_WIN_DATA_GET(obj, sd);
- if (!wd)
- return EINA_FALSE;
- list = elm_widget_sub_object_list_get(obj);
+ const Eina_List *items;
+ void *(*list_data_get)(const Eina_List *list);
/* Focus chain */
- if (list)
+ if (ELM_WIDGET_DATA(sd)->subobjs)
{
if (!(items = elm_widget_focus_custom_chain_get(obj)))
- items = list;
-
+ {
+ items = ELM_WIDGET_DATA(sd)->subobjs;
+ if (!items)
+ return EINA_FALSE;
+ }
list_data_get = eina_list_data_get;
elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next);
@@ -523,96 +733,115 @@ _elm_win_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_O
}
static Eina_Bool
-_elm_win_focus_direction_hook(const Evas_Object *obj, const Evas_Object *base, double degree,
- Evas_Object **direction, double *weight)
+_elm_win_smart_focus_direction(const Evas_Object *obj,
+ const Evas_Object *base,
+ double degree,
+ Evas_Object **direction,
+ double *weight)
{
- Elm_Win *wd = elm_widget_data_get(obj);
const Eina_List *items;
- const Eina_List *list;
- void *(*list_data_get) (const Eina_List *list);
+ void *(*list_data_get)(const Eina_List *list);
- if (!wd)
- return EINA_FALSE;
- list = elm_widget_sub_object_list_get(obj);
+ ELM_WIN_DATA_GET(obj, sd);
/* Focus chain */
- if (list)
+ if (ELM_WIDGET_DATA(sd)->subobjs)
{
if (!(items = elm_widget_focus_custom_chain_get(obj)))
- items = list;
+ items = ELM_WIDGET_DATA(sd)->subobjs;
list_data_get = eina_list_data_get;
- return elm_widget_focus_list_direction_get(obj, base, items, list_data_get, degree, direction, weight);
+ return elm_widget_focus_list_direction_get
+ (obj, base, items, list_data_get, degree, direction, weight);
}
+
return EINA_FALSE;
}
-static void
-_elm_win_on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
+static Eina_Bool
+_elm_win_smart_on_focus(Evas_Object *obj)
{
- Elm_Win *win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_DATA_GET(obj, sd);
- if (win->img_obj)
- evas_object_focus_set(win->img_obj, elm_widget_focus_get(obj));
+ if (sd->img_obj)
+ evas_object_focus_set(sd->img_obj, elm_widget_focus_get(obj));
else
- evas_object_focus_set(obj, elm_widget_focus_get(obj));
+ evas_object_focus_set(obj, elm_widget_focus_get(obj));
+
+ return EINA_TRUE;
}
static Eina_Bool
-_elm_win_event_cb(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+_elm_win_smart_event(Evas_Object *obj,
+ Evas_Object *src __UNUSED__,
+ Evas_Callback_Type type,
+ void *event_info)
{
- if (type == EVAS_CALLBACK_KEY_DOWN)
+ Evas_Event_Key_Down *ev = event_info;
+ Evas_Object *current_focused;
+
+ if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+
+ if (type != EVAS_CALLBACK_KEY_DOWN)
+ return EINA_FALSE;
+
+ current_focused = elm_widget_focused_object_get(obj);
+ if (!strcmp(ev->keyname, "Tab"))
{
- Evas_Event_Key_Down *ev = event_info;
- Evas_Object *current_focused;
+ if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
+ elm_widget_focus_cycle(obj, ELM_FOCUS_PREVIOUS);
+ else
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- current_focused = elm_widget_focused_object_get(obj);
- if (!strcmp(ev->keyname, "Tab"))
- {
- if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
- elm_widget_focus_cycle(obj, ELM_FOCUS_PREVIOUS);
- else
- elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
- return EINA_TRUE;
- }
- else if ((!strcmp(ev->keyname, "Left")) ||
- ((!strcmp(ev->keyname, "KP_Left")) && (!ev->string)))
- {
- if (current_focused == obj)
- elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- else
- elm_widget_focus_direction_go(obj, 270.0);
- }
- else if ((!strcmp(ev->keyname, "Right")) ||
- ((!strcmp(ev->keyname, "KP_Right")) && (!ev->string)))
- {
- if (current_focused == obj)
- elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- else
- elm_widget_focus_direction_go(obj, 90.0);
- }
- else if ((!strcmp(ev->keyname, "Up")) ||
- ((!strcmp(ev->keyname, "KP_Up")) && (!ev->string)))
- {
- if (current_focused == obj)
- elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- else
- elm_widget_focus_direction_go(obj, 0.0);
- }
- else if ((!strcmp(ev->keyname, "Down")) ||
- ((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
- {
- if (current_focused == obj)
- elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
- else
- elm_widget_focus_direction_go(obj, 180.0);
- }
+ goto success;
+ }
+ else if ((!strcmp(ev->keyname, "Left")) ||
+ ((!strcmp(ev->keyname, "KP_Left")) && (!ev->string)))
+ {
+ if (current_focused == obj)
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
+ else
+ elm_widget_focus_direction_go(obj, 270.0);
+
+ goto success;
+ }
+ else if ((!strcmp(ev->keyname, "Right")) ||
+ ((!strcmp(ev->keyname, "KP_Right")) && (!ev->string)))
+ {
+ if (current_focused == obj)
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
+ else
+ elm_widget_focus_direction_go(obj, 90.0);
+
+ goto success;
+ }
+ else if ((!strcmp(ev->keyname, "Up")) ||
+ ((!strcmp(ev->keyname, "KP_Up")) && (!ev->string)))
+ {
+ if (current_focused == obj)
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
+ else
+ elm_widget_focus_direction_go(obj, 0.0);
+
+ goto success;
+ }
+ else if ((!strcmp(ev->keyname, "Down")) ||
+ ((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
+ {
+ if (current_focused == obj)
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
+ else
+ elm_widget_focus_direction_go(obj, 180.0);
+
+ goto success;
}
return EINA_FALSE;
+
+success:
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
}
static void
@@ -623,61 +852,233 @@ _deferred_ecore_evas_free(void *data)
}
static void
-_elm_win_obj_callback_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+_elm_win_smart_show(Evas_Object *obj)
+{
+ ELM_WIN_DATA_GET(obj, sd);
+
+ _elm_win_parent_sc->base.show(obj);
+
+ if (!sd->show_count) sd->show_count++;
+ if (sd->shot.info) _shot_handle(sd);
+}
+
+static void
+_elm_win_smart_hide(Evas_Object *obj)
{
- Elm_Win *win = data;
+ ELM_WIN_DATA_GET(obj, sd);
- if (!win->show_count) win->show_count++;
- if (win->shot.info) _shot_handle(win);
+ _elm_win_parent_sc->base.hide(obj);
+
+ if (sd->frame_obj)
+ {
+ evas_object_hide(sd->frame_obj);
+ }
+ else if (sd->img_obj)
+ {
+ evas_object_hide(sd->img_obj);
+ }
+ if (sd->pointer.obj)
+ {
+ evas_object_hide(sd->pointer.obj);
+ ecore_evas_hide(sd->pointer.ee);
+ }
+}
+
+static void
+_elm_win_on_parent_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+
+ if (obj == sd->parent) sd->parent = NULL;
+}
+
+static void
+_elm_win_focus_target_move(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+
+ sd->focus_highlight.geometry_changed = EINA_TRUE;
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+}
+
+static void
+_elm_win_focus_target_resize(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+
+ sd->focus_highlight.geometry_changed = EINA_TRUE;
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
}
static void
-_elm_win_obj_callback_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+_elm_win_focus_target_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+
+ sd->focus_highlight.cur.target = NULL;
+
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+}
+
+static Evas_Object *
+_elm_win_focus_target_get(Evas_Object *obj)
{
- Elm_Win *win = data;
+ Evas_Object *o = obj;
- if (win->frame_obj)
+ do
{
- evas_object_hide(win->frame_obj);
+ if (elm_widget_is(o))
+ {
+ if (!elm_widget_highlight_ignore_get(o))
+ break;
+ o = elm_widget_parent_get(o);
+ if (!o)
+ o = evas_object_smart_parent_get(o);
+ }
+ else
+ {
+ o = elm_widget_parent_widget_get(o);
+ if (!o)
+ o = evas_object_smart_parent_get(o);
+ }
}
- else if (win->img_obj)
+ while (o);
+
+ return o;
+}
+
+static void
+_elm_win_focus_target_callbacks_add(Elm_Win_Smart_Data *sd)
+{
+ Evas_Object *obj = sd->focus_highlight.cur.target;
+
+ evas_object_event_callback_add
+ (obj, EVAS_CALLBACK_MOVE, _elm_win_focus_target_move, sd);
+ evas_object_event_callback_add
+ (obj, EVAS_CALLBACK_RESIZE, _elm_win_focus_target_resize, sd);
+ evas_object_event_callback_add
+ (obj, EVAS_CALLBACK_DEL, _elm_win_focus_target_del, sd);
+}
+
+static void
+_elm_win_focus_target_callbacks_del(Elm_Win_Smart_Data *sd)
+{
+ Evas_Object *obj = sd->focus_highlight.cur.target;
+
+ evas_object_event_callback_del_full
+ (obj, EVAS_CALLBACK_MOVE, _elm_win_focus_target_move, sd);
+ evas_object_event_callback_del_full
+ (obj, EVAS_CALLBACK_RESIZE, _elm_win_focus_target_resize, sd);
+ evas_object_event_callback_del_full
+ (obj, EVAS_CALLBACK_DEL, _elm_win_focus_target_del, sd);
+}
+
+static void
+_elm_win_object_focus_in(void *data,
+ Evas *e __UNUSED__,
+ void *event_info)
+{
+ Evas_Object *obj = event_info, *target;
+ Elm_Win_Smart_Data *sd = data;
+
+ if (sd->focus_highlight.cur.target == obj)
+ return;
+
+ target = _elm_win_focus_target_get(obj);
+ sd->focus_highlight.cur.target = target;
+ if (elm_widget_highlight_in_theme_get(target))
+ sd->focus_highlight.cur.handled = EINA_TRUE;
+ else
+ _elm_win_focus_target_callbacks_add(sd);
+
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+}
+
+static void
+_elm_win_object_focus_out(void *data,
+ Evas *e __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+
+ if (!sd->focus_highlight.cur.target)
+ return;
+
+ if (!sd->focus_highlight.cur.handled)
+ _elm_win_focus_target_callbacks_del(sd);
+
+ sd->focus_highlight.cur.target = NULL;
+ sd->focus_highlight.cur.handled = EINA_FALSE;
+
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
+}
+
+static void
+_elm_win_focus_highlight_shutdown(Elm_Win_Smart_Data *sd)
+{
+ _elm_win_focus_highlight_reconfigure_job_stop(sd);
+ if (sd->focus_highlight.cur.target)
{
- evas_object_hide(win->img_obj);
+ _elm_win_focus_target_callbacks_del(sd);
+ sd->focus_highlight.cur.target = NULL;
}
- if (win->pointer.obj)
+ if (sd->focus_highlight.top)
{
- evas_object_hide(win->pointer.obj);
- ecore_evas_hide(win->pointer.ee);
+ evas_object_del(sd->focus_highlight.top);
+ sd->focus_highlight.top = NULL;
}
+
+ evas_event_callback_del_full
+ (sd->evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
+ _elm_win_object_focus_in, sd);
+ evas_event_callback_del_full
+ (sd->evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT,
+ _elm_win_object_focus_out, sd);
}
static void
-_elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_smart_del(Evas_Object *obj)
{
- Elm_Win *win = data;
- Evas_Object *child, *child2 = NULL;
+ ELM_WIN_DATA_GET(obj, sd);
+
+ Evas_Object *child, *child2;
- if (win->parent)
+ /* NB: child deletion handled by parent's smart del */
+
+ if (sd->parent)
{
- evas_object_event_callback_del_full(win->parent, EVAS_CALLBACK_DEL,
- _elm_win_obj_callback_parent_del, win);
- win->parent = NULL;
+ evas_object_event_callback_del_full
+ (sd->parent, EVAS_CALLBACK_DEL, _elm_win_on_parent_del, sd);
+ sd->parent = NULL;
}
- if (win->autodel_clear) *(win->autodel_clear) = -1;
- _elm_win_list = eina_list_remove(_elm_win_list, win->win_obj);
- while (win->subobjs) elm_win_resize_object_del(obj, win->subobjs->data);
- if (win->ee)
+
+ if (sd->autodel_clear) *(sd->autodel_clear) = -1;
+
+ _elm_win_list = eina_list_remove(_elm_win_list, obj);
+
+ if (sd->ee)
{
- ecore_evas_callback_delete_request_set(win->ee, NULL);
- ecore_evas_callback_resize_set(win->ee, NULL);
+ ecore_evas_callback_delete_request_set(sd->ee, NULL);
+ ecore_evas_callback_resize_set(sd->ee, NULL);
}
- if (win->deferred_resize_job) ecore_job_del(win->deferred_resize_job);
- if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job);
- if (win->shot.info) eina_stringshare_del(win->shot.info);
- if (win->shot.timer) ecore_timer_del(win->shot.timer);
- evas_object_event_callback_del_full(win->win_obj, EVAS_CALLBACK_DEL,
- _elm_win_obj_callback_del, win);
- child = evas_object_bottom_get(win->evas);
+ if (sd->deferred_resize_job) ecore_job_del(sd->deferred_resize_job);
+ if (sd->deferred_child_eval_job) ecore_job_del(sd->deferred_child_eval_job);
+ if (sd->shot.info) eina_stringshare_del(sd->shot.info);
+ if (sd->shot.timer) ecore_timer_del(sd->shot.timer);
+
+ child = evas_object_bottom_get(sd->evas);
while (child)
{
/* if the object we see *IS* the window object (because we are
@@ -701,88 +1102,84 @@ _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_inf
}
else
{
- /* just delete as normal (probably only first object */
+ /* just delete as normal (probably only first object) */
child2 = evas_object_above_get(child);
if (child2) evas_object_ref(child2);
evas_object_del(child);
child = child2;
}
}
+
#ifdef HAVE_ELEMENTARY_X
- if (win->client_message_handler)
- ecore_event_handler_del(win->client_message_handler);
+ if (sd->client_message_handler)
+ ecore_event_handler_del(sd->client_message_handler);
#endif
- // FIXME: Why are we flushing edje on every window destroy ??
- // edje_file_cache_flush();
- // edje_collection_cache_flush();
- // evas_image_cache_flush(win->evas);
- // evas_font_cache_flush(win->evas);
- // FIXME: we are in the del handler for the object and delete the canvas
- // that lives under it from the handler... nasty. deferring doesn't help either
- if (win->img_obj)
+ if (sd->img_obj)
{
- win->img_obj = NULL;
+ sd->img_obj = NULL;
}
else
{
- if (win->ee)
+ if (sd->ee)
{
- ecore_job_add(_deferred_ecore_evas_free, win->ee);
+ ecore_job_add(_deferred_ecore_evas_free, sd->ee);
_elm_win_deferred_free++;
}
}
- _elm_win_focus_highlight_shutdown(win);
- eina_stringshare_del(win->focus_highlight.style);
+ _elm_win_focus_highlight_shutdown(sd);
+ eina_stringshare_del(sd->focus_highlight.style);
- if (win->title) eina_stringshare_del(win->title);
- if (win->icon_name) eina_stringshare_del(win->icon_name);
- if (win->role) eina_stringshare_del(win->role);
- if (win->icon) evas_object_del(win->icon);
+ if (sd->title) eina_stringshare_del(sd->title);
+ if (sd->icon_name) eina_stringshare_del(sd->icon_name);
+ if (sd->role) eina_stringshare_del(sd->role);
+ if (sd->icon) evas_object_del(sd->icon);
- free(win);
+ _elm_win_parent_sc->base.del(obj); /* handles freeing sd */
if ((!_elm_win_list) &&
(elm_policy_get(ELM_POLICY_QUIT) == ELM_POLICY_QUIT_LAST_WINDOW_CLOSED))
{
edje_file_cache_flush();
edje_collection_cache_flush();
- evas_image_cache_flush(e);
- evas_font_cache_flush(e);
+ evas_image_cache_flush(evas_object_evas_get(obj));
+ evas_font_cache_flush(evas_object_evas_get(obj));
elm_exit();
}
}
static void
-_elm_win_obj_callback_img_obj_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+_elm_win_on_img_obj_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
{
- Elm_Win *win = data;
- if (!win->img_obj) return;
+ Elm_Win_Smart_Data *sd = data;
+
+ if (!sd->img_obj) return;
+
evas_object_event_callback_del_full
- (win->img_obj, EVAS_CALLBACK_DEL, _elm_win_obj_callback_img_obj_del, win);
- evas_object_del(win->img_obj);
-}
+ (sd->img_obj, EVAS_CALLBACK_DEL, _elm_win_on_img_obj_del, sd);
-static void
-_elm_win_obj_callback_parent_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
-{
- Elm_Win *win = data;
- if (obj == win->parent) win->parent = NULL;
+ evas_object_del(sd->img_obj);
}
static void
-_elm_win_obj_intercept_move(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y)
+_elm_win_obj_intercept_move(void *data,
+ Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y)
{
- Elm_Win *win = data;
+ Elm_Win_Smart_Data *sd = data;
- if (win->img_obj)
+ if (sd->img_obj)
{
- if ((x != win->screen.x) || (y != win->screen.y))
+ if ((x != sd->screen.x) || (y != sd->screen.y))
{
- win->screen.x = x;
- win->screen.y = y;
- evas_object_smart_callback_call(win->win_obj, SIG_MOVED, NULL);
+ sd->screen.x = x;
+ sd->screen.y = y;
+ evas_object_smart_callback_call(obj, SIG_MOVED, NULL);
}
}
else
@@ -792,88 +1189,82 @@ _elm_win_obj_intercept_move(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coo
}
static void
-_elm_win_obj_intercept_show(void *data, Evas_Object *obj)
+_elm_win_obj_intercept_show(void *data,
+ Evas_Object *obj)
{
- Elm_Win *win = data;
+ Elm_Win_Smart_Data *sd = data;
+
// this is called to make sure all smart containers have calculated their
// sizes BEFORE we show the window to make sure it initially appears at
// our desired size (ie min size is known first)
evas_smart_objects_calculate(evas_object_evas_get(obj));
- if (win->frame_obj)
+ if (sd->frame_obj)
{
- evas_object_show(win->frame_obj);
+ evas_object_show(sd->frame_obj);
}
- else if (win->img_obj)
+ else if (sd->img_obj)
{
- evas_object_show(win->img_obj);
+ evas_object_show(sd->img_obj);
}
- if (win->pointer.obj)
+ if (sd->pointer.obj)
{
- ecore_evas_show(win->pointer.ee);
- evas_object_show(win->pointer.obj);
- /* ecore_evas_wayland_pointer_set(win->pointer.ee, 10, 10); */
+ ecore_evas_show(sd->pointer.ee);
+ evas_object_show(sd->pointer.obj);
}
evas_object_show(obj);
}
static void
-_elm_win_obj_callback_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_smart_move(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y)
{
- Elm_Win *win = data;
+ ELM_WIN_DATA_GET(obj, sd);
- if (ecore_evas_override_get(win->ee))
- {
- Evas_Coord x, y;
+ _elm_win_parent_sc->base.move(obj, x, y);
- evas_object_geometry_get(obj, &x, &y, NULL, NULL);
- win->screen.x = x;
- win->screen.y = y;
- evas_object_smart_callback_call(win->win_obj, SIG_MOVED, NULL);
+ if (ecore_evas_override_get(sd->ee))
+ {
+ sd->screen.x = x;
+ sd->screen.y = y;
+ evas_object_smart_callback_call(obj, SIG_MOVED, NULL);
}
- if (win->frame_obj)
+ if (sd->frame_obj)
{
- Evas_Coord x, y;
-
- evas_object_geometry_get(obj, &x, &y, NULL, NULL);
- win->screen.x = x;
- win->screen.y = y;
-
- /* FIXME: We should update ecore_wl_window_location here !! */
+ sd->screen.x = x;
+ sd->screen.y = y;
}
- else if (win->img_obj)
+ /* FIXME: We should update ecore_wl_window_location here !! */
+ else if (sd->img_obj)
{
- Evas_Coord x, y;
-
- evas_object_geometry_get(obj, &x, &y, NULL, NULL);
- win->screen.x = x;
- win->screen.y = y;
-// evas_object_move(win->img_obj, x, y);
+ sd->screen.x = x;
+ sd->screen.y = y;
}
}
static void
-_elm_win_obj_callback_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_smart_resize(Evas_Object *obj,
+ Evas_Coord w,
+ Evas_Coord h)
{
- Elm_Win *win = data;
+ ELM_WIN_DATA_GET(obj, sd);
- if (win->frame_obj)
- {
- }
- else if (win->img_obj)
- {
- Evas_Coord w = 1, h = 1;
+ _elm_win_parent_sc->base.resize(obj, w, h);
- evas_object_geometry_get(obj, NULL, NULL, &w, &h);
- if (win->constrain)
+ if (sd->img_obj)
+ {
+ if (sd->constrain)
{
int sw, sh;
- ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &sw, &sh);
+
+ ecore_evas_screen_geometry_get(sd->ee, NULL, NULL, &sw, &sh);
w = MIN(w, sw);
h = MIN(h, sh);
}
if (w < 1) w = 1;
if (h < 1) h = 1;
- evas_object_image_size_set(win->img_obj, w, h);
+
+ evas_object_image_size_set(sd->img_obj, w, h);
}
}
@@ -881,63 +1272,30 @@ static void
_elm_win_delete_request(Ecore_Evas *ee)
{
Evas_Object *obj = ecore_evas_object_associate_get(ee);
- Elm_Win *win;
- if (strcmp(elm_widget_type_get(obj), "win")) return;
-
- win = elm_widget_data_get(obj);
- if (!win) return;
- int autodel = win->autodel;
- win->autodel_clear = &autodel;
- evas_object_ref(win->win_obj);
- evas_object_smart_callback_call(win->win_obj, SIG_DELETE_REQUEST, NULL);
- // FIXME: if above callback deletes - then the below will be invalid
- if (autodel) evas_object_del(win->win_obj);
- else win->autodel_clear = NULL;
- evas_object_unref(win->win_obj);
-}
-static void
-_elm_win_resize_job(void *data)
-{
- Elm_Win *win = data;
- const Eina_List *l;
- Evas_Object *obj;
- int w, h;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
- win->deferred_resize_job = NULL;
- ecore_evas_request_geometry_get(win->ee, NULL, NULL, &w, &h);
- if (win->constrain)
- {
- int sw, sh;
- ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &sw, &sh);
- w = MIN(w, sw);
- h = MIN(h, sh);
- }
- if (win->frame_obj)
- {
- evas_object_resize(win->frame_obj, w, h);
- }
- else if (win->img_obj)
- {
- }
- evas_object_resize(win->win_obj, w, h);
- EINA_LIST_FOREACH(win->subobjs, l, obj)
- {
- evas_object_move(obj, 0, 0);
- evas_object_resize(obj, w, h);
- }
+ int autodel = sd->autodel;
+ sd->autodel_clear = &autodel;
+ evas_object_ref(obj);
+ evas_object_smart_callback_call(obj, SIG_DELETE_REQUEST, NULL);
+ // FIXME: if above callback deletes - then the below will be invalid
+ if (autodel) evas_object_del(obj);
+ else sd->autodel_clear = NULL;
+ evas_object_unref(obj);
}
#ifdef HAVE_ELEMENTARY_X
static void
-_elm_win_xwindow_get(Elm_Win *win)
+_elm_win_xwindow_get(Elm_Win_Smart_Data *sd)
{
- win->xwin = 0;
+ sd->xwin = 0;
#define ENGINE_COMPARE(name) (!strcmp(_elm_preferred_engine, name))
if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
{
- if (win->ee) win->xwin = ecore_evas_software_x11_window_get(win->ee);
+ if (sd->ee) sd->xwin = ecore_evas_software_x11_window_get(sd->ee);
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
@@ -945,72 +1303,65 @@ _elm_win_xwindow_get(Elm_Win *win)
ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
ENGINE_COMPARE(ELM_OPENGL_SDL) ||
- ENGINE_COMPARE(ELM_OPENGL_COCOA))
+ ENGINE_COMPARE(ELM_OPENGL_COCOA))
{
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
{
- if (win->ee) win->xwin = ecore_evas_software_x11_16_window_get(win->ee);
+ if (sd->ee) sd->xwin = ecore_evas_software_x11_16_window_get(sd->ee);
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
{
- if (win->ee) win->xwin = ecore_evas_software_x11_8_window_get(win->ee);
- }
-/* killed
- else if (ENGINE_COMPARE(ELM_XRENDER_X11))
- {
- if (win->ee) win->xwin = ecore_evas_xrender_x11_window_get(win->ee);
+ if (sd->ee) sd->xwin = ecore_evas_software_x11_8_window_get(sd->ee);
}
- */
else if (ENGINE_COMPARE(ELM_OPENGL_X11))
{
- if (win->ee) win->xwin = ecore_evas_gl_x11_window_get(win->ee);
+ if (sd->ee) sd->xwin = ecore_evas_gl_x11_window_get(sd->ee);
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_WIN32))
{
- if (win->ee) win->xwin = (long)ecore_evas_win32_window_get(win->ee);
+ if (sd->ee) sd->xwin = (long)ecore_evas_win32_window_get(sd->ee);
}
#undef ENGINE_COMPARE
}
+
#endif
#ifdef HAVE_ELEMENTARY_X
static void
-_elm_win_xwin_update(Elm_Win *win)
+_elm_win_xwin_update(Elm_Win_Smart_Data *sd)
{
const char *s;
- _elm_win_xwindow_get(win);
- if (win->parent)
+ _elm_win_xwindow_get(sd);
+ if (sd->parent)
{
- Elm_Win *win2;
-
- win2 = elm_widget_data_get(win->parent);
- if (win2)
+ ELM_WIN_DATA_GET(sd->parent, sdp);
+ if (sdp)
{
- if (win->xwin)
- ecore_x_icccm_transient_for_set(win->xwin, win2->xwin);
+ if (sd->xwin)
+ ecore_x_icccm_transient_for_set(sd->xwin, sdp->xwin);
}
}
- if (!win->xwin) return; /* nothing more to do */
+ if (!sd->xwin) return; /* nothing more to do */
- s = win->title;
+ s = sd->title;
if (!s) s = _elm_appname;
if (!s) s = "";
- if (win->icon_name) s = win->icon_name;
- ecore_x_icccm_icon_name_set(win->xwin, s);
- ecore_x_netwm_icon_name_set(win->xwin, s);
+ if (sd->icon_name) s = sd->icon_name;
+ ecore_x_icccm_icon_name_set(sd->xwin, s);
+ ecore_x_netwm_icon_name_set(sd->xwin, s);
- s = win->role;
- if (s) ecore_x_icccm_window_role_set(win->xwin, s);
+ s = sd->role;
+ if (s) ecore_x_icccm_window_role_set(sd->xwin, s);
// set window icon
- if (win->icon)
+ if (sd->icon)
{
void *data;
- data = evas_object_image_data_get(win->icon, EINA_FALSE);
+ data = evas_object_image_data_get(sd->icon, EINA_FALSE);
if (data)
{
Ecore_X_Icon ic;
@@ -1018,8 +1369,8 @@ _elm_win_xwin_update(Elm_Win *win)
unsigned char *p;
unsigned int *p2;
- evas_object_image_size_get(win->icon, &w, &h);
- stride = evas_object_image_stride_get(win->icon);
+ evas_object_image_size_get(sd->icon, &w, &h);
+ stride = evas_object_image_stride_get(sd->icon);
if ((w > 0) && (h > 0) &&
(stride >= (int)(w * sizeof(unsigned int))))
{
@@ -1041,84 +1392,102 @@ _elm_win_xwin_update(Elm_Win *win)
}
p += (stride - (w * sizeof(unsigned int)));
}
- ecore_x_netwm_icons_set(win->xwin, &ic, 1);
+ ecore_x_netwm_icons_set(sd->xwin, &ic, 1);
free(ic.data);
}
}
- evas_object_image_data_set(win->icon, data);
+ evas_object_image_data_set(sd->icon, data);
}
}
- switch (win->type)
+ switch (sd->type)
{
case ELM_WIN_BASIC:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_NORMAL);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_NORMAL);
+ break;
+
case ELM_WIN_DIALOG_BASIC:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DIALOG);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_DIALOG);
+ break;
+
case ELM_WIN_DESKTOP:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DESKTOP);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_DESKTOP);
+ break;
+
case ELM_WIN_DOCK:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DOCK);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_DOCK);
+ break;
+
case ELM_WIN_TOOLBAR:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_TOOLBAR);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_TOOLBAR);
+ break;
+
case ELM_WIN_MENU:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_MENU);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_MENU);
+ break;
+
case ELM_WIN_UTILITY:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_UTILITY);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_UTILITY);
+ break;
+
case ELM_WIN_SPLASH:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_SPLASH);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_SPLASH);
+ break;
+
case ELM_WIN_DROPDOWN_MENU:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DROPDOWN_MENU);
- break;
+ ecore_x_netwm_window_type_set
+ (sd->xwin, ECORE_X_WINDOW_TYPE_DROPDOWN_MENU);
+ break;
+
case ELM_WIN_POPUP_MENU:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_POPUP_MENU);
- break;
+ ecore_x_netwm_window_type_set
+ (sd->xwin, ECORE_X_WINDOW_TYPE_POPUP_MENU);
+ break;
+
case ELM_WIN_TOOLTIP:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_TOOLTIP);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_TOOLTIP);
+ break;
+
case ELM_WIN_NOTIFICATION:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
- break;
+ ecore_x_netwm_window_type_set
+ (sd->xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+ break;
+
case ELM_WIN_COMBO:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_COMBO);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_COMBO);
+ break;
+
case ELM_WIN_DND:
- ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DND);
- break;
+ ecore_x_netwm_window_type_set(sd->xwin, ECORE_X_WINDOW_TYPE_DND);
+ break;
+
default:
- break;
+ break;
}
ecore_x_e_virtual_keyboard_state_set
- (win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode);
- if (win->indmode == ELM_WIN_INDICATOR_SHOW)
+ (sd->xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
+ if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
ecore_x_e_illume_indicator_state_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
- else if (win->indmode == ELM_WIN_INDICATOR_HIDE)
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
+ else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
ecore_x_e_illume_indicator_state_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
}
+
#endif
static void
-_elm_win_eval_subobjs(Evas_Object *obj)
+_elm_win_resize_objects_eval(Evas_Object *obj)
{
const Eina_List *l;
const Evas_Object *child;
- Elm_Win *win = elm_widget_data_get(obj);
+ ELM_WIN_DATA_GET(obj, sd);
Evas_Coord w, h, minw = -1, minh = -1, maxw = -1, maxh = -1;
int xx = 1, xy = 1;
double wx, wy;
- EINA_LIST_FOREACH(win->subobjs, l, child)
+ EINA_LIST_FOREACH (sd->resize_objs, l, child)
{
evas_object_size_hint_weight_get(child, &wx, &wy);
if (wx == 0.0) xx = 0;
@@ -1134,9 +1503,11 @@ _elm_win_eval_subobjs(Evas_Object *obj)
if (w < 1) w = -1;
if (h < 1) h = -1;
if (maxw == -1) maxw = w;
- else if ((w > 0) && (w < maxw)) maxw = w;
+ else if ((w > 0) && (w < maxw))
+ maxw = w;
if (maxh == -1) maxh = h;
- else if ((h > 0) && (h < maxh)) maxh = h;
+ else if ((h > 0) && (h < maxh))
+ maxh = h;
}
if (!xx) maxw = minw;
else maxw = 32767;
@@ -1153,17 +1524,25 @@ _elm_win_eval_subobjs(Evas_Object *obj)
}
static void
-_elm_win_subobj_callback_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_on_resize_obj_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
{
- Elm_Win *win = elm_widget_data_get(data);
- win->subobjs = eina_list_remove(win->subobjs, obj);
- _elm_win_eval_subobjs(win->win_obj);
+ ELM_WIN_DATA_GET(data, sd);
+
+ sd->resize_objs = eina_list_remove(sd->resize_objs, obj);
+
+ _elm_win_resize_objects_eval(data);
}
static void
-_elm_win_subobj_callback_changed_size_hints(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+_elm_win_on_resize_obj_changed_size_hints(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
{
- _elm_win_eval_subobjs(data);
+ _elm_win_resize_objects_eval(data);
}
void
@@ -1174,19 +1553,20 @@ _elm_win_shutdown(void)
}
void
-_elm_win_rescale(Elm_Theme *th, Eina_Bool use_theme)
+_elm_win_rescale(Elm_Theme *th,
+ Eina_Bool use_theme)
{
const Eina_List *l;
Evas_Object *obj;
if (!use_theme)
{
- EINA_LIST_FOREACH(_elm_win_list, l, obj)
+ EINA_LIST_FOREACH (_elm_win_list, l, obj)
elm_widget_theme(obj);
}
else
{
- EINA_LIST_FOREACH(_elm_win_list, l, obj)
+ EINA_LIST_FOREACH (_elm_win_list, l, obj)
elm_widget_theme_specific(obj, th, EINA_FALSE);
}
}
@@ -1197,23 +1577,25 @@ _elm_win_translate(void)
const Eina_List *l;
Evas_Object *obj;
- EINA_LIST_FOREACH(_elm_win_list, l, obj)
- elm_widget_translate(obj);
+ EINA_LIST_FOREACH (_elm_win_list, l, obj)
+ elm_widget_translate(obj);
}
#ifdef HAVE_ELEMENTARY_X
static Eina_Bool
-_elm_win_client_message(void *data, int type __UNUSED__, void *event)
+_elm_win_client_message(void *data,
+ int type __UNUSED__,
+ void *event)
{
- Elm_Win *win = data;
+ Elm_Win_Smart_Data *sd = data;
Ecore_X_Event_Client_Message *e = event;
if (e->format != 32) return ECORE_CALLBACK_PASS_ON;
if (e->message_type == ECORE_X_ATOM_E_COMP_FLUSH)
{
- if ((unsigned)e->data.l[0] == win->xwin)
+ if ((unsigned)e->data.l[0] == sd->xwin)
{
- Evas *evas = evas_object_evas_get(win->win_obj);
+ Evas *evas = evas_object_evas_get(ELM_WIDGET_DATA(sd)->obj);
if (evas)
{
edje_file_cache_flush();
@@ -1225,9 +1607,9 @@ _elm_win_client_message(void *data, int type __UNUSED__, void *event)
}
else if (e->message_type == ECORE_X_ATOM_E_COMP_DUMP)
{
- if ((unsigned)e->data.l[0] == win->xwin)
+ if ((unsigned)e->data.l[0] == sd->xwin)
{
- Evas *evas = evas_object_evas_get(win->win_obj);
+ Evas *evas = evas_object_evas_get(ELM_WIDGET_DATA(sd)->obj);
if (evas)
{
edje_file_cache_flush();
@@ -1240,470 +1622,183 @@ _elm_win_client_message(void *data, int type __UNUSED__, void *event)
}
return ECORE_CALLBACK_PASS_ON;
}
-#endif
-
-static void
-_elm_win_focus_target_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Win *win = data;
-
- win->focus_highlight.geometry_changed = EINA_TRUE;
- _elm_win_focus_highlight_reconfigure_job_start(win);
-}
-
-static void
-_elm_win_focus_target_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Win *win = data;
-
- win->focus_highlight.geometry_changed = EINA_TRUE;
- _elm_win_focus_highlight_reconfigure_job_start(win);
-}
-
-static void
-_elm_win_focus_target_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- Elm_Win *win = data;
-
- win->focus_highlight.cur.target = NULL;
-
- _elm_win_focus_highlight_reconfigure_job_start(win);
-}
-
-static void
-_elm_win_focus_target_callbacks_add(Elm_Win *win)
-{
- Evas_Object *obj = win->focus_highlight.cur.target;
-
- evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
- _elm_win_focus_target_move, win);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
- _elm_win_focus_target_resize, win);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
- _elm_win_focus_target_del, win);
-}
-static void
-_elm_win_focus_target_callbacks_del(Elm_Win *win)
-{
- Evas_Object *obj = win->focus_highlight.cur.target;
-
- evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE,
- _elm_win_focus_target_move, win);
- evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE,
- _elm_win_focus_target_resize, win);
- evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
- _elm_win_focus_target_del, win);
-}
-
-static Evas_Object *
-_elm_win_focus_target_get(Evas_Object *obj)
-{
- Evas_Object *o = obj;
-
- do
- {
- if (elm_widget_is(o))
- {
- if (!elm_widget_highlight_ignore_get(o))
- break;
- o = elm_widget_parent_get(o);
- if (!o)
- o = evas_object_smart_parent_get(o);
- }
- else
- {
- o = elm_widget_parent_widget_get(o);
- if (!o)
- o = evas_object_smart_parent_get(o);
- }
- }
- while (o);
-
- return o;
-}
+#endif
static void
-_elm_win_object_focus_in(void *data, Evas *e __UNUSED__, void *event_info)
+_elm_win_focus_highlight_hide(void *data __UNUSED__,
+ Evas_Object *obj,
+ const char *emission __UNUSED__,
+ const char *source __UNUSED__)
{
- Evas_Object *obj = event_info, *target;
- Elm_Win *win = data;
-
- if (win->focus_highlight.cur.target == obj)
- return;
-
- target = _elm_win_focus_target_get(obj);
- win->focus_highlight.cur.target = target;
- if (elm_widget_highlight_in_theme_get(target))
- win->focus_highlight.cur.handled = EINA_TRUE;
- else
- _elm_win_focus_target_callbacks_add(win);
-
- _elm_win_focus_highlight_reconfigure_job_start(win);
+ evas_object_hide(obj);
}
static void
-_elm_win_object_focus_out(void *data, Evas *e __UNUSED__, void *event_info __UNUSED__)
+_elm_win_focus_highlight_anim_end(void *data,
+ Evas_Object *obj,
+ const char *emission __UNUSED__,
+ const char *source __UNUSED__)
{
- Elm_Win *win = data;
-
- if (!win->focus_highlight.cur.target)
- return;
-
- if (!win->focus_highlight.cur.handled)
- _elm_win_focus_target_callbacks_del(win);
- win->focus_highlight.cur.target = NULL;
- win->focus_highlight.cur.handled = EINA_FALSE;
-
- _elm_win_focus_highlight_reconfigure_job_start(win);
-}
+ Elm_Win_Smart_Data *sd = data;
-static void
-_elm_win_focus_highlight_hide(void *data __UNUSED__, Evas_Object *obj, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- evas_object_hide(obj);
+ _elm_win_focus_highlight_simple_setup(sd, obj);
}
static void
-_elm_win_focus_highlight_init(Elm_Win *win)
+_elm_win_focus_highlight_init(Elm_Win_Smart_Data *sd)
{
- evas_event_callback_add(win->evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
- _elm_win_object_focus_in, win);
- evas_event_callback_add(win->evas,
+ evas_event_callback_add(sd->evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
+ _elm_win_object_focus_in, sd);
+ evas_event_callback_add(sd->evas,
EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT,
- _elm_win_object_focus_out, win);
+ _elm_win_object_focus_out, sd);
- win->focus_highlight.cur.target = evas_focus_get(win->evas);
+ sd->focus_highlight.cur.target = evas_focus_get(sd->evas);
- win->focus_highlight.top = edje_object_add(win->evas);
- win->focus_highlight.changed_theme = EINA_TRUE;
- edje_object_signal_callback_add(win->focus_highlight.top,
+ sd->focus_highlight.top = edje_object_add(sd->evas);
+ sd->focus_highlight.changed_theme = EINA_TRUE;
+ edje_object_signal_callback_add(sd->focus_highlight.top,
"elm,action,focus,hide,end", "",
_elm_win_focus_highlight_hide, NULL);
- edje_object_signal_callback_add(win->focus_highlight.top,
+ edje_object_signal_callback_add(sd->focus_highlight.top,
"elm,action,focus,anim,end", "",
- _elm_win_focus_highlight_anim_end, win);
- _elm_win_focus_highlight_reconfigure_job_start(win);
-}
-
-static void
-_elm_win_focus_highlight_shutdown(Elm_Win *win)
-{
- _elm_win_focus_highlight_reconfigure_job_stop(win);
- if (win->focus_highlight.cur.target)
- {
- _elm_win_focus_target_callbacks_del(win);
- win->focus_highlight.cur.target = NULL;
- }
- if (win->focus_highlight.top)
- {
- evas_object_del(win->focus_highlight.top);
- win->focus_highlight.top = NULL;
- }
-
- evas_event_callback_del_full(win->evas,
- EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
- _elm_win_object_focus_in, win);
- evas_event_callback_del_full(win->evas,
- EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT,
- _elm_win_object_focus_out, win);
-}
-
-static void
-_elm_win_focus_highlight_visible_set(Elm_Win *win, Eina_Bool visible)
-{
- Evas_Object *top;
-
- top = win->focus_highlight.top;
- if (visible)
- {
- if (top)
- {
- evas_object_show(top);
- edje_object_signal_emit(top, "elm,action,focus,show", "elm");
- }
- }
- else
- {
- if (top)
- edje_object_signal_emit(top, "elm,action,focus,hide", "elm");
- }
-}
-
-static void
-_elm_win_focus_highlight_reconfigure_job(void *data)
-{
- _elm_win_focus_highlight_reconfigure((Elm_Win *)data);
-}
-
-static void
-_elm_win_focus_highlight_reconfigure_job_start(Elm_Win *win)
-{
- if (win->focus_highlight.reconf_job)
- ecore_job_del(win->focus_highlight.reconf_job);
- win->focus_highlight.reconf_job = ecore_job_add(
- _elm_win_focus_highlight_reconfigure_job, win);
-}
-
-static void
-_elm_win_focus_highlight_reconfigure_job_stop(Elm_Win *win)
-{
- if (win->focus_highlight.reconf_job)
- ecore_job_del(win->focus_highlight.reconf_job);
- win->focus_highlight.reconf_job = NULL;
-}
-
-static void
-_elm_win_focus_highlight_simple_setup(Elm_Win *win, Evas_Object *obj)
-{
- Evas_Object *clip, *target = win->focus_highlight.cur.target;
- Evas_Coord x, y, w, h;
-
- clip = evas_object_clip_get(target);
- evas_object_geometry_get(target, &x, &y, &w, &h);
-
- evas_object_move(obj, x, y);
- evas_object_resize(obj, w, h);
- evas_object_clip_set(obj, clip);
-}
-
-static void
-_elm_win_focus_highlight_anim_setup(Elm_Win *win, Evas_Object *obj)
-{
- Evas_Coord tx, ty, tw, th;
- Evas_Coord w, h, px, py, pw, ph;
- Edje_Message_Int_Set *m;
- Evas_Object *previous = win->focus_highlight.prev.target;
- Evas_Object *target = win->focus_highlight.cur.target;
-
- evas_object_geometry_get(win->win_obj, NULL, NULL, &w, &h);
- evas_object_geometry_get(target, &tx, &ty, &tw, &th);
- evas_object_geometry_get(previous, &px, &py, &pw, &ph);
- evas_object_move(obj, 0, 0);
- evas_object_resize(obj, tw, th);
- evas_object_clip_unset(obj);
-
- m = alloca(sizeof(*m) + (sizeof(int) * 8));
- m->count = 8;
- m->val[0] = px;
- m->val[1] = py;
- m->val[2] = pw;
- m->val[3] = ph;
- m->val[4] = tx;
- m->val[5] = ty;
- m->val[6] = tw;
- m->val[7] = th;
- edje_object_message_send(obj, EDJE_MESSAGE_INT_SET, 1, m);
-}
-
-static void
-_elm_win_focus_highlight_anim_end(void *data, Evas_Object *obj, const char *emission __UNUSED__, const char *source __UNUSED__)
-{
- Elm_Win *win = data;
- _elm_win_focus_highlight_simple_setup(win, obj);
+ _elm_win_focus_highlight_anim_end, sd);
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
}
static void
-_elm_win_focus_highlight_reconfigure(Elm_Win *win)
+_elm_win_frame_cb_move_start(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *sig __UNUSED__,
+ const char *source __UNUSED__)
{
- Evas_Object *target = win->focus_highlight.cur.target;
- Evas_Object *previous = win->focus_highlight.prev.target;
- Evas_Object *top = win->focus_highlight.top;
- Eina_Bool visible_changed;
- Eina_Bool common_visible;
- const char *sig = NULL;
-
- _elm_win_focus_highlight_reconfigure_job_stop(win);
-
- visible_changed = (win->focus_highlight.cur.visible !=
- win->focus_highlight.prev.visible);
+ Elm_Win_Smart_Data *sd;
- if ((target == previous) && (!visible_changed) &&
- (!win->focus_highlight.geometry_changed))
- return;
-
- if ((previous) && (win->focus_highlight.prev.handled))
- elm_widget_signal_emit(previous, "elm,action,focus_highlight,hide", "elm");
-
- if (!target)
- common_visible = EINA_FALSE;
- else if (win->focus_highlight.cur.handled)
- {
- common_visible = EINA_FALSE;
- if (win->focus_highlight.cur.visible)
- sig = "elm,action,focus_highlight,show";
- else
- sig = "elm,action,focus_highlight,hide";
- }
- else
- common_visible = win->focus_highlight.cur.visible;
-
- _elm_win_focus_highlight_visible_set(win, common_visible);
- if (sig)
- elm_widget_signal_emit(target, sig, "elm");
-
- if ((!target) || (!common_visible) || (win->focus_highlight.cur.handled))
- goto the_end;
-
- if (win->focus_highlight.changed_theme)
- {
- const char *str;
- if (win->focus_highlight.style)
- str = win->focus_highlight.style;
- else
- str = "default";
- _elm_theme_object_set(win->win_obj, top, "focus_highlight", "top",
- str);
- win->focus_highlight.changed_theme = EINA_FALSE;
-
- if (_elm_config->focus_highlight_animate)
- {
- str = edje_object_data_get(win->focus_highlight.top, "animate");
- win->focus_highlight.top_animate = ((str) && (!strcmp(str, "on")));
- }
- }
-
- if ((win->focus_highlight.top_animate) && (previous) &&
- (!win->focus_highlight.prev.handled))
- _elm_win_focus_highlight_anim_setup(win, top);
- else
- _elm_win_focus_highlight_simple_setup(win, top);
- evas_object_raise(top);
-
-the_end:
- win->focus_highlight.geometry_changed = EINA_FALSE;
- win->focus_highlight.prev = win->focus_highlight.cur;
-}
-
-static void
-_elm_win_frame_add(Elm_Win *win, const char *style)
-{
- evas_output_framespace_set(win->evas, 0, 22, 0, 26);
-
- win->frame_obj = edje_object_add(win->evas);
- _elm_theme_set(NULL, win->frame_obj, "border", "base", style);
- evas_object_is_frame_object_set(win->frame_obj, EINA_TRUE);
- evas_object_move(win->frame_obj, 0, 0);
- evas_object_resize(win->frame_obj, 1, 1);
-
- 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,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",
- "elm", _elm_win_frame_cb_maximize, win);
- edje_object_signal_callback_add(win->frame_obj, "elm,action,close",
- "elm", _elm_win_frame_cb_close, win);
-}
-
-static void
-_elm_win_frame_cb_move_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
-{
- Elm_Win *win;
-
- if (!(win = data)) return;
+ if (!(sd = data)) return;
/* FIXME: Change mouse pointer */
- /* NB: Wayland handles moving surfaces by itself so we cannot
- * specify a specific x/y we want. Instead, we will pass in the
- * existing x/y values so they can be recorded as 'previous' position.
- * The new position will get updated automatically when the move is
- * finished */
+ /* NB: Wayland handles moving surfaces by itself so we cannot
+ * specify a specific x/y we want. Instead, we will pass in the
+ * existing x/y values so they can be recorded as 'previous'
+ * position. The new position will get updated automatically when
+ * the move is finished */
- ecore_evas_wayland_move(win->ee, win->screen.x, win->screen.y);
+ ecore_evas_wayland_move(sd->ee, sd->screen.x, sd->screen.y);
}
static void
-_elm_win_frame_cb_resize_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source)
+_elm_win_frame_cb_resize_start(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *sig __UNUSED__,
+ const char *source)
{
- Elm_Win *win;
+ Elm_Win_Smart_Data *sd;
- if (!(win = data)) return;
- if (win->resizing) return;
- win->resizing = EINA_TRUE;
+ if (!(sd = data)) return;
+ if (sd->resizing) return;
+
+ sd->resizing = EINA_TRUE;
/* FIXME: Change mouse pointer */
if (!strcmp(source, "elm.event.resize.t"))
- win->resize_location = 1;
+ sd->resize_location = 1;
else if (!strcmp(source, "elm.event.resize.b"))
- win->resize_location = 2;
+ sd->resize_location = 2;
else if (!strcmp(source, "elm.event.resize.l"))
- win->resize_location = 4;
+ sd->resize_location = 4;
else if (!strcmp(source, "elm.event.resize.r"))
- win->resize_location = 8;
+ sd->resize_location = 8;
else if (!strcmp(source, "elm.event.resize.tl"))
- win->resize_location = 5;
+ sd->resize_location = 5;
else if (!strcmp(source, "elm.event.resize.tr"))
- win->resize_location = 9;
+ sd->resize_location = 9;
else if (!strcmp(source, "elm.event.resize.bl"))
- win->resize_location = 6;
+ sd->resize_location = 6;
else if (!strcmp(source, "elm.event.resize.br"))
- win->resize_location = 10;
+ sd->resize_location = 10;
else
- win->resize_location = 0;
+ sd->resize_location = 0;
- if (win->resize_location > 0)
- ecore_evas_wayland_resize(win->ee, win->resize_location);
+ if (sd->resize_location > 0)
+ ecore_evas_wayland_resize(sd->ee, sd->resize_location);
}
static void
-_elm_win_frame_cb_minimize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
+_elm_win_frame_cb_minimize(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *sig __UNUSED__,
+ const char *source __UNUSED__)
{
- Elm_Win *win;
+ Elm_Win_Smart_Data *sd;
- if (!(win = data)) return;
- win->iconified = EINA_TRUE;
- ecore_evas_iconified_set(win->ee, EINA_TRUE);
+ if (!(sd = data)) return;
+ sd->iconified = EINA_TRUE;
+ ecore_evas_iconified_set(sd->ee, EINA_TRUE);
}
static void
-_elm_win_frame_cb_maximize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
+_elm_win_frame_cb_maximize(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *sig __UNUSED__,
+ const char *source __UNUSED__)
{
- Elm_Win *win;
+ Elm_Win_Smart_Data *sd;
- if (!(win = data)) return;
- if (win->maximized) win->maximized = EINA_FALSE;
- else win->maximized = EINA_TRUE;
- ecore_evas_maximized_set(win->ee, win->maximized);
+ if (!(sd = data)) return;
+ if (sd->maximized) sd->maximized = EINA_FALSE;
+ else sd->maximized = EINA_TRUE;
+ ecore_evas_maximized_set(sd->ee, sd->maximized);
}
static void
-_elm_win_frame_cb_close(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
+_elm_win_frame_cb_close(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *sig __UNUSED__,
+ const char *source __UNUSED__)
{
- Elm_Win *win;
+ Elm_Win_Smart_Data *sd;
- if (!(win = data)) return;
- evas_object_del(win->win_obj);
+ if (!(sd = data)) return;
+ evas_object_del(ELM_WIDGET_DATA(sd)->obj);
}
-/*
static void
-_elm_win_pointer_add(Elm_Win *win, const char *style)
+_elm_win_frame_add(Elm_Win_Smart_Data *sd,
+ const char *style)
{
- int mw, mh;
-
- return;
+ evas_output_framespace_set(sd->evas, 0, 22, 0, 26);
- win->pointer.ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 32, 32, 0);
- ecore_evas_resize(win->pointer.ee, 32, 32);
+ sd->frame_obj = edje_object_add(sd->evas);
+ elm_widget_theme_object_set
+ (ELM_WIDGET_DATA(sd)->obj, sd->frame_obj, "border", "base", style);
+ evas_object_is_frame_object_set(sd->frame_obj, EINA_TRUE);
+ evas_object_move(sd->frame_obj, 0, 0);
+ evas_object_resize(sd->frame_obj, 1, 1);
- win->pointer.evas = ecore_evas_get(win->ee);
-
- win->pointer.obj = edje_object_add(win->pointer.evas);
- _elm_theme_set(NULL, win->pointer.obj, "pointer", "base", style);
- edje_object_size_min_calc(win->pointer.obj, &mw, &mh);
- evas_object_move(win->pointer.obj, 0, 0);
- evas_object_resize(win->pointer.obj, 32, 32);
- evas_object_show(win->pointer.obj);
+ edje_object_signal_callback_add
+ (sd->frame_obj, "elm,action,move,start", "elm",
+ _elm_win_frame_cb_move_start, sd);
+ edje_object_signal_callback_add
+ (sd->frame_obj, "elm,action,resize,start", "*",
+ _elm_win_frame_cb_resize_start, sd);
+ edje_object_signal_callback_add
+ (sd->frame_obj, "elm,action,minimize", "elm",
+ _elm_win_frame_cb_minimize, sd);
+ edje_object_signal_callback_add
+ (sd->frame_obj, "elm,action,maximize", "elm",
+ _elm_win_frame_cb_maximize, sd);
+ edje_object_signal_callback_add
+ (sd->frame_obj, "elm,action,close", "elm", _elm_win_frame_cb_close, sd);
}
-*/
#ifdef ELM_DEBUG
static void
-_debug_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
+_debug_key_down(void *data __UNUSED__,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info)
{
Evas_Event_Key_Down *ev = event_info;
@@ -1717,187 +1812,192 @@ _debug_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, voi
printf("Tree graph generated.\n");
elm_object_tree_dot_dump(obj, "./dump.dot");
}
+
#endif
static void
-_win_img_hide(void *data,
- Evas *e __UNUSED__,
+_win_img_hide(void *data,
+ Evas *e __UNUSED__,
Evas_Object *obj __UNUSED__,
- void *event_info __UNUSED__)
+ void *event_info __UNUSED__)
{
- Elm_Win *win = data;
+ Elm_Win_Smart_Data *sd = data;
- elm_widget_focus_hide_handle(win->win_obj);
+ elm_widget_focus_hide_handle(ELM_WIDGET_DATA(sd)->obj);
}
static void
-_win_img_mouse_up(void *data,
- Evas *e __UNUSED__,
+_win_img_mouse_up(void *data,
+ Evas *e __UNUSED__,
Evas_Object *obj __UNUSED__,
- void *event_info)
+ void *event_info)
{
- Elm_Win *win = data;
+ Elm_Win_Smart_Data *sd = data;
Evas_Event_Mouse_Up *ev = event_info;
if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
- elm_widget_focus_mouse_up_handle(win->win_obj);
+ elm_widget_focus_mouse_up_handle(ELM_WIDGET_DATA(sd)->obj);
}
static void
-_win_img_focus_in(void *data,
- Evas *e __UNUSED__,
+_win_img_focus_in(void *data,
+ Evas *e __UNUSED__,
Evas_Object *obj __UNUSED__,
- void *event_info __UNUSED__)
+ void *event_info __UNUSED__)
{
- Elm_Win *win = data;
- elm_widget_focus_steal(win->win_obj);
+ Elm_Win_Smart_Data *sd = data;
+ elm_widget_focus_steal(ELM_WIDGET_DATA(sd)->obj);
}
static void
-_win_img_focus_out(void *data,
- Evas *e __UNUSED__,
+_win_img_focus_out(void *data,
+ Evas *e __UNUSED__,
Evas_Object *obj __UNUSED__,
- void *event_info __UNUSED__)
+ void *event_info __UNUSED__)
+{
+ Elm_Win_Smart_Data *sd = data;
+ elm_widget_focused_object_clear(ELM_WIDGET_DATA(sd)->obj);
+}
+
+static void
+_win_inlined_image_set(Elm_Win_Smart_Data *sd)
{
- Elm_Win *win = data;
- elm_widget_focused_object_clear(win->win_obj);
+ evas_object_image_alpha_set(sd->img_obj, EINA_FALSE);
+ evas_object_image_filled_set(sd->img_obj, EINA_TRUE);
+
+ evas_object_event_callback_add
+ (sd->img_obj, EVAS_CALLBACK_DEL, _elm_win_on_img_obj_del, sd);
+ evas_object_event_callback_add
+ (sd->img_obj, EVAS_CALLBACK_HIDE, _win_img_hide, sd);
+ evas_object_event_callback_add
+ (sd->img_obj, EVAS_CALLBACK_MOUSE_UP, _win_img_mouse_up, sd);
+ evas_object_event_callback_add
+ (sd->img_obj, EVAS_CALLBACK_FOCUS_IN, _win_img_focus_in, sd);
+ evas_object_event_callback_add
+ (sd->img_obj, EVAS_CALLBACK_FOCUS_OUT, _win_img_focus_out, sd);
}
static void
-_win_inlined_image_set(Elm_Win *win)
+_elm_win_on_icon_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
- evas_object_image_alpha_set(win->img_obj, EINA_FALSE);
- evas_object_image_filled_set(win->img_obj, EINA_TRUE);
- evas_object_event_callback_add(win->img_obj, EVAS_CALLBACK_DEL,
- _elm_win_obj_callback_img_obj_del, win);
+ Elm_Win_Smart_Data *sd = data;
- evas_object_event_callback_add(win->img_obj, EVAS_CALLBACK_HIDE,
- _win_img_hide, win);
- evas_object_event_callback_add(win->img_obj, EVAS_CALLBACK_MOUSE_UP,
- _win_img_mouse_up, win);
- evas_object_event_callback_add(win->img_obj, EVAS_CALLBACK_FOCUS_IN,
- _win_img_focus_in, win);
- evas_object_event_callback_add(win->img_obj, EVAS_CALLBACK_FOCUS_OUT,
- _win_img_focus_out, win);
+ if (sd->icon == obj) sd->icon = NULL;
}
static void
-_subobj_del(Elm_Win *win, Evas_Object *obj, Evas_Object *subobj)
+_elm_win_smart_add(Evas_Object *obj)
{
- evas_object_event_callback_del_full(subobj,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _elm_win_subobj_callback_changed_size_hints,
- obj);
- evas_object_event_callback_del_full(subobj, EVAS_CALLBACK_DEL,
- _elm_win_subobj_callback_del, obj);
- win->subobjs = eina_list_remove(win->subobjs, subobj);
- _elm_win_eval_subobjs(obj);
+ EVAS_SMART_DATA_ALLOC(obj, Elm_Win_Smart_Data);
+
+ _elm_win_parent_sc->base.add(obj);
+
+ elm_widget_can_focus_set(obj, EINA_TRUE);
+
+ elm_widget_highlight_ignore_set(obj, EINA_TRUE);
}
static void
-_elm_win_obj_icon_callback_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_smart_set_user(Elm_Widget_Smart_Class *sc)
{
- Elm_Win *win = data;
- if (win->icon == obj) win->icon = NULL;
+ sc->base.add = _elm_win_smart_add;
+ sc->base.del = _elm_win_smart_del;
+ sc->base.show = _elm_win_smart_show;
+ sc->base.hide = _elm_win_smart_hide;
+ sc->base.move = _elm_win_smart_move;
+ sc->base.resize = _elm_win_smart_resize;
+
+ sc->focus_next = _elm_win_smart_focus_next;
+ sc->focus_direction = _elm_win_smart_focus_direction;
+ sc->on_focus = _elm_win_smart_on_focus;
+ sc->event = _elm_win_smart_event;
}
EAPI Evas_Object *
-elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
+elm_win_add(Evas_Object *parent,
+ const char *name,
+ Elm_Win_Type type)
{
- Elm_Win *win;
+ Evas *e;
+ Evas_Object *obj;
const Eina_List *l;
const char *fontpath;
- win = ELM_NEW(Elm_Win);
+ Elm_Win_Smart_Data tmp_sd;
-#define FALLBACK_TRY(engine) \
- if (!win->ee) \
- do { \
- CRITICAL(engine " engine creation failed. Trying default."); \
- win->ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL); \
- if (win->ee) \
- elm_config_preferred_engine_set(ecore_evas_engine_name_get(win->ee)); \
- } while (0)
-#define ENGINE_COMPARE(name) (_elm_preferred_engine && !strcmp(_elm_preferred_engine, name))
+ /* just to store some data while trying out to create a canvas */
+ memset(&tmp_sd, 0, sizeof(Elm_Win_Smart_Data));
- win->kbdmode = ELM_WIN_KEYBOARD_UNKNOWN;
- win->indmode = ELM_WIN_INDICATOR_UNKNOWN;
+#define FALLBACK_TRY(engine) \
+ if (!tmp_sd.ee) \
+ do { \
+ CRITICAL(engine " engine creation failed. Trying default."); \
+ tmp_sd.ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL); \
+ if (tmp_sd.ee) \
+ elm_config_preferred_engine_set \
+ (ecore_evas_engine_name_get(tmp_sd.ee)); \
+ } while (0)
+
+#define ENGINE_COMPARE(name) \
+ (_elm_preferred_engine && !strcmp(_elm_preferred_engine, name))
switch (type)
{
case ELM_WIN_INLINED_IMAGE:
if (!parent) break;
{
- Evas *e = evas_object_evas_get(parent);
+ e = evas_object_evas_get(parent);
Ecore_Evas *ee;
+
if (!e) break;
+
ee = ecore_evas_ecore_evas_get(e);
if (!ee) break;
- win->img_obj = ecore_evas_object_image_new(ee);
- if (!win->img_obj) break;
- win->ee = ecore_evas_object_ecore_evas_get(win->img_obj);
- if (win->ee)
+
+ tmp_sd.img_obj = ecore_evas_object_image_new(ee);
+ if (!tmp_sd.img_obj) break;
+
+ tmp_sd.ee = ecore_evas_object_ecore_evas_get(tmp_sd.img_obj);
+ if (!tmp_sd.ee)
{
- _win_inlined_image_set(win);
- break;
+ evas_object_del(tmp_sd.img_obj);
+ tmp_sd.img_obj = NULL;
}
- evas_object_del(win->img_obj);
- win->img_obj = NULL;
}
break;
case ELM_WIN_SOCKET_IMAGE:
- win->ee = ecore_evas_extn_socket_new(1, 1);
+ tmp_sd.ee = ecore_evas_extn_socket_new(1, 1);
break;
default:
if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
{
- win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
-#ifdef HAVE_ELEMENTARY_X
- win->client_message_handler = ecore_event_handler_add
- (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
-#endif
+ tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1);
FALLBACK_TRY("Sofware X11");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_FB))
{
- win->ee = ecore_evas_fb_new(NULL, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1);
FALLBACK_TRY("Sofware FB");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_DIRECTFB))
{
- win->ee = ecore_evas_directfb_new(NULL, 1, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_directfb_new(NULL, 1, 0, 0, 1, 1);
FALLBACK_TRY("Sofware DirectFB");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
{
- win->ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1);
FALLBACK_TRY("Sofware-16");
-#ifdef HAVE_ELEMENTARY_X
- win->client_message_handler = ecore_event_handler_add
- (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
-#endif
- }
+ }
else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
{
- win->ee = ecore_evas_software_x11_8_new(NULL, 0, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_software_x11_8_new(NULL, 0, 0, 0, 1, 1);
FALLBACK_TRY("Sofware-8");
-#ifdef HAVE_ELEMENTARY_X
- win->client_message_handler = ecore_event_handler_add
- (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
-#endif
}
-/* killed
- else if (ENGINE_COMPARE(ELM_XRENDER_X11))
- {
- win->ee = ecore_evas_xrender_x11_new(NULL, 0, 0, 0, 1, 1);
- FALLBACK_TRY("XRender");
-#ifdef HAVE_ELEMENTARY_X
- win->client_message_handler = ecore_event_handler_add
- (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
-#endif
- }
- */
else if (ENGINE_COMPARE(ELM_OPENGL_X11))
{
int opt[10];
@@ -1911,208 +2011,232 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
opt_i++;
}
if (opt_i > 0)
- win->ee = ecore_evas_gl_x11_options_new(NULL, 0, 0, 0, 1, 1, opt);
+ tmp_sd.ee = ecore_evas_gl_x11_options_new
+ (NULL, 0, 0, 0, 1, 1, opt);
else
- win->ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1);
FALLBACK_TRY("OpenGL");
-#ifdef HAVE_ELEMENTARY_X
- win->client_message_handler = ecore_event_handler_add
- (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win);
-#endif
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_WIN32))
{
- win->ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1);
FALLBACK_TRY("Sofware Win32");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
{
- win->ee = ecore_evas_software_wince_gdi_new(NULL, 0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_software_wince_gdi_new(NULL, 0, 0, 1, 1);
FALLBACK_TRY("Sofware-16-WinCE");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_PSL1GHT))
{
- win->ee = ecore_evas_psl1ght_new(NULL, 1, 1);
+ tmp_sd.ee = ecore_evas_psl1ght_new(NULL, 1, 1);
FALLBACK_TRY("PSL1GHT");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_SDL))
{
- win->ee = ecore_evas_sdl_new(NULL, 0, 0, 0, 0, 0, 1);
+ tmp_sd.ee = ecore_evas_sdl_new(NULL, 0, 0, 0, 0, 0, 1);
FALLBACK_TRY("Sofware SDL");
}
else if (ENGINE_COMPARE(ELM_SOFTWARE_16_SDL))
{
- win->ee = ecore_evas_sdl16_new(NULL, 0, 0, 0, 0, 0, 1);
+ tmp_sd.ee = ecore_evas_sdl16_new(NULL, 0, 0, 0, 0, 0, 1);
FALLBACK_TRY("Sofware-16-SDL");
}
else if (ENGINE_COMPARE(ELM_OPENGL_SDL))
{
- win->ee = ecore_evas_gl_sdl_new(NULL, 1, 1, 0, 0);
+ tmp_sd.ee = ecore_evas_gl_sdl_new(NULL, 1, 1, 0, 0);
FALLBACK_TRY("OpenGL SDL");
}
else if (ENGINE_COMPARE(ELM_OPENGL_COCOA))
{
- win->ee = ecore_evas_cocoa_new(NULL, 1, 1, 0, 0);
+ tmp_sd.ee = ecore_evas_cocoa_new(NULL, 1, 1, 0, 0);
FALLBACK_TRY("OpenGL Cocoa");
}
else if (ENGINE_COMPARE(ELM_BUFFER))
{
- win->ee = ecore_evas_buffer_new(1, 1);
+ tmp_sd.ee = ecore_evas_buffer_new(1, 1);
}
else if (ENGINE_COMPARE(ELM_EWS))
{
- win->ee = ecore_evas_ews_new(0, 0, 1, 1);
+ tmp_sd.ee = ecore_evas_ews_new(0, 0, 1, 1);
}
else if (ENGINE_COMPARE(ELM_WAYLAND_SHM))
{
- win->ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 1, 1, 0);
- win->evas = ecore_evas_get(win->ee);
-
- _elm_win_frame_add(win, "default");
-// _elm_win_pointer_add(win, "default");
+ tmp_sd.ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 1, 1, 0);
}
else if (ENGINE_COMPARE(ELM_WAYLAND_EGL))
{
- win->ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 0, 1, 1, 0);
- win->evas = ecore_evas_get(win->ee);
-
- _elm_win_frame_add(win, "default");
-// _elm_win_pointer_add(win, "default");
+ tmp_sd.ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 0, 1, 1, 0);
}
else if (!strncmp(_elm_preferred_engine, "shot:", 5))
{
- win->ee = ecore_evas_buffer_new(1, 1);
- ecore_evas_manual_render_set(win->ee, EINA_TRUE);
- win->shot.info = eina_stringshare_add(_elm_preferred_engine + 5);
- _shot_init(win);
+ tmp_sd.ee = ecore_evas_buffer_new(1, 1);
+ ecore_evas_manual_render_set(tmp_sd.ee, EINA_TRUE);
+ tmp_sd.shot.info = eina_stringshare_add
+ (_elm_preferred_engine + 5);
}
#undef FALLBACK_TRY
break;
}
- if (!win->ee)
+ if (!tmp_sd.ee)
{
ERR("Cannot create window.");
- free(win);
return NULL;
}
+
+ obj = evas_object_smart_add
+ (ecore_evas_get(tmp_sd.ee), _elm_win_smart_class_new());
+
+ ELM_WIN_DATA_GET(obj, sd);
+
+ /* copying possibly altered fields back */
+#define SD_CPY(_field) \
+ do \
+ { \
+ sd->_field = tmp_sd._field; \
+ } while (0)
+
+ SD_CPY(ee);
+ SD_CPY(img_obj);
+ SD_CPY(shot.info);
+#undef SD_CPY
+
+ /* complementary actions, which depend on final smart data
+ * pointer */
+ if (type == ELM_WIN_INLINED_IMAGE)
+ _win_inlined_image_set(sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
+ else if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
+ sd->client_message_handler = ecore_event_handler_add
+ (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+ else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
+ sd->client_message_handler = ecore_event_handler_add
+ (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+ else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
+ sd->client_message_handler = ecore_event_handler_add
+ (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+ else if (ENGINE_COMPARE(ELM_OPENGL_X11))
+ sd->client_message_handler = ecore_event_handler_add
+ (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
#endif
+
+ else if (ENGINE_COMPARE(ELM_WAYLAND_SHM))
+ _elm_win_frame_add(sd, "default");
+ else if (ENGINE_COMPARE(ELM_WAYLAND_EGL))
+ _elm_win_frame_add(sd, "default");
+ else if (!strncmp(_elm_preferred_engine, "shot:", 5))
+ _shot_init(sd);
+
+ sd->kbdmode = ELM_WIN_KEYBOARD_UNKNOWN;
+ sd->indmode = ELM_WIN_INDICATOR_UNKNOWN;
+
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwindow_get(sd);
+#endif
+
if ((_elm_config->bgpixmap) && (!_elm_config->compositing))
- ecore_evas_avoid_damage_set(win->ee, ECORE_EVAS_AVOID_DAMAGE_EXPOSE);
+ ecore_evas_avoid_damage_set(sd->ee, ECORE_EVAS_AVOID_DAMAGE_EXPOSE);
// bg pixmap done by x - has other issues like can be redrawn by x before it
// is filled/ready by app
- // ecore_evas_avoid_damage_set(win->ee, ECORE_EVAS_AVOID_DAMAGE_BUILT_IN);
-
- win->type = type;
- win->parent = parent;
- if (win->parent)
- evas_object_event_callback_add(win->parent, EVAS_CALLBACK_DEL,
- _elm_win_obj_callback_parent_del, win);
-
- win->evas = ecore_evas_get(win->ee);
- win->win_obj = elm_widget_add(win->evas);
- elm_widget_type_set(win->win_obj, "win");
- ELM_SET_WIDTYPE(widtype, "win");
- elm_widget_data_set(win->win_obj, win);
- elm_widget_event_hook_set(win->win_obj, _elm_win_event_cb);
- elm_widget_on_focus_hook_set(win->win_obj, _elm_win_on_focus_hook, NULL);
- elm_widget_can_focus_set(win->win_obj, EINA_TRUE);
- elm_widget_highlight_ignore_set(win->win_obj, EINA_TRUE);
- elm_widget_focus_next_hook_set(win->win_obj, _elm_win_focus_next_hook);
- elm_widget_focus_direction_hook_set(win->win_obj, _elm_win_focus_direction_hook);
- evas_object_color_set(win->win_obj, 0, 0, 0, 0);
- evas_object_move(win->win_obj, 0, 0);
- evas_object_resize(win->win_obj, 1, 1);
- evas_object_layer_set(win->win_obj, 50);
- evas_object_pass_events_set(win->win_obj, EINA_TRUE);
-
- if (win->frame_obj)
- {
- evas_object_clip_set(win->win_obj, win->frame_obj);
- evas_object_stack_below(win->frame_obj, win->win_obj);
+ // ecore_evas_avoid_damage_set(sd->ee, ECORE_EVAS_AVOID_DAMAGE_BUILT_IN);
+
+ sd->type = type;
+ sd->parent = parent;
+
+ if (sd->parent)
+ evas_object_event_callback_add
+ (sd->parent, EVAS_CALLBACK_DEL, _elm_win_on_parent_del, sd);
+
+ sd->evas = ecore_evas_get(sd->ee);
+
+ evas_object_color_set(obj, 0, 0, 0, 0);
+ evas_object_move(obj, 0, 0);
+ evas_object_resize(obj, 1, 1);
+ evas_object_layer_set(obj, 50);
+ evas_object_pass_events_set(obj, EINA_TRUE);
+
+ if (sd->frame_obj)
+ {
+ evas_object_clip_set(obj, sd->frame_obj);
+ evas_object_stack_below(sd->frame_obj, obj);
}
if (type == ELM_WIN_INLINED_IMAGE)
- elm_widget_parent2_set(win->win_obj, parent);
- ecore_evas_object_associate(win->ee, win->win_obj,
- ECORE_EVAS_OBJECT_ASSOCIATE_BASE |
- ECORE_EVAS_OBJECT_ASSOCIATE_STACK |
- ECORE_EVAS_OBJECT_ASSOCIATE_LAYER);
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_SHOW,
- _elm_win_obj_callback_show, win);
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_HIDE,
- _elm_win_obj_callback_hide, win);
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_DEL,
- _elm_win_obj_callback_del, win);
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_MOVE,
- _elm_win_obj_callback_move, win);
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_RESIZE,
- _elm_win_obj_callback_resize, win);
- if (win->img_obj)
- evas_object_intercept_move_callback_add(win->win_obj,
- _elm_win_obj_intercept_move, win);
- evas_object_intercept_show_callback_add(win->win_obj,
- _elm_win_obj_intercept_show, win);
-
- evas_object_smart_callback_add(win->win_obj, "sub-object-del", (Evas_Smart_Cb)_subobj_del, win);
- 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);
- ecore_evas_callback_state_change_set(win->ee, _elm_win_state_change);
- evas_image_cache_set(win->evas, (_elm_config->image_cache * 1024));
- evas_font_cache_set(win->evas, (_elm_config->font_cache * 1024));
- EINA_LIST_FOREACH(_elm_config->font_dirs, l, fontpath)
- evas_font_path_append(win->evas, fontpath);
+ elm_widget_parent2_set(obj, parent);
+
+ ecore_evas_object_associate
+ (sd->ee, obj, ECORE_EVAS_OBJECT_ASSOCIATE_BASE |
+ ECORE_EVAS_OBJECT_ASSOCIATE_STACK | ECORE_EVAS_OBJECT_ASSOCIATE_LAYER);
+
+ if (sd->img_obj)
+ evas_object_intercept_move_callback_add
+ (obj, _elm_win_obj_intercept_move, sd);
+
+ evas_object_intercept_show_callback_add
+ (obj, _elm_win_obj_intercept_show, sd);
+
+ ecore_evas_name_class_set(sd->ee, name, _elm_appname);
+ ecore_evas_callback_delete_request_set(sd->ee, _elm_win_delete_request);
+ ecore_evas_callback_resize_set(sd->ee, _elm_win_resize);
+ ecore_evas_callback_mouse_in_set(sd->ee, _elm_win_mouse_in);
+ ecore_evas_callback_focus_in_set(sd->ee, _elm_win_focus_in);
+ ecore_evas_callback_focus_out_set(sd->ee, _elm_win_focus_out);
+ ecore_evas_callback_move_set(sd->ee, _elm_win_move);
+ ecore_evas_callback_state_change_set(sd->ee, _elm_win_state_change);
+
+ evas_image_cache_set(sd->evas, (_elm_config->image_cache * 1024));
+ evas_font_cache_set(sd->evas, (_elm_config->font_cache * 1024));
+
+ EINA_LIST_FOREACH (_elm_config->font_dirs, l, fontpath)
+ evas_font_path_append(sd->evas, fontpath);
+
if (!_elm_config->font_hinting)
- evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_NONE);
+ evas_font_hinting_set(sd->evas, EVAS_FONT_HINTING_NONE);
else if (_elm_config->font_hinting == 1)
- evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_AUTO);
+ evas_font_hinting_set(sd->evas, EVAS_FONT_HINTING_AUTO);
else if (_elm_config->font_hinting == 2)
- evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_BYTECODE);
+ evas_font_hinting_set(sd->evas, EVAS_FONT_HINTING_BYTECODE);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
- _elm_win_list = eina_list_append(_elm_win_list, win->win_obj);
+ _elm_win_list = eina_list_append(_elm_win_list, obj);
if (ENGINE_COMPARE(ELM_SOFTWARE_FB))
{
- ecore_evas_fullscreen_set(win->ee, 1);
+ ecore_evas_fullscreen_set(sd->ee, 1);
}
#undef ENGINE_COMPARE
if (_elm_config->focus_highlight_enable)
- elm_win_focus_highlight_enabled_set(win->win_obj, EINA_TRUE);
+ elm_win_focus_highlight_enabled_set(obj, EINA_TRUE);
#ifdef ELM_DEBUG
- Evas_Modifier_Mask mask = evas_key_modifier_mask_get(win->evas, "Control");
- evas_object_event_callback_add(win->win_obj, EVAS_CALLBACK_KEY_DOWN,
- _debug_key_down, win);
+ Evas_Modifier_Mask mask = evas_key_modifier_mask_get(sd->evas, "Control");
+ evas_object_event_callback_add
+ (obj, EVAS_CALLBACK_KEY_DOWN, _debug_key_down, sd);
- Eina_Bool ret = evas_object_key_grab(win->win_obj, "F12", mask, 0,
- EINA_TRUE);
- printf("Ctrl+F12 key combination exclusive for dot tree generation\n");
+ if (evas_object_key_grab(obj, "F12", mask, 0, EINA_TRUE))
+ INF("Ctrl+F12 key combination exclusive for dot tree generation\n");
+ else
+ ERR("failed to grab F12 key to elm widgets (dot) tree generation");
#endif
- evas_object_smart_callbacks_descriptions_set(win->win_obj, _signals);
-
- return win->win_obj;
+ return obj;
}
EAPI Evas_Object *
-elm_win_util_standard_add(const char *name, const char *title)
+elm_win_util_standard_add(const char *name,
+ const char *title)
{
Evas_Object *win, *bg;
win = elm_win_add(NULL, name, ELM_WIN_BASIC);
if (!win) return NULL;
+
elm_win_title_set(win, title);
bg = elm_bg_add(win);
if (!bg)
@@ -2123,349 +2247,356 @@ elm_win_util_standard_add(const char *name, const char *title)
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bg);
evas_object_show(bg);
+
return win;
}
EAPI void
-elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj)
+elm_win_resize_object_add(Evas_Object *obj,
+ Evas_Object *subobj)
{
Evas_Coord w, h;
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (eina_list_data_find(win->subobjs, subobj)) return;
- win->subobjs = eina_list_append(win->subobjs, subobj);
- elm_widget_sub_object_add(obj, subobj);
- evas_object_event_callback_add(subobj, EVAS_CALLBACK_DEL,
- _elm_win_subobj_callback_del, obj);
- evas_object_event_callback_add(subobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _elm_win_subobj_callback_changed_size_hints,
- obj);
+
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (eina_list_data_find(sd->resize_objs, subobj)) return;
+
+ if (!ELM_WIDGET_DATA(sd)->api->sub_object_add(obj, subobj))
+ ERR("could not add %p as sub object of %p", subobj, obj);
+
+ sd->resize_objs = eina_list_append(sd->resize_objs, subobj);
+
+ evas_object_event_callback_add
+ (subobj, EVAS_CALLBACK_DEL, _elm_win_on_resize_obj_del, obj);
+ evas_object_event_callback_add
+ (subobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _elm_win_on_resize_obj_changed_size_hints, obj);
+
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
evas_object_move(subobj, 0, 0);
evas_object_resize(subobj, w, h);
- _elm_win_eval_subobjs(obj);
+
+ _elm_win_resize_objects_eval(obj);
}
EAPI void
-elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- evas_object_event_callback_del_full(subobj,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _elm_win_subobj_callback_changed_size_hints,
- obj);
- evas_object_event_callback_del_full(subobj, EVAS_CALLBACK_DEL,
- _elm_win_subobj_callback_del, obj);
- win->subobjs = eina_list_remove(win->subobjs, subobj);
- elm_widget_sub_object_del(obj, subobj);
- _elm_win_eval_subobjs(obj);
+elm_win_resize_object_del(Evas_Object *obj,
+ Evas_Object *subobj)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (!ELM_WIDGET_DATA(sd)->api->sub_object_del(obj, subobj))
+ ERR("could not remove sub object %p from %p", subobj, obj);
+
+ sd->resize_objs = eina_list_remove(sd->resize_objs, subobj);
+
+ evas_object_event_callback_del_full
+ (subobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _elm_win_on_resize_obj_changed_size_hints, obj);
+ evas_object_event_callback_del_full
+ (subobj, EVAS_CALLBACK_DEL, _elm_win_on_resize_obj_del, obj);
+
+ _elm_win_resize_objects_eval(obj);
}
EAPI void
-elm_win_title_set(Evas_Object *obj, const char *title)
+elm_win_title_set(Evas_Object *obj,
+ const char *title)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win || !title) return;
- eina_stringshare_replace(&(win->title), title);
- ecore_evas_title_set(win->ee, win->title);
- if (win->frame_obj)
- edje_object_part_text_escaped_set(win->frame_obj, "elm.text.title", win->title);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (!title) return;
+ eina_stringshare_replace(&(sd->title), title);
+ ecore_evas_title_set(sd->ee, sd->title);
+ if (sd->frame_obj)
+ edje_object_part_text_escaped_set
+ (sd->frame_obj, "elm.text.title", sd->title);
}
EAPI const char *
elm_win_title_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- return win->title;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->title;
}
EAPI void
-elm_win_icon_name_set(Evas_Object *obj, const char *icon_name)
+elm_win_icon_name_set(Evas_Object *obj,
+ const char *icon_name)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win || !icon_name) return;
- eina_stringshare_replace(&(win->icon_name), icon_name);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (!icon_name) return;
+ eina_stringshare_replace(&(sd->icon_name), icon_name);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI const char *
elm_win_icon_name_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- return win->icon_name;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->icon_name;
}
EAPI void
elm_win_role_set(Evas_Object *obj, const char *role)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win || !role) return;
- eina_stringshare_replace(&(win->role), role);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (!role) return;
+ eina_stringshare_replace(&(sd->role), role);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI const char *
elm_win_role_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- return win->role;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->role;
}
EAPI void
-elm_win_icon_object_set(Evas_Object *obj, Evas_Object *icon)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (win->icon)
- evas_object_event_callback_del_full(win->icon, EVAS_CALLBACK_DEL,
- _elm_win_obj_icon_callback_del, win);
- win->icon = icon;
- if (win->icon)
- evas_object_event_callback_add(win->icon, EVAS_CALLBACK_DEL,
- _elm_win_obj_icon_callback_del, win);
+elm_win_icon_object_set(Evas_Object *obj,
+ Evas_Object *icon)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->icon)
+ evas_object_event_callback_del_full
+ (sd->icon, EVAS_CALLBACK_DEL, _elm_win_on_icon_del, sd);
+ sd->icon = icon;
+ if (sd->icon)
+ evas_object_event_callback_add
+ (sd->icon, EVAS_CALLBACK_DEL, _elm_win_on_icon_del, sd);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI const Evas_Object *
elm_win_icon_object_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- return win->icon;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->icon;
}
EAPI void
-elm_win_autodel_set(Evas_Object *obj, Eina_Bool autodel)
+elm_win_autodel_set(Evas_Object *obj,
+ Eina_Bool autodel)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->autodel = autodel;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->autodel = autodel;
}
EAPI Eina_Bool
elm_win_autodel_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->autodel;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->autodel;
}
EAPI void
elm_win_activate(Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_activate(win->ee);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_activate(sd->ee);
}
EAPI void
elm_win_lower(Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_lower(win->ee);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_lower(sd->ee);
}
EAPI void
elm_win_raise(Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_raise(win->ee);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_raise(sd->ee);
}
EAPI void
-elm_win_center(Evas_Object *obj, Eina_Bool h, Eina_Bool v)
+elm_win_center(Evas_Object *obj,
+ Eina_Bool h,
+ Eina_Bool v)
{
- Elm_Win *win;
int win_w, win_h, screen_w, screen_h, nx, ny;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &screen_w, &screen_h);
+
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_screen_geometry_get(sd->ee, NULL, NULL, &screen_w, &screen_h);
if ((!screen_w) || (!screen_h)) return;
+
evas_object_geometry_get(obj, NULL, NULL, &win_w, &win_h);
if ((!win_w) || (!win_h)) return;
+
if (h) nx = win_w >= screen_w ? 0 : (screen_w / 2) - (win_w / 2);
- else nx = win->screen.x;
+ else nx = sd->screen.x;
if (v) ny = win_h >= screen_h ? 0 : (screen_h / 2) - (win_h / 2);
- else ny = win->screen.y;
+ else ny = sd->screen.y;
if (nx < 0) nx = 0;
if (ny < 0) ny = 0;
+
evas_object_move(obj, nx, ny);
}
EAPI void
-elm_win_borderless_set(Evas_Object *obj, Eina_Bool borderless)
+elm_win_borderless_set(Evas_Object *obj,
+ Eina_Bool borderless)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_borderless_set(win->ee, borderless);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_borderless_set(sd->ee, borderless);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_borderless_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return ecore_evas_borderless_get(win->ee);
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return ecore_evas_borderless_get(sd->ee);
}
EAPI void
-elm_win_shaped_set(Evas_Object *obj, Eina_Bool shaped)
+elm_win_shaped_set(Evas_Object *obj,
+ Eina_Bool shaped)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_shaped_set(win->ee, shaped);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_shaped_set(sd->ee, shaped);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_shaped_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return ecore_evas_shaped_get(win->ee);
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return ecore_evas_shaped_get(sd->ee);
}
EAPI void
-elm_win_alpha_set(Evas_Object *obj, Eina_Bool alpha)
+elm_win_alpha_set(Evas_Object *obj,
+ Eina_Bool alpha)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (win->frame_obj)
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->frame_obj)
{
}
- else if (win->img_obj)
+ else if (sd->img_obj)
{
- evas_object_image_alpha_set(win->img_obj, alpha);
- ecore_evas_alpha_set(win->ee, alpha);
+ evas_object_image_alpha_set(sd->img_obj, alpha);
+ ecore_evas_alpha_set(sd->ee, alpha);
}
else
{
#ifdef HAVE_ELEMENTARY_X
- if (win->xwin)
+ if (sd->xwin)
{
if (alpha)
{
if (!_elm_config->compositing)
- elm_win_shaped_set(obj, alpha);
+ elm_win_shaped_set(obj, alpha);
else
- ecore_evas_alpha_set(win->ee, alpha);
+ ecore_evas_alpha_set(sd->ee, alpha);
}
else
- ecore_evas_alpha_set(win->ee, alpha);
- _elm_win_xwin_update(win);
+ ecore_evas_alpha_set(sd->ee, alpha);
+ _elm_win_xwin_update(sd);
}
else
#endif
- ecore_evas_alpha_set(win->ee, alpha);
+ ecore_evas_alpha_set(sd->ee, alpha);
}
}
EAPI Eina_Bool
elm_win_alpha_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- if (win->frame_obj)
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ if (sd->frame_obj)
{
}
- else if (win->img_obj)
+ else if (sd->img_obj)
{
- return evas_object_image_alpha_get(win->img_obj);
+ return evas_object_image_alpha_get(sd->img_obj);
}
- return ecore_evas_alpha_get(win->ee);
+
+ return ecore_evas_alpha_get(sd->ee);
}
EAPI void
-elm_win_override_set(Evas_Object *obj, Eina_Bool override)
+elm_win_override_set(Evas_Object *obj,
+ Eina_Bool override)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_override_set(win->ee, override);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_override_set(sd->ee, override);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_override_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return ecore_evas_override_get(win->ee);
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return ecore_evas_override_get(sd->ee);
}
EAPI void
-elm_win_fullscreen_set(Evas_Object *obj, Eina_Bool fullscreen)
+elm_win_fullscreen_set(Evas_Object *obj,
+ Eina_Bool fullscreen)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- // YYY: handle if win->img_obj
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+ // YYY: handle if sd->img_obj
#define ENGINE_COMPARE(name) (!strcmp(_elm_preferred_engine, name))
if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
@@ -2475,10 +2606,10 @@ elm_win_fullscreen_set(Evas_Object *obj, Eina_Bool fullscreen)
}
else
{
- win->fullscreen = fullscreen;
- ecore_evas_fullscreen_set(win->ee, fullscreen);
+ sd->fullscreen = fullscreen;
+ ecore_evas_fullscreen_set(sd->ee, fullscreen);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
#undef ENGINE_COMPARE
@@ -2487,10 +2618,9 @@ elm_win_fullscreen_set(Evas_Object *obj, Eina_Bool fullscreen)
EAPI Eina_Bool
elm_win_fullscreen_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
#define ENGINE_COMPARE(name) (!strcmp(_elm_preferred_engine, name))
if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
@@ -2500,354 +2630,343 @@ elm_win_fullscreen_get(const Evas_Object *obj)
}
else
{
- return win->fullscreen;
+ return sd->fullscreen;
}
#undef ENGINE_COMPARE
}
EAPI void
-elm_win_maximized_set(Evas_Object *obj, Eina_Bool maximized)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->maximized = maximized;
- // YYY: handle if win->img_obj
- ecore_evas_maximized_set(win->ee, maximized);
+elm_win_maximized_set(Evas_Object *obj,
+ Eina_Bool maximized)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->maximized = maximized;
+ // YYY: handle if sd->img_obj
+ ecore_evas_maximized_set(sd->ee, maximized);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_maximized_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->maximized;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->maximized;
}
EAPI void
-elm_win_iconified_set(Evas_Object *obj, Eina_Bool iconified)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->iconified = iconified;
- ecore_evas_iconified_set(win->ee, iconified);
+elm_win_iconified_set(Evas_Object *obj,
+ Eina_Bool iconified)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->iconified = iconified;
+ ecore_evas_iconified_set(sd->ee, iconified);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_iconified_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->iconified;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->iconified;
}
EAPI void
-elm_win_withdrawn_set(Evas_Object *obj, Eina_Bool withdrawn)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->withdrawn = withdrawn;
- ecore_evas_withdrawn_set(win->ee, withdrawn);
+elm_win_withdrawn_set(Evas_Object *obj,
+ Eina_Bool withdrawn)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->withdrawn = withdrawn;
+ ecore_evas_withdrawn_set(sd->ee, withdrawn);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_withdrawn_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->withdrawn;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->withdrawn;
}
EAPI void
-elm_win_urgent_set(Evas_Object *obj, Eina_Bool urgent)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->urgent = urgent;
- ecore_evas_urgent_set(win->ee, urgent);
+elm_win_urgent_set(Evas_Object *obj,
+ Eina_Bool urgent)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->urgent = urgent;
+ ecore_evas_urgent_set(sd->ee, urgent);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_urgent_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->urgent;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->urgent;
}
EAPI void
-elm_win_demand_attention_set(Evas_Object *obj, Eina_Bool demand_attention)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->demand_attention = demand_attention;
- ecore_evas_demand_attention_set(win->ee, demand_attention);
+elm_win_demand_attention_set(Evas_Object *obj,
+ Eina_Bool demand_attention)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->demand_attention = demand_attention;
+ ecore_evas_demand_attention_set(sd->ee, demand_attention);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_demand_attention_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->demand_attention;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->demand_attention;
}
EAPI void
-elm_win_modal_set(Evas_Object *obj, Eina_Bool modal)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->modal = modal;
- ecore_evas_modal_set(win->ee, modal);
+elm_win_modal_set(Evas_Object *obj,
+ Eina_Bool modal)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->modal = modal;
+ ecore_evas_modal_set(sd->ee, modal);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_modal_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->modal;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->modal;
}
EAPI void
-elm_win_aspect_set(Evas_Object *obj, double aspect)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->aspect = aspect;
- ecore_evas_aspect_set(win->ee, aspect);
+elm_win_aspect_set(Evas_Object *obj,
+ double aspect)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->aspect = aspect;
+ ecore_evas_aspect_set(sd->ee, aspect);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI double
elm_win_aspect_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->aspect;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->aspect;
}
EAPI void
-elm_win_layer_set(Evas_Object *obj, int layer)
+elm_win_layer_set(Evas_Object *obj,
+ int layer)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_layer_set(win->ee, layer);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_layer_set(sd->ee, layer);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI int
elm_win_layer_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) -1;
- win = elm_widget_data_get(obj);
- if (!win) return -1;
- return ecore_evas_layer_get(win->ee);
+ ELM_WIN_CHECK(obj) - 1;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, -1);
+
+ return ecore_evas_layer_get(sd->ee);
}
EAPI void
-elm_win_rotation_set(Evas_Object *obj, int rotation)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (win->rot == rotation) return;
- win->rot = rotation;
- ecore_evas_rotation_set(win->ee, rotation);
+elm_win_rotation_set(Evas_Object *obj,
+ int rotation)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->rot == rotation) return;
+ sd->rot = rotation;
+ ecore_evas_rotation_set(sd->ee, rotation);
evas_object_size_hint_min_set(obj, -1, -1);
evas_object_size_hint_max_set(obj, -1, -1);
- _elm_win_eval_subobjs(obj);
+ _elm_win_resize_objects_eval(obj);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI void
-elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (win->rot == rotation) return;
- win->rot = rotation;
- ecore_evas_rotation_with_resize_set(win->ee, rotation);
+elm_win_rotation_with_resize_set(Evas_Object *obj,
+ int rotation)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (sd->rot == rotation) return;
+ sd->rot = rotation;
+ ecore_evas_rotation_with_resize_set(sd->ee, rotation);
evas_object_size_hint_min_set(obj, -1, -1);
evas_object_size_hint_max_set(obj, -1, -1);
- _elm_win_eval_subobjs(obj);
+ _elm_win_resize_objects_eval(obj);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI int
elm_win_rotation_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) -1;
- win = elm_widget_data_get(obj);
- if (!win) return -1;
- return win->rot;
+ ELM_WIN_CHECK(obj) - 1;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, -1);
+
+ return sd->rot;
}
EAPI void
-elm_win_sticky_set(Evas_Object *obj, Eina_Bool sticky)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->sticky = sticky;
- ecore_evas_sticky_set(win->ee, sticky);
+elm_win_sticky_set(Evas_Object *obj,
+ Eina_Bool sticky)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->sticky = sticky;
+ ecore_evas_sticky_set(sd->ee, sticky);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwin_update(win);
+ _elm_win_xwin_update(sd);
#endif
}
EAPI Eina_Bool
elm_win_sticky_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->sticky;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->sticky;
}
EAPI void
-elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode)
+elm_win_keyboard_mode_set(Evas_Object *obj,
+ Elm_Win_Keyboard_Mode mode)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (mode == win->kbdmode) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (mode == sd->kbdmode) return;
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
+ _elm_win_xwindow_get(sd);
#endif
- win->kbdmode = mode;
+ sd->kbdmode = mode;
#ifdef HAVE_ELEMENTARY_X
- if (win->xwin)
+ if (sd->xwin)
ecore_x_e_virtual_keyboard_state_set
- (win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode);
+ (sd->xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
#endif
}
EAPI Elm_Win_Keyboard_Mode
elm_win_keyboard_mode_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) ELM_WIN_KEYBOARD_UNKNOWN;
- win = elm_widget_data_get(obj);
- if (!win) return ELM_WIN_KEYBOARD_UNKNOWN;
- return win->kbdmode;
+ ELM_WIN_CHECK(obj) ELM_WIN_KEYBOARD_UNKNOWN;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, ELM_WIN_KEYBOARD_UNKNOWN);
+
+ return sd->kbdmode;
}
EAPI void
-elm_win_keyboard_win_set(Evas_Object *obj, Eina_Bool is_keyboard)
+elm_win_keyboard_win_set(Evas_Object *obj,
+ Eina_Bool is_keyboard)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- ecore_x_e_virtual_keyboard_set(win->xwin, is_keyboard);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ ecore_x_e_virtual_keyboard_set(sd->xwin, is_keyboard);
#else
- (void) is_keyboard;
+ (void)is_keyboard;
#endif
}
EAPI Eina_Bool
elm_win_keyboard_win_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_virtual_keyboard_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_virtual_keyboard_get(sd->xwin);
#endif
return EINA_FALSE;
}
EAPI void
-elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode)
+elm_win_indicator_mode_set(Evas_Object *obj,
+ Elm_Win_Indicator_Mode mode)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (mode == win->indmode) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (mode == sd->indmode) return;
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
+ _elm_win_xwindow_get(sd);
#endif
- win->indmode = mode;
+ sd->indmode = mode;
#ifdef HAVE_ELEMENTARY_X
- if (win->xwin)
+ if (sd->xwin)
{
- if (win->indmode == ELM_WIN_INDICATOR_SHOW)
+ if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
ecore_x_e_illume_indicator_state_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
- else if (win->indmode == ELM_WIN_INDICATOR_HIDE)
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
+ else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
ecore_x_e_illume_indicator_state_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
}
#endif
}
@@ -2855,36 +2974,34 @@ elm_win_indicator_mode_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode)
EAPI Elm_Win_Indicator_Mode
elm_win_indicator_mode_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) ELM_WIN_INDICATOR_UNKNOWN;
- win = elm_widget_data_get(obj);
- if (!win) return ELM_WIN_INDICATOR_UNKNOWN;
- return win->indmode;
+ ELM_WIN_CHECK(obj) ELM_WIN_INDICATOR_UNKNOWN;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, ELM_WIN_INDICATOR_UNKNOWN);
+
+ return sd->indmode;
}
EAPI void
-elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opacity_Mode mode)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (mode == win->ind_o_mode) return;
- win->ind_o_mode = mode;
+elm_win_indicator_opacity_set(Evas_Object *obj,
+ Elm_Win_Indicator_Opacity_Mode mode)
+{
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (mode == sd->ind_o_mode) return;
+ sd->ind_o_mode = mode;
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
{
- if (win->ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
+ if (sd->ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
ecore_x_e_illume_indicator_opacity_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_OPAQUE);
- else if (win->ind_o_mode == ELM_WIN_INDICATOR_TRANSLUCENT)
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_OPAQUE);
+ else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSLUCENT)
ecore_x_e_illume_indicator_opacity_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
- else if (win->ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
+ else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
ecore_x_e_illume_indicator_opacity_set
- (win->xwin, ECORE_X_ILLUME_INDICATOR_TRANSPARENT);
-
+ (sd->xwin, ECORE_X_ILLUME_INDICATOR_TRANSPARENT);
}
#endif
}
@@ -2892,388 +3009,454 @@ elm_win_indicator_opacity_set(Evas_Object *obj, Elm_Win_Indicator_Opacity_Mode m
EAPI Elm_Win_Indicator_Opacity_Mode
elm_win_indicator_opacity_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) ELM_WIN_INDICATOR_OPACITY_UNKNOWN;
- win = elm_widget_data_get(obj);
- if (!win) return ELM_WIN_INDICATOR_OPACITY_UNKNOWN;
- return win->ind_o_mode;
+ ELM_WIN_CHECK(obj) ELM_WIN_INDICATOR_OPACITY_UNKNOWN;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, ELM_WIN_INDICATOR_OPACITY_UNKNOWN);
+
+ return sd->ind_o_mode;
}
EAPI void
-elm_win_screen_position_get(const Evas_Object *obj, int *x, int *y)
+elm_win_screen_position_get(const Evas_Object *obj,
+ int *x,
+ int *y)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- if (x) *x = win->screen.x;
- if (y) *y = win->screen.y;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ if (x) *x = sd->screen.x;
+ if (y) *y = sd->screen.y;
}
EAPI Eina_Bool
elm_win_focus_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return ecore_evas_focus_get(win->ee);
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return ecore_evas_focus_get(sd->ee);
}
EAPI void
-elm_win_screen_constrain_set(Evas_Object *obj, Eina_Bool constrain)
+elm_win_screen_constrain_set(Evas_Object *obj,
+ Eina_Bool constrain)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->constrain = !!constrain;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->constrain = !!constrain;
}
EAPI Eina_Bool
elm_win_screen_constrain_get(Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- return win->constrain;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ return sd->constrain;
}
EAPI void
-elm_win_screen_size_get(const Evas_Object *obj, int *x, int *y, int *w, int *h)
+elm_win_screen_size_get(const Evas_Object *obj,
+ int *x,
+ int *y,
+ int *w,
+ int *h)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_screen_geometry_get(win->ee, x, y, w, h);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ecore_evas_screen_geometry_get(sd->ee, x, y, w, h);
}
EAPI void
-elm_win_conformant_set(Evas_Object *obj, Eina_Bool conformant)
+elm_win_conformant_set(Evas_Object *obj,
+ Eina_Bool conformant)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- ecore_x_e_illume_conformant_set(win->xwin, conformant);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ ecore_x_e_illume_conformant_set(sd->xwin, conformant);
#else
- (void) conformant;
+ (void)conformant;
#endif
}
EAPI Eina_Bool
elm_win_conformant_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_illume_conformant_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_illume_conformant_get(sd->xwin);
#endif
return EINA_FALSE;
}
EAPI void
-elm_win_quickpanel_set(Evas_Object *obj, Eina_Bool quickpanel)
+elm_win_quickpanel_set(Evas_Object *obj,
+ Eina_Bool quickpanel)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
{
- ecore_x_e_illume_quickpanel_set(win->xwin, quickpanel);
+ ecore_x_e_illume_quickpanel_set(sd->xwin, quickpanel);
if (quickpanel)
{
Ecore_X_Window_State states[2];
states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER;
- ecore_x_netwm_window_state_set(win->xwin, states, 2);
- ecore_x_icccm_hints_set(win->xwin, 0, 0, 0, 0, 0, 0, 0);
+ ecore_x_netwm_window_state_set(sd->xwin, states, 2);
+ ecore_x_icccm_hints_set(sd->xwin, 0, 0, 0, 0, 0, 0, 0);
}
}
#else
- (void) quickpanel;
+ (void)quickpanel;
#endif
}
EAPI Eina_Bool
elm_win_quickpanel_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_illume_quickpanel_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_illume_quickpanel_get(sd->xwin);
#endif
return EINA_FALSE;
}
EAPI void
-elm_win_quickpanel_priority_major_set(Evas_Object *obj, int priority)
+elm_win_quickpanel_priority_major_set(Evas_Object *obj,
+ int priority)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- ecore_x_e_illume_quickpanel_priority_major_set(win->xwin, priority);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ ecore_x_e_illume_quickpanel_priority_major_set(sd->xwin, priority);
#else
- (void) priority;
+ (void)priority;
#endif
}
EAPI int
elm_win_quickpanel_priority_major_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) -1;
- win = elm_widget_data_get(obj);
- if (!win) return -1;
+ ELM_WIN_CHECK(obj) - 1;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, -1);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_illume_quickpanel_priority_major_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_illume_quickpanel_priority_major_get(sd->xwin);
#endif
return -1;
}
EAPI void
-elm_win_quickpanel_priority_minor_set(Evas_Object *obj, int priority)
+elm_win_quickpanel_priority_minor_set(Evas_Object *obj,
+ int priority)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- ecore_x_e_illume_quickpanel_priority_minor_set(win->xwin, priority);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ ecore_x_e_illume_quickpanel_priority_minor_set(sd->xwin, priority);
#else
- (void) priority;
+ (void)priority;
#endif
}
EAPI int
elm_win_quickpanel_priority_minor_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) -1;
- win = elm_widget_data_get(obj);
- if (!win) return -1;
+ ELM_WIN_CHECK(obj) - 1;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, -1);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_illume_quickpanel_priority_minor_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_illume_quickpanel_priority_minor_get(sd->xwin);
#endif
return -1;
}
EAPI void
-elm_win_quickpanel_zone_set(Evas_Object *obj, int zone)
+elm_win_quickpanel_zone_set(Evas_Object *obj,
+ int zone)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- ecore_x_e_illume_quickpanel_zone_set(win->xwin, zone);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ ecore_x_e_illume_quickpanel_zone_set(sd->xwin, zone);
#else
- (void) zone;
+ (void)zone;
#endif
}
EAPI int
elm_win_quickpanel_zone_get(const Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) 0;
- win = elm_widget_data_get(obj);
- if (!win) return 0;
+ ELM_WIN_CHECK(obj) 0;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, 0);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
- return ecore_x_e_illume_quickpanel_zone_get(win->xwin);
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
+ return ecore_x_e_illume_quickpanel_zone_get(sd->xwin);
#endif
return 0;
}
EAPI void
-elm_win_prop_focus_skip_set(Evas_Object *obj, Eina_Bool skip)
+elm_win_prop_focus_skip_set(Evas_Object *obj,
+ Eina_Bool skip)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
- win->skip_focus = skip;
- ecore_evas_focus_skip_set(win->ee, skip);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
+ sd->skip_focus = skip;
+ ecore_evas_focus_skip_set(sd->ee, skip);
}
EAPI void
-elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *params __UNUSED__)
+elm_win_illume_command_send(Evas_Object *obj,
+ Elm_Illume_Command command,
+ void *params __UNUSED__)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
+
#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (win->xwin)
+ _elm_win_xwindow_get(sd);
+ if (sd->xwin)
{
switch (command)
{
case ELM_ILLUME_COMMAND_FOCUS_BACK:
- ecore_x_e_illume_focus_back_send(win->xwin);
- break;
+ ecore_x_e_illume_focus_back_send(sd->xwin);
+ break;
+
case ELM_ILLUME_COMMAND_FOCUS_FORWARD:
- ecore_x_e_illume_focus_forward_send(win->xwin);
- break;
+ ecore_x_e_illume_focus_forward_send(sd->xwin);
+ break;
+
case ELM_ILLUME_COMMAND_FOCUS_HOME:
- ecore_x_e_illume_focus_home_send(win->xwin);
- break;
+ ecore_x_e_illume_focus_home_send(sd->xwin);
+ break;
+
case ELM_ILLUME_COMMAND_CLOSE:
- ecore_x_e_illume_close_send(win->xwin);
- break;
+ ecore_x_e_illume_close_send(sd->xwin);
+ break;
+
default:
- break;
+ break;
}
}
#else
- (void) command;
+ (void)command;
#endif
}
EAPI Evas_Object *
elm_win_inlined_image_object_get(Evas_Object *obj)
{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- return win->img_obj;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->img_obj;
}
EAPI void
-elm_win_focus_highlight_enabled_set(Evas_Object *obj, Eina_Bool enabled)
+elm_win_focus_highlight_enabled_set(Evas_Object *obj,
+ Eina_Bool enabled)
{
- Elm_Win *win;
-
- ELM_CHECK_WIDTYPE(obj, widtype);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
- win = elm_widget_data_get(obj);
enabled = !!enabled;
- if (win->focus_highlight.enabled == enabled)
+ if (sd->focus_highlight.enabled == enabled)
return;
- win->focus_highlight.enabled = enabled;
+ sd->focus_highlight.enabled = enabled;
- if (win->focus_highlight.enabled)
- _elm_win_focus_highlight_init(win);
+ if (sd->focus_highlight.enabled)
+ _elm_win_focus_highlight_init(sd);
else
- _elm_win_focus_highlight_shutdown(win);
+ _elm_win_focus_highlight_shutdown(sd);
}
EAPI Eina_Bool
elm_win_focus_highlight_enabled_get(const Evas_Object *obj)
{
- Elm_Win *win;
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
-
- win = elm_widget_data_get(obj);
- return win->focus_highlight.enabled;
+ return sd->focus_highlight.enabled;
}
EAPI void
-elm_win_focus_highlight_style_set(Evas_Object *obj, const char *style)
+elm_win_focus_highlight_style_set(Evas_Object *obj,
+ const char *style)
{
- Elm_Win *win;
-
- ELM_CHECK_WIDTYPE(obj, widtype);
+ ELM_WIN_CHECK(obj);
+ ELM_WIN_DATA_GET_OR_RETURN(obj, sd);
- win = elm_widget_data_get(obj);
- eina_stringshare_replace(&win->focus_highlight.style, style);
- win->focus_highlight.changed_theme = EINA_TRUE;
- _elm_win_focus_highlight_reconfigure_job_start(win);
+ eina_stringshare_replace(&sd->focus_highlight.style, style);
+ sd->focus_highlight.changed_theme = EINA_TRUE;
+ _elm_win_focus_highlight_reconfigure_job_start(sd);
}
EAPI const char *
elm_win_focus_highlight_style_get(const Evas_Object *obj)
{
- Elm_Win *win;
+ ELM_WIN_CHECK(obj) NULL;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return sd->focus_highlight.style;
+}
+
+EAPI Eina_Bool
+elm_win_socket_listen(Evas_Object *obj,
+ const char *svcname,
+ int svcnum,
+ Eina_Bool svcsys)
+{
+ ELM_WIN_CHECK(obj) EINA_FALSE;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+ if (!sd->ee) return EINA_FALSE;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ if (!ecore_evas_extn_socket_listen(sd->ee, svcname, svcnum, svcsys))
+ return EINA_FALSE;
- win = elm_widget_data_get(obj);
- return win->focus_highlight.style;
+ return EINA_TRUE;
}
-typedef struct _Widget_Data Widget_Data;
+/* windowing specific calls - shall we do this differently? */
-struct _Widget_Data
+static Ecore_X_Window
+_elm_ee_win_get(const Evas_Object *obj)
{
- Evas_Object *frm;
- Evas_Object *content;
-};
+ if (!obj) return 0;
+#ifdef HAVE_ELEMENTARY_X
+ Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
+ if (ee) return (Ecore_X_Window)ecore_evas_window_get(ee);
+#endif
+ return 0;
+}
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _sub_del(void *data, Evas_Object *obj, void *event_info);
+EAPI Ecore_X_Window
+elm_win_xwindow_get(const Evas_Object *obj)
+{
+ if (!obj) return 0;
-static const char *widtype2 = NULL;
+ if (!evas_object_smart_type_check_ptr(obj, WIN_SMART_NAME))
+ return _elm_ee_win_get(obj);
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- free(wd);
+ ELM_WIN_CHECK(obj) 0;
+ ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, 0);
+
+#ifdef HAVE_ELEMENTARY_X
+ if (sd->xwin) return sd->xwin;
+ if (sd->parent) return elm_win_xwindow_get(sd->parent);
+#endif
+ return 0;
}
+/* Elementary *inner* window widget, from now on */
+
+static const char INWIN_SMART_NAME[] = "elm_inwin";
+
+#define ELM_INWIN_DATA_GET(o, sd) \
+ Elm_Layout_Smart_Data * sd = evas_object_smart_data_get(o)
+
+#define ELM_INWIN_DATA_GET_OR_RETURN(o, ptr) \
+ ELM_INWIN_DATA_GET(o, ptr); \
+ if (!ptr) \
+ { \
+ CRITICAL("No widget data for object %p (%s)", \
+ o, evas_object_type_get(o)); \
+ return; \
+ }
+
+#define ELM_INWIN_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
+ ELM_INWIN_DATA_GET(o, ptr); \
+ if (!ptr) \
+ { \
+ CRITICAL("No widget data for object %p (%s)", \
+ o, evas_object_type_get(o)); \
+ return val; \
+ }
+
+#define ELM_INWIN_CHECK(obj) \
+ if (!obj || !elm_widget_type_check((obj), INWIN_SMART_NAME, __func__)) \
+ return
+
+/* Inheriting from elm_layout. Besides, we need no more than what is
+ * there */
+EVAS_SMART_SUBCLASS_NEW
+ (INWIN_SMART_NAME, _elm_inwin, Elm_Layout_Smart_Class,
+ Elm_Layout_Smart_Class, elm_layout_smart_class_get, NULL);
+
+static const Elm_Layout_Part_Alias_Description _content_aliases[] =
+{
+ {"default", "elm.swallow.content"},
+ {NULL, NULL}
+};
+
static void
-_theme_hook(Evas_Object *obj)
+_elm_inwin_smart_sizing_eval(Evas_Object *obj)
{
- Widget_Data *wd = elm_widget_data_get(obj);
- _elm_theme_object_set(obj, wd->frm, "win", "inwin", elm_widget_style_get(obj));
- if (wd->content)
- edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->content);
- _sizing_eval(obj);
+ Evas_Object *content;
+ Evas_Coord minw = -1, minh = -1;
+
+ ELM_INWIN_DATA_GET(obj, sd);
+
+ content = elm_layout_content_get(obj, NULL);
+
+ if (!content) return;
- evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
+ evas_object_size_hint_min_get(content, &minw, &minh);
+ edje_object_size_min_calc(ELM_WIDGET_DATA(sd)->resize_obj, &minw, &minh);
+
+ evas_object_size_hint_min_set(obj, minw, minh);
+ evas_object_size_hint_max_set(obj, -1, -1);
}
static Eina_Bool
-_elm_inwin_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next)
+_elm_inwin_smart_focus_next(const Evas_Object *obj,
+ Elm_Focus_Direction dir,
+ Evas_Object **next)
{
- Widget_Data *wd = elm_widget_data_get(obj);
+ Evas_Object *content;
- if (!wd)
- return EINA_FALSE;
+ content = elm_layout_content_get(obj, NULL);
- /* Try Focus cycle in subitem */
- if (wd->content)
+ /* attempt to follow focus cycle into sub-object */
+ if (content)
{
- elm_widget_focus_next_get(wd->content, dir, next);
+ elm_widget_focus_next_get(content, dir, next);
if (*next)
return EINA_TRUE;
}
@@ -3283,195 +3466,92 @@ _elm_inwin_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas
}
static void
-_elm_inwin_text_set_hook(Evas_Object *obj, const char *item, const char *text)
+_elm_inwin_smart_add(Evas_Object *obj)
{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd || !item) return;
- edje_object_part_text_escaped_set(wd->frm, item, text);
- _sizing_eval(obj);
-}
+ EVAS_SMART_DATA_ALLOC(obj, Elm_Layout_Smart_Data);
-static const char *
-_elm_inwin_text_get_hook(const Evas_Object *obj, const char *item)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
+ ELM_WIDGET_CLASS(_elm_inwin_parent_sc)->base.add(obj);
- if (!item || !wd || !wd->frm) return NULL;
- return edje_object_part_text_get(wd->frm, item);
+ elm_widget_can_focus_set(obj, EINA_FALSE);
+ elm_widget_highlight_ignore_set(obj, EINA_TRUE);
}
static void
-_sizing_eval(Evas_Object *obj)
+_elm_inwin_smart_set_user(Elm_Layout_Smart_Class *sc)
{
- Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Coord minw = -1, minh = -1;
+ ELM_WIDGET_CLASS(sc)->base.add = _elm_inwin_smart_add;
- evas_object_size_hint_min_get(wd->content, &minw, &minh);
- edje_object_size_min_calc(wd->frm, &minw, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, -1, -1);
-}
+ ELM_WIDGET_CLASS(sc)->focus_next = _elm_inwin_smart_focus_next;
-static void
-_changed_size_hints(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
-{
- _sizing_eval(data);
-}
+ sc->sizing_eval = _elm_inwin_smart_sizing_eval;
-static void
-_sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Object *sub = event_info;
- if (sub == wd->content)
- {
- evas_object_event_callback_del_full
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
- wd->content = NULL;
- _sizing_eval(obj);
- }
+ sc->content_aliases = _content_aliases;
}
EAPI Evas_Object *
-elm_win_inwin_add(Evas_Object *obj)
+elm_win_inwin_add(Evas_Object *parent)
{
- Evas_Object *obj2;
- Widget_Data *wd;
- Elm_Win *win;
+ Evas *e;
+ Evas_Object *obj;
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- win = elm_widget_data_get(obj);
- if (!win) return NULL;
- wd = ELM_NEW(Widget_Data);
- obj2 = elm_widget_add(win->evas);
- elm_widget_type_set(obj2, "inwin");
- ELM_SET_WIDTYPE(widtype2, "inwin");
- elm_widget_sub_object_add(obj, obj2);
- evas_object_size_hint_weight_set(obj2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(obj2, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(obj, obj2);
-
- elm_widget_data_set(obj2, wd);
- elm_widget_del_hook_set(obj2, _del_hook);
- elm_widget_theme_hook_set(obj2, _theme_hook);
- elm_widget_focus_next_hook_set(obj2, _elm_inwin_focus_next_hook);
- elm_widget_text_set_hook_set(obj2, _elm_inwin_text_set_hook);
- elm_widget_text_get_hook_set(obj2, _elm_inwin_text_get_hook);
- elm_widget_can_focus_set(obj2, EINA_TRUE);
- elm_widget_highlight_ignore_set(obj2, EINA_TRUE);
-
- wd->frm = edje_object_add(win->evas);
- _elm_theme_object_set(obj, wd->frm, "win", "inwin", "default");
- elm_widget_resize_object_set(obj2, wd->frm);
-
- evas_object_smart_callback_add(obj2, "sub-object-del", _sub_del, obj2);
-
- _sizing_eval(obj2);
- return obj2;
+ ELM_WIN_CHECK(parent) NULL; /* *has* to have a parent window */
+
+ e = evas_object_evas_get(parent);
+ if (!e) return NULL;
+
+ obj = evas_object_smart_add(e, _elm_inwin_smart_class_new());
+
+ if (!elm_widget_sub_object_add(parent, obj))
+ ERR("could not add %p as sub object of %p", obj, parent);
+
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_win_resize_object_add(parent, obj);
+
+ elm_layout_theme_set(obj, "win", "inwin", elm_object_style_get(obj));
+
+ elm_layout_sizing_eval(obj);
+
+ return obj;
}
EAPI void
elm_win_inwin_activate(Evas_Object *obj)
{
- ELM_CHECK_WIDTYPE(obj, widtype2);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
+ ELM_INWIN_CHECK(obj);
+ ELM_INWIN_DATA_GET_OR_RETURN(obj, sd);
+
evas_object_raise(obj);
evas_object_show(obj);
- edje_object_signal_emit(wd->frm, "elm,action,show", "elm");
+ edje_object_signal_emit
+ (ELM_WIDGET_DATA(sd)->resize_obj, "elm,action,show", "elm");
elm_object_focus_set(obj, EINA_TRUE);
}
EAPI void
-elm_win_inwin_content_set(Evas_Object *obj, Evas_Object *content)
-{
- ELM_CHECK_WIDTYPE(obj, widtype2);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (wd->content == content) return;
- if (wd->content) evas_object_del(wd->content);
- wd->content = content;
- if (content)
- {
- elm_widget_sub_object_add(obj, content);
- evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->frm, "elm.swallow.content", content);
- }
- _sizing_eval(obj);
+elm_win_inwin_content_set(Evas_Object *obj,
+ Evas_Object *content)
+{
+ ELM_INWIN_CHECK(obj);
+ ELM_INWIN_DATA_GET_OR_RETURN(obj, sd);
+
+ ELM_CONTAINER_CLASS(_elm_inwin_parent_sc)->content_set(obj, NULL, content);
}
EAPI Evas_Object *
elm_win_inwin_content_get(const Evas_Object *obj)
{
- ELM_CHECK_WIDTYPE(obj, widtype2) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return wd->content;
+ ELM_INWIN_CHECK(obj) NULL;
+ ELM_INWIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
+
+ return ELM_CONTAINER_CLASS(_elm_inwin_parent_sc)->content_get(obj, NULL);
}
EAPI Evas_Object *
elm_win_inwin_content_unset(Evas_Object *obj)
{
- ELM_CHECK_WIDTYPE(obj, widtype2) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- if (!wd->content) return NULL;
- Evas_Object *content = wd->content;
- elm_widget_sub_object_del(obj, wd->content);
- evas_object_event_callback_del_full(wd->content,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_unswallow(wd->frm, wd->content);
- wd->content = NULL;
- return content;
-}
-
-EAPI Eina_Bool
-elm_win_socket_listen(Evas_Object *obj, const char *svcname, int svcnum, Eina_Bool svcsys)
-{
-
- Elm_Win *win;
+ ELM_INWIN_CHECK(obj) NULL;
+ ELM_INWIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
- win = elm_widget_data_get(obj);
- if (!win) return EINA_FALSE;
- if (!win->ee) return EINA_FALSE;
-
- if (!ecore_evas_extn_socket_listen(win->ee, svcname, svcnum, svcsys))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-/* windowing specific calls - shall we do this differently? */
-
-static Ecore_X_Window
-_elm_ee_win_get(const Evas_Object *obj)
-{
- if (!obj) return 0;
-#ifdef HAVE_ELEMENTARY_X
- Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
- if (ee) return (Ecore_X_Window)ecore_evas_window_get(ee);
-#endif
- return 0;
-}
-
-EAPI Ecore_X_Window
-elm_win_xwindow_get(const Evas_Object *obj)
-{
- Elm_Win *win;
- const char *type;
-
- if (!obj) return 0;
- type = elm_widget_type_get(obj);
- if ((!type) || (type != widtype)) return _elm_ee_win_get(obj);
- win = elm_widget_data_get(obj);
- if (!win) return 0;
-#ifdef HAVE_ELEMENTARY_X
- if (win->xwin) return win->xwin;
- if (win->parent) return elm_win_xwindow_get(win->parent);
-#endif
- return 0;
+ return ELM_CONTAINER_CLASS(_elm_inwin_parent_sc)->content_unset(obj, NULL);
}