Migrating source code to RSA from private.
[framework/uifw/e17.git] / src / bin / e_manager.c
index 0b7c25d..917dc7e 100644 (file)
@@ -16,6 +16,7 @@ static Eina_Bool _e_manager_frame_extents_free_cb(const Eina_Hash *hash __UNUSED
                                                  const void *key __UNUSED__,
                                                  void *data, void *fdata __UNUSED__);
 static E_Manager *_e_manager_get_for_root(Ecore_X_Window root);
+static Eina_Bool _e_manager_clear_timer(void *data);
 #if 0 /* use later - maybe */
 static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev);
 static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev);
@@ -86,24 +87,13 @@ e_manager_new(Ecore_X_Window root, int num)
    E_Manager *man;
 
    if (!ecore_x_window_manage(root)) return NULL;
-   ecore_x_window_background_color_set(root, 0, 0, 0);
    man = E_OBJECT_ALLOC(E_Manager, E_MANAGER_TYPE, _e_manager_free);
    if (!man) return NULL;
    managers = eina_list_append(managers, man);
    man->root = root;
    man->num = num;
    ecore_x_window_size_get(man->root, &(man->w), &(man->h));
-   if (e_config->use_virtual_roots)
-     {
-       man->win = ecore_x_window_override_new(man->root, man->x, man->y, man->w, man->h);
-       ecore_x_icccm_title_set(man->win, "Enlightenment Manager");
-       ecore_x_netwm_name_set(man->win, "Enlightenment Manager");
-       ecore_x_window_raise(man->win);
-     }
-   else
-     {
-       man->win = man->root;
-     }
+   man->win = man->root;
 
    man->handlers = 
      eina_list_append(man->handlers, 
@@ -148,6 +138,9 @@ e_manager_new(Ecore_X_Window root, int num)
 
    man->pointer = e_pointer_window_new(man->root, 1);
 
+   ecore_x_window_background_color_set(man->root, 0, 0, 0);
+   
+   man->clear_timer = ecore_timer_add(10.0, _e_manager_clear_timer, man);
    return man;
 }
 
@@ -680,6 +673,30 @@ e_manager_comp_src_move_unlock(E_Manager *man, E_Manager_Comp_Source *src)
 }
 #endif
 
+#ifdef _F_COMP_COMPOSITE_MODE_
+EAPI void
+e_manager_comp_composite_mode_set(E_Manager *man, E_Zone *zone, Eina_Bool set)
+{
+   E_OBJECT_CHECK(man);
+   E_OBJECT_CHECK(zone);
+   E_OBJECT_TYPE_CHECK(man, E_MANAGER_TYPE);
+   E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
+   if (!man->comp) return;
+   man->comp->func.composite_mode_set(man->comp->data, man, zone, set);
+}
+
+EAPI Eina_Bool
+e_manager_comp_composite_mode_get(E_Manager *man, E_Zone *zone)
+{
+   E_OBJECT_CHECK_RETURN(man, EINA_FALSE);
+   E_OBJECT_CHECK_RETURN(zone, EINA_FALSE);
+   E_OBJECT_TYPE_CHECK_RETURN(man, E_MANAGER_TYPE, EINA_FALSE);
+   E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, EINA_FALSE);
+   if (!man->comp) return EINA_FALSE;
+   return man->comp->func.composite_mode_get(man->comp->data, man, zone);
+}
+#endif /* _F_COMP_COMPOSITE_MODE_ */
+
 EAPI void
 e_manager_comp_event_resize_send(E_Manager *man)
 {
@@ -758,6 +775,7 @@ _e_manager_free(E_Manager *man)
      }
    if (man->pointer) e_object_del(E_OBJECT(man->pointer));
    managers = eina_list_remove(managers, man);
+   if (man->clear_timer) ecore_timer_del(man->clear_timer);
    free(man);
 }
 
@@ -1045,9 +1063,7 @@ _e_manager_windows_group_raise (E_Border* bd)
         leader_win = bd->client.icccm.client_leader;
         if (leader_win)
           {
-             Eina_List* border_list;
              Eina_List* restack_list;
-             Eina_List *l;   
              E_Border *temp_bd;
              E_Border *top_bd;
              E_Border_List *bl;
@@ -1205,13 +1221,16 @@ _e_manager_cb_client_message(void *data __UNUSED__, int ev_type __UNUSED__, void
                          e_border_focus_set(bd, 1, 1);
                        else
                          {
-                            Eina_List* l = NULL;
                             E_Border* temp_bd = NULL;
                             E_Border_List *bl;
 
                             bl = e_container_border_list_last(bd->zone->container);
                             while ((temp_bd = e_container_border_list_prev(bl)))
                               {
+                                 if ((temp_bd->x >= bd->zone->w) || (temp_bd->y >= bd->zone->h)) continue;
+                                 if (((temp_bd->x + temp_bd->w) <= 0) || ((temp_bd->y + temp_bd->h) <= 0)) continue;
+                                 if (temp_bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) continue;
+
                                  if ((!temp_bd->iconic) && (temp_bd->visible) && (temp_bd->desk == bd->desk) &&
                                      (temp_bd->client.icccm.accepts_focus || temp_bd->client.icccm.take_focus) &&
                                      (temp_bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DOCK) &&
@@ -1220,10 +1239,7 @@ _e_manager_cb_client_message(void *data __UNUSED__, int ev_type __UNUSED__, void
                                      (temp_bd->client.netwm.type != ECORE_X_WINDOW_TYPE_SPLASH) &&
                                      (temp_bd->client.netwm.type != ECORE_X_WINDOW_TYPE_DESKTOP))
                                    {
-                                      if (bd == temp_bd)
-                                        {
-                                           e_border_focus_set(bd, 1, 1);
-                                        }
+                                      e_border_focus_set(temp_bd, 1, 1);
                                       break;
                                    }
                               }
@@ -1263,6 +1279,14 @@ _e_manager_get_for_root(Ecore_X_Window root)
    return eina_list_data_get(managers);
 }
 
+static Eina_Bool
+_e_manager_clear_timer(void *data)
+{
+   E_Manager *man = data;
+   ecore_x_window_background_color_set(man->root, 0, 0, 0);
+   man->clear_timer = NULL;
+   return EINA_FALSE;
+}
 
 #if 0 /* use later - maybe */
 static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev){return 1;}