elementary: oops revert.
[framework/uifw/elementary.git] / src / lib / elm_win.c
index 3f32ef2..37ae0a0 100644 (file)
@@ -33,7 +33,13 @@ struct _Elm_Win
    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;
 
@@ -84,6 +90,8 @@ static void _elm_win_frame_cb_minimize(void *data, Evas_Object *obj __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";
@@ -329,7 +337,7 @@ _elm_win_focus_in(Ecore_Evas *ee)
    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++;
@@ -485,6 +493,11 @@ _elm_win_obj_callback_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UN
      {
         evas_object_hide(win->img_obj);
      }
+   if (win->pointer.obj)
+     {
+        evas_object_hide(win->pointer.obj);
+        ecore_evas_hide(win->pointer.ee);
+     }
 }
 
 static void
@@ -617,6 +630,12 @@ _elm_win_obj_intercept_show(void *data, Evas_Object *obj)
      {
         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);
 }
 
@@ -1380,7 +1399,6 @@ _elm_win_frame_cb_resize_start(void *data, Evas_Object *obj __UNUSED__, const ch
    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);
 }
@@ -1412,6 +1430,25 @@ _elm_win_frame_cb_close(void *data, Evas_Object *obj __UNUSED__, const char *sig
    evas_object_del(win->win_obj);
 }
 
+static void 
+_elm_win_pointer_add(Elm_Win *win, const char *style)
+{
+   int mw, mh;
+
+   win->pointer.ee = ecore_evas_wayland_shm_new(NULL, 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);
+   printf("ELM Win Pointer Size: %d %d\n", 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)
@@ -1521,7 +1558,7 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
          if (win->ee)                                                   \
             elm_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_config->engine && !strcmp(_elm_config->engine, name))
 
    switch (type)
      {
@@ -1667,16 +1704,18 @@ elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type)
         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->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)) 
           {
              win->ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 1, 1, 0);
-             win->evas = ecore_evas_get(win->ee);
+            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))
           {
@@ -1869,7 +1908,7 @@ 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) return;
+   if (!win || !title) return;
    ecore_evas_title_set(win->ee, title);
    if (win->frame_obj)
      edje_object_part_text_set(win->frame_obj, "elm.text.title", title);
@@ -2765,6 +2804,25 @@ _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)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+
+   if (!wd || !item) return;
+   edje_object_part_text_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);
@@ -2819,6 +2877,8 @@ elm_win_inwin_add(Evas_Object *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);