Elm_Win_Type type;
Elm_Win_Keyboard_Mode kbdmode;
- struct {
- const char *info;
+ 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;
+ struct
+ {
+ int x, y;
+ } screen;
+ struct
+ {
+ Ecore_Evas *ee;
+ Evas *evas;
+ Evas_Object *obj, *hot_obj;
+ int hot_x, hot_y;
+ } pointer;
+ struct
+ {
+ Evas_Object *top;
+
+ struct
+ {
+ Evas_Object *target;
+ Eina_Bool visible : 1;
+ Eina_Bool handled : 1;
+ } cur, prev;
+
+ 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;
+ struct
+ {
+ const char *name;
Ecore_Timer *timer;
- int repeat_count;
- int shot_counter;
- } shot;
+ Eina_List *names;
+ } profile;
+
+ 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;
- int resize_location;
- int *autodel_clear, rot;
- int show_count;
- struct {
- int x, y;
- } screen;
-
- struct {
- Evas_Object *top;
-
- struct {
- Evas_Object *target;
- Eina_Bool visible : 1;
- Eina_Bool handled : 1;
- } cur, prev;
-
- 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 iconified : 1;
+ Eina_Bool withdrawn : 1;
+ Eina_Bool sticky : 1;
+ Eina_Bool fullscreen : 1;
+ Eina_Bool maximized : 1;
+ Eina_Bool skip_focus : 1;
+ Eina_Bool floating : 1;
};
static const char *widtype = NULL;
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";
+static const char SIG_STICK[] = "stick";
+static const char SIG_UNSTICK[] = "unstick";
+static const char SIG_FULLSCREEN[] = "fullscreen";
+static const char SIG_UNFULLSCREEN[] = "unfullscreen";
+static const char SIG_MAXIMIZED[] = "maximized";
+static const char SIG_UNMAXIMIZED[] = "unmaximized";
+static const char SIG_PROFILE_CHANGED[] = "profile,changed";
static const Evas_Smart_Cb_Description _signals[] = {
{SIG_DELETE_REQUEST, ""},
{SIG_FOCUS_OUT, ""},
{SIG_FOCUS_IN, ""},
{SIG_MOVED, ""},
+ {SIG_WITHDRAWN, ""},
+ {SIG_ICONIFIED, ""},
+ {SIG_NORMAL, ""},
+ {SIG_STICK, ""},
+ {SIG_UNSTICK, ""},
+ {SIG_FULLSCREEN, ""},
+ {SIG_UNFULLSCREEN, ""},
+ {SIG_MAXIMIZED, ""},
+ {SIG_UNMAXIMIZED, ""},
+ {SIG_PROFILE_CHANGED, ""},
{NULL, NULL}
};
*pd = *p;
}
*pd = 0;
- v = atof(d);
+ v = _elm_atof(d);
free(d);
return v;
}
win->deferred_resize_job = ecore_job_add(_elm_win_resize_job, win);
}
-static void
+static void
_elm_win_mouse_in(Ecore_Evas *ee)
{
Evas_Object *obj;
win = elm_widget_data_get(obj);
if (!win) return;
_elm_widget_top_win_focused_set(win->win_obj, EINA_TRUE);
- if (win->show_count == 1)
+ if (!elm_widget_focus_order_get(obj))
{
elm_widget_focus_steal(win->win_obj);
win->show_count++;
}
}
+static void
+_elm_win_profile_update(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->profile.timer)
+ ecore_timer_del(win->profile.timer);
+ win->profile.timer = NULL;
+
+ /* TODO: We need the ability to bind a profile to a specific window.
+ * Elementary's configuration still has a single global profile for the app.
+ */
+ _elm_config_profile_set(win->profile.name);
+
+ evas_object_smart_callback_call(win->win_obj, SIG_PROFILE_CHANGED, NULL);
+}
+
+static Eina_Bool
+_elm_win_profile_change_delay(void *data)
+{
+ Elm_Win *win = data;
+ const char *profile;
+ Eina_Bool changed = EINA_FALSE;
+
+ profile = eina_list_nth(win->profile.names, 0);
+ if (profile)
+ {
+ if (win->profile.name)
+ {
+ if (strcmp(win->profile.name, profile))
+ {
+ eina_stringshare_replace(&(win->profile.name), profile);
+ changed = EINA_TRUE;
+ }
+ }
+ else
+ {
+ win->profile.name = eina_stringshare_add(profile);
+ changed = EINA_TRUE;
+ }
+ }
+ win->profile.timer = NULL;
+ if (changed) _elm_win_profile_update(win->ee);
+ return EINA_FALSE;
+}
+
+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;
+ Eina_Bool ch_fullscreen = EINA_FALSE;
+ Eina_Bool ch_maximized = EINA_FALSE;
+ Eina_Bool ch_profile = EINA_FALSE;
+ const char *profile;
+
+ if (!(obj = ecore_evas_object_associate_get(ee))) return;
+
+ if (!(win = elm_widget_data_get(obj))) return;
+
+ if (win->withdrawn != ecore_evas_withdrawn_get(win->ee))
+ {
+ win->withdrawn = ecore_evas_withdrawn_get(win->ee);
+ ch_withdrawn = EINA_TRUE;
+ }
+ if (win->sticky != ecore_evas_sticky_get(win->ee))
+ {
+ win->sticky = ecore_evas_sticky_get(win->ee);
+ ch_sticky = EINA_TRUE;
+ }
+ if (win->iconified != ecore_evas_iconified_get(win->ee))
+ {
+ win->iconified = ecore_evas_iconified_get(win->ee);
+ ch_iconified = EINA_TRUE;
+ }
+ if (win->fullscreen != ecore_evas_fullscreen_get(win->ee))
+ {
+ win->fullscreen = ecore_evas_fullscreen_get(win->ee);
+ ch_fullscreen = EINA_TRUE;
+ }
+ if (win->maximized != ecore_evas_maximized_get(win->ee))
+ {
+ win->maximized = ecore_evas_maximized_get(win->ee);
+ ch_maximized = EINA_TRUE;
+ }
+ profile = ecore_evas_profile_get(win->ee);
+ if ((profile) &&
+ _elm_config_profile_exists(profile))
+ {
+ if (win->profile.name)
+ {
+ if (strcmp(win->profile.name, profile))
+ {
+ eina_stringshare_replace(&(win->profile.name), profile);
+ ch_profile = EINA_TRUE;
+ }
+ }
+ else
+ {
+ win->profile.name = eina_stringshare_add(profile);
+ ch_profile = 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);
+ else
+ evas_object_smart_callback_call(win->win_obj, SIG_NORMAL, NULL);
+ }
+ if (ch_sticky)
+ {
+ if (win->sticky)
+ evas_object_smart_callback_call(win->win_obj, SIG_STICK, NULL);
+ else
+ evas_object_smart_callback_call(win->win_obj, SIG_UNSTICK, NULL);
+ }
+ if (ch_fullscreen)
+ {
+ if (win->fullscreen)
+ evas_object_smart_callback_call(win->win_obj, SIG_FULLSCREEN, NULL);
+ else
+ evas_object_smart_callback_call(win->win_obj, SIG_UNFULLSCREEN, NULL);
+ }
+ if (ch_maximized)
+ {
+ if (win->maximized)
+ evas_object_smart_callback_call(win->win_obj, SIG_MAXIMIZED, NULL);
+ else
+ evas_object_smart_callback_call(win->win_obj, SIG_UNMAXIMIZED, NULL);
+ }
+ if (ch_profile)
+ {
+ _elm_win_profile_update(win->ee);
+ }
+}
+
static Eina_Bool
_elm_win_focus_next_hook(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);
if (!wd)
return EINA_FALSE;
+ list = elm_widget_sub_object_list_get(obj);
/* Focus chain */
- if (wd->subobjs)
+ if (list)
{
if (!(items = elm_widget_focus_custom_chain_get(obj)))
- {
- items = wd->subobjs;
- if (!items)
- return EINA_FALSE;
- }
+ items = list;
+
list_data_get = eina_list_data_get;
elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next);
if (*next)
return EINA_TRUE;
}
-
*next = (Evas_Object *)obj;
return EINA_FALSE;
}
return EINA_TRUE;
}
else if ((!strcmp(ev->keyname, "Left")) ||
- (!strcmp(ev->keyname, "KP_Left")))
+ ((!strcmp(ev->keyname, "KP_Left")) && (!ev->string)))
{
//TODO : woohyun jung
}
else if ((!strcmp(ev->keyname, "Right")) ||
- (!strcmp(ev->keyname, "KP_Right")))
+ ((!strcmp(ev->keyname, "KP_Right")) && (!ev->string)))
{
//TODO : woohyun jung
}
else if ((!strcmp(ev->keyname, "Up")) ||
- (!strcmp(ev->keyname, "KP_Up")))
+ ((!strcmp(ev->keyname, "KP_Up")) && (!ev->string)))
{
//TODO : woohyun jung
}
else if ((!strcmp(ev->keyname, "Down")) ||
- (!strcmp(ev->keyname, "KP_Down")))
+ ((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
{
//TODO : woohyun jung
}
{
evas_object_hide(win->img_obj);
}
+ if (win->pointer.obj)
+ {
+ evas_object_hide(win->pointer.obj);
+ ecore_evas_hide(win->pointer.ee);
+ }
+}
+
+static void
+_elm_win_obj_callback_img_obj_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ Elm_Win *win = data;
+ win->img_obj = NULL;
}
static void
_elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Win *win = data;
- Evas_Object *child;
+ Evas_Object *child, *child2 = NULL;
+ const char *str;
if (win->parent)
{
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);
- while (((child = evas_object_bottom_get(win->evas))) &&
- (child != obj))
+ child = evas_object_bottom_get(win->evas);
+ while (child)
{
- evas_object_del(child);
- }
- while (((child = evas_object_top_get(win->evas))) &&
- (child != obj))
- {
- evas_object_del(child);
+ /* if the object we see *IS* the window object (because we are
+ * faking a parent object inside the canvas), then skip it and
+ * go to the next one */
+ if (child == obj)
+ {
+ child = evas_object_above_get(child);
+ if (!child) break;
+ }
+ /* if we are using the next object above from the previous loop */
+ if (child == child2)
+ {
+ /* this object has refcounts from the previous loop */
+ child2 = evas_object_above_get(child);
+ if (child2) evas_object_ref(child2);
+ evas_object_del(child);
+ /* so unref from previous loop */
+ evas_object_unref(child);
+ child = child2;
+ }
+ else
+ {
+ /* 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)
if (win->img_obj)
{
+ evas_object_event_callback_del_full
+ (win->img_obj, EVAS_CALLBACK_DEL, _elm_win_obj_callback_img_obj_del, win);
win->img_obj = NULL;
}
else
_elm_win_focus_highlight_shutdown(win);
eina_stringshare_del(win->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);
+
+ EINA_LIST_FREE(win->profile.names, str) eina_stringshare_del(str);
+ if (win->profile.name) eina_stringshare_del(win->profile.name);
+ if (win->profile.timer) ecore_timer_del(win->profile.timer);
+
free(win);
if ((!_elm_win_list) &&
}
}
-static void
-_elm_win_obj_callback_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;
- 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);
-}
static void
_elm_win_obj_callback_parent_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
evas_object_show(win->img_obj);
}
+ if (win->pointer.obj)
+ {
+ ecore_evas_show(win->pointer.ee);
+ evas_object_show(win->pointer.obj);
+ /* ecore_evas_wayland_pointer_set(win->pointer.ee, 10, 10); */
+ }
evas_object_show(obj);
}
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 !! */
}
else if (win->img_obj)
{
{
win->xwin = 0;
-#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+#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);
static void
_elm_win_xwin_update(Elm_Win *win)
{
+ const char *s;
+
_elm_win_xwindow_get(win);
if (win->parent)
{
if (!win->xwin) return; /* nothing more to do */
+ s = win->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);
+
+ s = win->role;
+ if (s) ecore_x_icccm_window_role_set(win->xwin, s);
+
+ // set window icon
+ if (win->icon)
+ {
+ void *data;
+
+ data = evas_object_image_data_get(win->icon, EINA_FALSE);
+ if (data)
+ {
+ Ecore_X_Icon ic;
+ int w = 0, h = 0, stride, x, y;
+ unsigned char *p;
+ unsigned int *p2;
+
+ evas_object_image_size_get(win->icon, &w, &h);
+ stride = evas_object_image_stride_get(win->icon);
+ if ((w > 0) && (h > 0) &&
+ (stride >= (int)(w * sizeof(unsigned int))))
+ {
+ ic.width = w;
+ ic.height = h;
+ ic.data = malloc(w * h * sizeof(unsigned int));
+
+ if (ic.data)
+ {
+ p = (unsigned char *)data;
+ p2 = (unsigned int *)ic.data;
+ for (y = 0; y < h; y++)
+ {
+ for (x = 0; x < w; x++)
+ {
+ *p2 = *((unsigned int *)p);
+ p += sizeof(unsigned int);
+ p2++;
+ }
+ p += (stride - (w * sizeof(unsigned int)));
+ }
+ ecore_x_netwm_icons_set(win->xwin, &ic, 1);
+ free(ic.data);
+ }
+ }
+ evas_object_image_data_set(win->icon, data);
+ }
+ }
+
switch (win->type)
{
case ELM_WIN_BASIC:
}
ecore_x_e_virtual_keyboard_state_set
(win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode);
+ if (win->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)
+ ecore_x_e_illume_indicator_state_set
+ (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
}
#endif
win->focus_highlight.prev = win->focus_highlight.cur;
}
-static void
+static void
_elm_win_frame_add(Elm_Win *win, const char *style)
{
evas_output_framespace_set(win->evas, 0, 22, 0, 26);
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",
+ 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",
+ 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",
+ 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",
+ 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",
+ edje_object_signal_callback_add(win->frame_obj, "elm,action,close",
"elm", _elm_win_frame_cb_close, win);
}
-static void
+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;
/* FIXME: Change mouse pointer */
- /* NB: 0,0 are dummy values. Wayland handles the move by itself */
- ecore_evas_move(win->ee, 0, 0);
+ /* 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);
}
-static void
+static void
_elm_win_frame_cb_resize_start(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source)
{
Elm_Win *win;
else
win->resize_location = 0;
- /* FIXME: Change to more generic wayland resize function */
if (win->resize_location > 0)
ecore_evas_wayland_resize(win->ee, win->resize_location);
}
-static void
+static void
_elm_win_frame_cb_minimize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
{
Elm_Win *win;
if (!(win = data)) return;
+ win->iconified = EINA_TRUE;
ecore_evas_iconified_set(win->ee, EINA_TRUE);
}
-static void
+static void
_elm_win_frame_cb_maximize(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
{
Elm_Win *win;
if (!(win = data)) return;
- ecore_evas_maximized_set(win->ee, EINA_TRUE);
+ if (win->maximized) win->maximized = EINA_FALSE;
+ else win->maximized = EINA_TRUE;
+ ecore_evas_maximized_set(win->ee, win->maximized);
}
-static void
+static void
_elm_win_frame_cb_close(void *data, Evas_Object *obj __UNUSED__, const char *sig __UNUSED__, const char *source __UNUSED__)
{
Elm_Win *win;
evas_object_del(win->win_obj);
}
+/*
+static void
+_elm_win_pointer_add(Elm_Win *win, const char *style)
+{
+ int mw, mh;
+
+ return;
+
+ win->pointer.ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 32, 32, 0);
+ ecore_evas_resize(win->pointer.ee, 32, 32);
+
+ 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);
+}
+*/
+
#ifdef ELM_DEBUG
static void
_debug_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
_elm_win_eval_subobjs(obj);
}
+static void
+_elm_win_obj_icon_callback_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+ Elm_Win *win = data;
+ if (win->icon == obj) win->icon = NULL;
+}
+
EAPI Evas_Object *
elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
{
CRITICAL(engine " engine creation failed. Trying default."); \
win->ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL); \
if (win->ee) \
- elm_engine_set(ecore_evas_engine_name_get(win->ee)); \
+ elm_config_preferred_engine_set(ecore_evas_engine_name_get(win->ee)); \
} while (0)
-#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+#define ENGINE_COMPARE(name) (_elm_preferred_engine && !strcmp(_elm_preferred_engine, name))
+
+ win->kbdmode = ELM_WIN_KEYBOARD_UNKNOWN;
+ win->indmode = ELM_WIN_INDICATOR_UNKNOWN;
switch (type)
{
{
win->ee = ecore_evas_ews_new(0, 0, 1, 1);
}
- else if (ENGINE_COMPARE(ELM_WAYLAND_SHM))
+ else if (ENGINE_COMPARE(ELM_WAYLAND_SHM))
{
- win->ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 1, 1, 0);
- win->evas = ecore_evas_get(win->ee);
+ 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");
}
- else if (ENGINE_COMPARE(ELM_WAYLAND_EGL))
+ else if (ENGINE_COMPARE(ELM_WAYLAND_EGL))
{
- win->ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 1, 1, 0);
- win->evas = ecore_evas_get(win->ee);
+ 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");
}
- else if (!strncmp(_elm_config->engine, "shot:", 5))
+ 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_config->engine + 5);
+ win->shot.info = eina_stringshare_add(_elm_preferred_engine + 5);
_shot_init(win);
}
#undef FALLBACK_TRY
evas_object_layer_set(win->win_obj, 50);
evas_object_pass_events_set(win->win_obj, EINA_TRUE);
- if (win->frame_obj)
+ if (win->frame_obj)
{
-// evas_object_clip_set(win->win_obj, 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_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)
Elm_Win *win;
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
- if (!win) return;
- ecore_evas_title_set(win->ee, title);
+ 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_set(win->frame_obj, "elm.text.title", title);
+ edje_object_part_text_escaped_set(win->frame_obj, "elm.text.title", win->title);
}
EAPI const char *
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
win = elm_widget_data_get(obj);
if (!win) return NULL;
- return ecore_evas_title_get(win->ee);
+ return win->title;
+}
+
+EAPI void
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
}
EAPI void
}
EAPI void
-elm_win_transparent_set(Evas_Object *obj, Eina_Bool transparent)
-{
- Elm_Win *win;
- ELM_CHECK_WIDTYPE(obj, widtype);
- win = elm_widget_data_get(obj);
- if (!win) return;
-
- if (win->frame_obj)
- {
- }
- else if (win->img_obj)
- {
- evas_object_image_alpha_set(win->img_obj, transparent);
- }
- else
- {
-#ifdef HAVE_ELEMENTARY_X
- if (win->xwin)
- {
- ecore_evas_transparent_set(win->ee, transparent);
- _elm_win_xwin_update(win);
- }
- else
-#endif
- ecore_evas_transparent_set(win->ee, transparent);
- }
-}
-
-EAPI Eina_Bool
-elm_win_transparent_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_transparent_get(win->ee);
-}
-
-EAPI void
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;
-
// YYY: handle if win->img_obj
-#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_preferred_engine, name))
if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
{
}
else
{
+ win->fullscreen = fullscreen;
ecore_evas_fullscreen_set(win->ee, fullscreen);
#ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update(win);
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
win = elm_widget_data_get(obj);
if (!win) return EINA_FALSE;
-
-#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+#define ENGINE_COMPARE(name) (!strcmp(_elm_preferred_engine, name))
if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
{
}
else
{
- return ecore_evas_fullscreen_get(win->ee);
+ return win->fullscreen;
}
#undef ENGINE_COMPARE
}
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);
#ifdef HAVE_ELEMENTARY_X
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
win = elm_widget_data_get(obj);
if (!win) return EINA_FALSE;
- return ecore_evas_maximized_get(win->ee);
+ return win->maximized;
}
EAPI void
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
if (!win) return;
+ win->iconified = iconified;
ecore_evas_iconified_set(win->ee, iconified);
#ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update(win);
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
win = elm_widget_data_get(obj);
if (!win) return EINA_FALSE;
- return ecore_evas_iconified_get(win->ee);
+ return win->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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+EAPI void
+elm_win_profiles_set(Evas_Object *obj, const char **profiles, unsigned int num_profiles)
+{
+ Elm_Win *win;
+ char **profiles_int;
+ const char *str;
+ unsigned int i, num;
+ Eina_List *l;
+
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ win = elm_widget_data_get(obj);
+ if (!win) return;
+ if (!profiles) return;
+
+ if (win->profile.timer) ecore_timer_del(win->profile.timer);
+ win->profile.timer = ecore_timer_add(0.1, _elm_win_profile_change_delay, win);
+ EINA_LIST_FREE(win->profile.names, str) eina_stringshare_del(str);
+
+ for (i = 0; i < num_profiles; i++)
+ {
+ if ((profiles[i]) &&
+ _elm_config_profile_exists(profiles[i]))
+ {
+ str = eina_stringshare_add(profiles[i]);
+ win->profile.names = eina_list_append(win->profile.names, str);
+ }
+ }
+
+ num = eina_list_count(win->profile.names);
+ profiles_int = alloca(num * sizeof(char *));
+
+ if (profiles_int)
+ {
+ i = 0;
+ EINA_LIST_FOREACH(win->profile.names, l, str)
+ {
+ if (str)
+ profiles_int[i] = strdup(str);
+ else
+ profiles_int[i] = NULL;
+ i++;
+ }
+ ecore_evas_profiles_set(win->ee, (const char **)profiles_int, i);
+ for (i = 0; i < num; i++)
+ {
+ if (profiles_int[i]) free(profiles_int[i]);
+ }
+ }
+ else
+ ecore_evas_profiles_set(win->ee, profiles, num_profiles);
+}
+
+EAPI const char *
+elm_win_profile_get(const Evas_Object *obj)
+{
+ Elm_Win *win;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ win = elm_widget_data_get(obj);
+ if (!win) return NULL;
+
+ return win->profile.name;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
+}
+
+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);
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwin_update(win);
+#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;
}
EAPI void
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
if (!win) return;
+ win->sticky = sticky;
ecore_evas_sticky_set(win->ee, sticky);
#ifdef HAVE_ELEMENTARY_X
_elm_win_xwin_update(win);
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
win = elm_widget_data_get(obj);
if (!win) return EINA_FALSE;
- return ecore_evas_sticky_get(win->ee);
+ return win->sticky;
}
EAPI void
return EINA_FALSE;
}
+// WRAPPER: Temperary added.
+EAPI void
+elm_win_indicator_state_set(Evas_Object *obj, Elm_Win_Indicator_Mode mode)
+{
+ elm_win_indicator_mode_set(obj, mode);
+}
+
+EAPI void
+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;
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwindow_get(win);
+#endif
+ win->indmode = mode;
+#ifdef HAVE_ELEMENTARY_X
+ if (win->xwin)
+ {
+ if (win->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)
+ ecore_x_e_illume_indicator_state_set
+ (win->xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
+ }
+#endif
+}
+
+// WRAPPER: Temperary added.
+EAPI Elm_Win_Indicator_Mode
+elm_win_indicator_state_get(const Evas_Object *obj)
+{
+ return elm_win_indicator_mode_get(obj);
+}
+
+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;
+}
+
+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;
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwindow_get(win);
+ if (win->xwin)
+ {
+ if (win->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)
+ ecore_x_e_illume_indicator_opacity_set
+ (win->xwin, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
+ else if (win->ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
+ ecore_x_e_illume_indicator_opacity_set
+ (win->xwin, ECORE_X_ILLUME_INDICATOR_TRANSPARENT);
+
+ }
+#endif
+}
+
+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;
+}
+
EAPI void
elm_win_screen_position_get(const Evas_Object *obj, int *x, int *y)
{
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
if (!win) return;
-#ifdef HAVE_ELEMENTARY_X
- _elm_win_xwindow_get(win);
- if (skip)
- {
- if (win->xwin)
- {
- Ecore_X_Window_State states[2];
-
- ecore_x_icccm_hints_set(win->xwin, 0, 0, 0, 0, 0, 0, 0);
- 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);
- }
- }
-#else
- (void) skip;
-#endif
+ win->skip_focus = skip;
+ ecore_evas_focus_skip_set(win->ee, skip);
}
EAPI void
}
static void
+_elm_inwin_text_set_hook(Evas_Object *obj, const char *item, const char *text)
+{
+ 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);
+}
+
+static const char *
+_elm_inwin_text_get_hook(const Evas_Object *obj, const char *item)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ if (!item || !wd || !wd->frm) return NULL;
+ return edje_object_part_text_get(wd->frm, item);
+}
+
+static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
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);
if (!win) return EINA_FALSE;
if (!win->ee) return EINA_FALSE;
- if(!ecore_evas_extn_socket_listen(win->ee, svcname, svcnum, svcsys))
+ if (!ecore_evas_extn_socket_listen(win->ee, svcname, svcnum, svcsys))
return EINA_FALSE;
return EINA_TRUE;
}
-/* windowing spcific calls - shall we do this differently? */
+/* windowing specific calls - shall we do this differently? */
static Ecore_X_Window
_elm_ee_win_get(const Evas_Object *obj)
#endif
return 0;
}
+
+EAPI void
+elm_win_floating_mode_set(Evas_Object *obj, Eina_Bool floating)
+{
+ Elm_Win *win;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ win = elm_widget_data_get(obj);
+ if (!win) return;
+ if (floating == win->floating) return;
+#ifdef HAVE_ELEMENTARY_X
+ _elm_win_xwindow_get(win);
+#endif
+ win->floating = floating;
+#ifdef HAVE_ELEMENTARY_X
+ if (win->xwin)
+ {
+ if (win->floating)
+ ecore_x_e_illume_window_state_set
+ (win->xwin, ECORE_X_ILLUME_WINDOW_STATE_FLOATING);
+ else
+ ecore_x_e_illume_window_state_set
+ (win->xwin, ECORE_X_ILLUME_WINDOW_STATE_NORMAL);
+ }
+#endif
+}
+
+EAPI Eina_Bool
+elm_win_floating_mode_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->floating;
+}
+