flat_navi: manage highlight 'cycle' in navigator not in flat_navi
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Mon, 12 Jan 2015 13:49:27 +0000 (14:49 +0100)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Mon, 12 Jan 2015 14:09:53 +0000 (15:09 +0100)
include/flat_navi.h
src/flat_navi.c
src/navigator.c

index 495098a..dbc09b1 100644 (file)
@@ -41,9 +41,7 @@ void flat_navi_context_free(FlatNaviContext *ctx);
  *
  * @return AtspiAccessible* pointer to current object
  *
- * @note If current element is last in line function advances to
- * next line to first element.
- * @note If current element is last in last line, function returns NULL
+ * @note If current element is last in line function returns NULL
  */
 AtspiAccessible *flat_navi_context_next(FlatNaviContext *ctx);
 
@@ -55,13 +53,29 @@ AtspiAccessible *flat_navi_context_next(FlatNaviContext *ctx);
  *
  * @return AtspiAccessible* pointer to current object
  *
- * @note If current element is first in line function advances to
- * previous line to last element.
- * @note If current element is first in first line, function returns NULL
+ * @note If current element is first in line function returns NULL
  */
 AtspiAccessible *flat_navi_context_prev(FlatNaviContext *ctx);
 
 /**
+ * Advances to last element in current line.
+ *
+ * @param ctx FlatNaviContext
+ *
+ * @return AtspiAccessible* pointer to current object
+ */
+AtspiAccessible *flat_navi_context_last(FlatNaviContext *ctx);
+
+/**
+ * Advances to first element in current line.
+ *
+ * @param ctx FlatNaviContext
+ *
+ * @return AtspiAccessible* pointer to current object
+ */
+AtspiAccessible *flat_navi_context_first(FlatNaviContext *ctx);
+
+/**
  * Get current element
  *
  * @param ctx FlatNaviContext
@@ -132,15 +146,4 @@ AtspiAccessible *flat_navi_context_line_first(FlatNaviContext *ctx);
  */
 AtspiAccessible *flat_navi_context_line_last(FlatNaviContext *ctx);
 
-/**
- * Advances to the last element of the last line
- *
- * @param ctx FlatNaviContext
- *
- * @return AtspiAccessible* pointer to current object
- *
- * @note current element will be last of line
- */
-AtspiAccessible *flat_navi_context_line_last_object_last(FlatNaviContext *ctx);
-
 #endif /* end of include guard: FLAT_NAVI_H_ */
index 0d89a0d..8ffe848 100644 (file)
@@ -308,23 +308,11 @@ AtspiAccessible *flat_navi_context_next(FlatNaviContext *ctx)
    Eina_List *new = eina_list_next(ctx->current);
 
    if (new)
-   {
-     ctx->current = new;
-   }
-   else
-   {
-     AtspiAccessible *next = flat_navi_context_line_next(ctx);
-     if (next)
-     {
-         return next;
-     }
-     else
      {
-         return flat_navi_context_line_first(ctx);
+        ctx->current = new;
+        return eina_list_data_get(ctx->current);
      }
-   }
-
-   return eina_list_data_get(ctx->current);
+   return NULL;
 }
 
 AtspiAccessible *flat_navi_context_prev(FlatNaviContext *ctx)
@@ -332,17 +320,35 @@ AtspiAccessible *flat_navi_context_prev(FlatNaviContext *ctx)
    Eina_List *new = eina_list_prev(ctx->current);
 
    if (new)
-     ctx->current = new;
-   else
      {
-         if (!flat_navi_context_line_prev(ctx))
-         {
-            return flat_navi_context_line_last_object_last(ctx);
-         }
-        ctx->current = eina_list_last(eina_list_data_get(ctx->current_line));
+        ctx->current = new;
+        return eina_list_data_get(ctx->current);
      }
+   return NULL;
+}
 
-   return eina_list_data_get(ctx->current);
+AtspiAccessible *flat_navi_context_first(FlatNaviContext *ctx)
+{
+   Eina_List *new = eina_list_data_get(ctx->current_line);
+
+   if (new)
+     {
+        ctx->current = new;
+        return eina_list_data_get(ctx->current);
+     }
+   return NULL;
+}
+
+AtspiAccessible *flat_navi_context_last(FlatNaviContext *ctx)
+{
+   Eina_List *new = eina_list_last(ctx->current);
+
+   if (new)
+     {
+        ctx->current = new;
+        return eina_list_data_get(ctx->current);
+     }
+   return NULL;
 }
 
 AtspiAccessible *flat_navi_context_line_next(FlatNaviContext *ctx)
@@ -386,13 +392,3 @@ AtspiAccessible *flat_navi_context_line_last(FlatNaviContext *ctx)
 
    return eina_list_data_get(ctx->current);
 }
-
-AtspiAccessible *flat_navi_context_line_last_object_last(FlatNaviContext *ctx)
-{
-   Eina_List *new = eina_list_last(ctx->current_line);
-
-   ctx->current_line = new;
-   ctx->current = eina_list_last(eina_list_data_get(ctx->current_line));
-
-   return eina_list_data_get(ctx->current);
-}
index 55491b5..176a4b0 100644 (file)
@@ -279,12 +279,22 @@ static void _focus_widget(Gesture_Info *info)
 
 static void _focus_next(void)
 {
+   AtspiAccessible *obj;
    if (!context)
      {
         ERROR("No navigation context created");
         return;
      }
-   AtspiAccessible *obj = flat_navi_context_next(context);
+   obj = flat_navi_context_next(context);
+   // try next line
+   if (!obj)
+     obj = flat_navi_context_line_next(context);
+   // try 'cycle' objects in context
+   if (!obj)
+     {
+        flat_navi_context_line_first(context);
+        obj = flat_navi_context_first(context);
+     }
    if (obj)
      _current_highlight_object_set(obj);
    else
@@ -293,12 +303,26 @@ static void _focus_next(void)
 
 static void _focus_prev(void)
 {
+   AtspiAccessible *obj;
    if (!context)
      {
         ERROR("No navigation context created");
         return;
      }
-   AtspiAccessible *obj = flat_navi_context_prev(context);
+   obj = flat_navi_context_prev(context);
+   // try previous line
+   if (!obj)
+     {
+        obj = flat_navi_context_line_prev(context);
+        if (obj)
+           obj = flat_navi_context_last(context);
+     }
+   // try 'cycle' objects in context
+   if (!obj)
+     {
+        flat_navi_context_line_last(context);
+        obj = flat_navi_context_last(context);
+     }
    if (obj)
      _current_highlight_object_set(obj);
    else