[button,panes] Merged and updated the Button and Panes.
authorRajeev Ranjan <rajeev.r@samsung.com>
Wed, 5 Jan 2011 15:12:39 +0000 (20:42 +0530)
committerRajeev Ranjan <rajeev.r@samsung.com>
Wed, 5 Jan 2011 15:12:39 +0000 (20:42 +0530)
data/themes/default.edc
src/bin/test_button.c
src/bin/test_panes.c
src/lib/Elementary.h.in
src/lib/elm_button.c
src/lib/elm_panes.c

index 617092a..caf9b51 100644 (file)
@@ -707,6 +707,7 @@ collections {
         part { name: "button_image";
            mouse_events: 1;
            description { state: "default" 0.0;
+          min: 15 15;
               image {
                  normal: "bt_base2.png";
                  border: 7 7 7 7;
@@ -741,7 +742,7 @@ collections {
                fixed: 1 0;
               visible: 1;
               aspect: 1.0 1.0;
-              aspect_preference: VERTICAL;
+//            aspect_preference: VERTICAL;
               rel2.offset: 4 -5;
            }
            description { state: "icononly" 0.0;
@@ -749,10 +750,10 @@ collections {
                fixed: 0 0;
               visible: 1;
               align: 0.5 0.5;
-              aspect: 1.0 1.0;
+//            aspect: 1.0 1.0;
               rel2.offset: -5 -5;
               rel2.relative: 1.0 1.0;
-              aspect_preference: VERTICAL;
+//            aspect_preference: VERTICAL;
            }
         }
          part {
@@ -774,6 +775,7 @@ collections {
                  size:     10;
                  min:      0 0;
                  align:    0.5 0.5;
+                  text_class: "button";
               }
            }
            description { state: "visible" 0.0;
@@ -839,7 +841,6 @@ collections {
             }
             description { state: "clicked" 0.0;
                inherit:  "default" 0.0;
-               visible: 1;
                color: 255 255 255 255;
             }
          }
@@ -871,11 +872,27 @@ collections {
         program {
            name:   "button_unclick";
            signal: "mouse,up,1";
-           source: "over2";
+           source: "over3";
            action: SIGNAL_EMIT "elm,action,unpress" "";
            after: "button_unclick_anim";
         }
         program {
+           name:   "button_pressed_anim";
+           signal: "elm,anim,activate";
+           source: "elm";
+           action: STATE_SET "clicked" 0.0;
+           target: "button_image";
+           target: "over3";
+           after: "button_unpressed_anim";
+        }
+        program {
+           name:   "button_unpressed_anim";
+           action: STATE_SET "default" 0.0;
+           transition: DECELERATE 0.5;
+           target: "button_image";
+           target: "over3";
+        }
+        program {
            name:   "button_unclick_anim";
            action: STATE_SET "default" 0.0;
            target: "button_image";
@@ -897,7 +914,7 @@ collections {
         }
         program {
            name:   "button_unclick3";
-           signal: "mouse,up,1";
+           signal: "mouse,clicked,1";
            source: "over2";
            action: SIGNAL_EMIT "elm,action,click" "";
         }
@@ -1096,6 +1113,7 @@ collections {
                  size:     10;
                  min:      0 0;
                  align:    0.5 0.5;
+                  text_class: "button";
               }
            }
            description { state: "visible" 0.0;
@@ -1377,6 +1395,7 @@ collections {
                  size:     10;
                  min:      0 0;
                  align:    0.5 0.5;
+                  text_class: "button";
               }
            }
            description { state: "visible" 0.0;
@@ -1483,6 +1502,7 @@ collections {
         part { name: "button_image";
            mouse_events: 1;
            description { state: "default" 0.0;
+          min: 15 15;
            color: 255 255 255 0;
               image {
                  normal: "bt_base2.png";
@@ -1557,6 +1577,7 @@ collections {
                  size:     10;
                  min:      0 0;
                  align:    0.5 0.5;
+                  text_class: "button";
               }
            }
            description { state: "visible" 0.0;
@@ -23798,13 +23819,16 @@ collections {
          image: "arrow_right.png" COMP;
          image: "arrow_left.png" COMP;
       }
+     script {
+        public state_pair = 0; //0:both content are not set, 1:both content are set
+     }
      parts
        {
           part
             {
                name: "whole";
                type: RECT;
-               mouse_events: 0;
+               mouse_events: 1;
                description
                  {
                     state: "default" 0.0;
@@ -23873,8 +23897,8 @@ collections {
                y: 0 0 0;
             }
            description { state: "default" 0.0;
-               max: 15 9999;
-               min: 15 100;
+               max: 999;
+               min: 0 100;
                rel1.relative: 0.0 0.5;
                rel2.relative: 1.0 0.5;
               image {
@@ -23883,11 +23907,21 @@ collections {
               }
                image.middle: SOLID;
            }
+       description { state: "default" 0.1;
+          inherit: "default" 0.0;
+          max: 15 999;
+          min: 15 100;
+       }
            description { state: "clicked" 0.0;
               inherit: "default" 0.0;
               image.normal: "bt_base1.png";
                image.middle: SOLID;
            }
+       description { state: "clicked" 0.1;
+          inherit: "default" 0.1;
+          image.normal: "bt_base1.png";
+          image.middle: SOLID;
+       }
            description { state: "disabled" 0.0;
               inherit:  "default" 0.0;
               image {
@@ -23895,6 +23929,13 @@ collections {
                  border: 4 4 4 4;
               }
            }
+       description { state: "disabled" 0.1;
+          inherit:  "default" 0.1;
+          image {
+             normal: "bt_dis_base.png";
+             border: 4 4 4 4;
+         }
+      }
         }
         part {   name: "over1";
            mouse_events: 0;
@@ -23955,6 +23996,7 @@ collections {
          //Arrow
          part {
             name: "arrow_right";
+            mouse_events: 0;
             description { state: "default" 0.0;
                 min: 45 45;
                 max: 45 45;
@@ -23987,6 +24029,7 @@ collections {
          }
         part {
             name: "arrow_left";
+            mouse_events: 0;
             description { state: "default" 0.0;
                 min: 45 45;
                 max: 45 45;
@@ -24017,6 +24060,18 @@ collections {
                 rel2.offset: (-45/2 - 20) 45/2;
             }
          }
+         part { name: "movement.decider";
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1.to: "elm.bar";
+               rel2.to: "elm.bar";
+               visible: 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
 
        }
         programs {
@@ -24030,8 +24085,12 @@ collections {
         }
         program {
            name:   "button_click_anim";
-           action: STATE_SET "clicked" 0.0;
-           target: "elm.bar";
+       script {
+          if(get_int(state_pair) == 1)
+             set_state(PART:"elm.bar", "clicked", 0.1);
+          else
+             set_state(PART:"elm.bar", "clicked", 0.0);                                
+       }
         }
         program {
            name:   "button_unclick";
@@ -24043,8 +24102,12 @@ collections {
         }
         program {
            name:   "button_unclick_anim";
-           action: STATE_SET "default" 0.0;
-           target: "elm.bar";
+          script {
+          if(get_int(state_pair) == 1)
+             set_state(PART:"elm.bar", "default", 0.1);
+          else
+             set_state(PART:"elm.bar", "default", 0.0);                                
+       }
         }
         program {
            name:   "button_click2";
@@ -24113,6 +24176,48 @@ collections {
             target: "arrow_left";
             transition: DECELERATE 0.4;
         }
+        //fix the pane
+        program {
+           name:   "panes_fixed";
+           signal: "elm.panes.fixed";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "movement.decider";
+           target: "elm.bar";
+        }
+        //allow the movement by interaction
+        program {
+           name:   "panes_unfixed";
+           signal: "elm.panes.unfixed";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "movement.decider";
+           target: "elm.bar";
+        }
+        program {
+           name:   "panes_pair";
+           signal: "elm.panes.pair";
+           source: "elm";
+           script {
+              new st[31];
+              new Float:vl;
+              set_int(state_pair, 1);
+              get_state(PART:"elm.bar", st, 30, vl);
+              set_state(PART:"elm.bar", st, 0.1);
+           }
+        }
+        program {
+           name:   "panes_unpair";
+           signal: "elm.panes.unpair";
+           source: "elm";
+           script {
+              new st[31];
+              new Float:vl;
+              set_int(state_pair, 0);
+              get_state(PART:"elm.bar", st, 30, vl);
+              set_state(PART:"elm.bar", st, 0.0);
+           }
+        }
       }
   }
 
@@ -24129,13 +24234,16 @@ collections {
          image: "arrow_up.png" COMP;
          image: "arrow_down.png" COMP;
       }
+     script {
+        public state_pair = 0; //0:both content are not set, 1:both content are set
+     }
      parts
        {
           part
             {
                name: "whole";
                type: RECT;
-               mouse_events: 0;
+               mouse_events: 1;
                description
                  {
                     state: "default" 0.0;
@@ -24204,8 +24312,8 @@ collections {
                y: 1 1 1;
             }
            description { state: "default" 0.0;
-               max: 999 15;
-               min: 100 15;
+               max: 999 0;
+               min: 100 0;
                rel1.relative: 0.5 0.0;
                rel2.relative: 0.5 1.0;
               image {
@@ -24214,11 +24322,21 @@ collections {
               }
                image.middle: SOLID;
            }
+       description { state: "default" 0.1;
+          inherit: "default" 0.0;
+          max: 999 15;
+          min: 100 15;
+       }
            description { state: "clicked" 0.0;
               inherit: "default" 0.0;
               image.normal: "bt_base1.png";
                image.middle: SOLID;
            }
+       description { state: "clicked" 0.1;
+          inherit: "default" 0.1;
+          image.normal: "bt_base1.png";
+          image.middle: SOLID;
+       }
            description { state: "disabled" 0.0;
               inherit:  "default" 0.0;
               image {
@@ -24226,6 +24344,13 @@ collections {
                  border: 4 4 4 4;
               }
            }
+       description { state: "disabled" 0.1;
+          inherit:  "default" 0.1;
+          image {
+             normal: "bt_dis_base.png";
+             border: 4 4 4 4;
+          }
+       }
         }
         part {   name: "over1";
            mouse_events: 0;
@@ -24348,6 +24473,19 @@ collections {
                 rel2.offset: 45/2 (-45/2 - 20);
             }
          }
+         part {
+            name: "movement.decider";
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1.to: "elm.bar";
+               rel2.to: "elm.bar";
+               visible: 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
 
        }
         programs {
@@ -24359,11 +24497,15 @@ collections {
            after: "button_click_anim";
             after: "arrow_anim_start";
         }
-        program {
-           name:   "button_click_anim";
-           action: STATE_SET "clicked" 0.0;
-           target: "elm.bar";
-        }
+    program {
+       name:   "button_click_anim";
+       script {
+          if(get_int(state_pair) == 1)
+             set_state(PART:"elm.bar", "clicked", 0.1);
+          else
+             set_state(PART:"elm.bar", "clicked", 0.0);                                
+       }
+    }
         program {
            name:   "button_unclick";
            signal: "mouse,up,1";
@@ -24372,11 +24514,15 @@ collections {
            after: "button_unclick_anim";
             after: "arrow_anim_stop";
         }
-        program {
-           name:   "button_unclick_anim";
-           action: STATE_SET "default" 0.0;
-           target: "elm.bar";
-        }
+    program {
+       name:   "button_unclick_anim";
+       script {
+          if(get_int(state_pair) == 1)
+             set_state(PART:"elm.bar", "default", 0.1);
+          else
+             set_state(PART:"elm.bar", "default", 0.0);                                
+       }
+    }
         program {
            name:   "button_click2";
            signal: "mouse,down,1";
@@ -24444,6 +24590,48 @@ collections {
             target: "arrow_left";
             transition: DECELERATE 0.4;
         }
+        //fix the pane
+        program {
+           name:   "panes_fixed";
+           signal: "elm.panes.fixed";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "movement.decider";
+           target: "elm.bar";
+        }
+        //allow the movement by interaction
+        program {
+           name:   "panes_unfixed";
+           signal: "elm.panes.unfixed";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "movement.decider";
+           target: "elm.bar";
+        }
+        program {
+           name:   "panes_pair";
+           signal: "elm.panes.pair";
+           source: "elm";
+           script {
+              new st[31];
+              new Float:vl;
+              set_int(state_pair, 1);
+              get_state(PART:"elm.bar", st, 30, vl);
+              set_state(PART:"elm.bar", st, 0.1);
+           }
+        }
+        program {
+           name:   "panes_unpair";
+           signal: "elm.panes.unpair";
+           source: "elm";
+           script {
+              new st[31];
+              new Float:vl;
+              set_int(state_pair, 0);
+              get_state(PART:"elm.bar", st, 30, vl);
+              set_state(PART:"elm.bar", st, 0.0);
+           }
+        }
       }
   }
 
index ea07666..caf9a05 100644 (file)
@@ -1,21 +1,40 @@
 #include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
 #ifndef ELM_LIB_QUICKLAUNCH
 static void
-_bt_repeated(void *data, Evas_Object *obj, void *event_info)
+_bt_repeated(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   static int count;
+   char buf[16];
+
+   snprintf(buf, sizeof(buf), "count=%d", count++);
+   if (count >= 10000)
+     count = 0;
+   elm_button_label_set(obj, buf);
+}
+
+static void
+_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   int param = (int)(data);
+
+   printf("clicked event on Button:%d\n", param);
+}
+
+static void
+_bt_unpressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
-       static int count;
-       char buf[16];
+   int param = (int)(data);
 
-       snprintf(buf, sizeof(buf), "count=%d", count++);
-       if (count >= 10000)
-               count = 0;
-       elm_button_label_set(obj, buf);
+   printf("unpressed event on Button:%d\n", param);
 }
 
 void
-test_button(void *data, Evas_Object *obj, void *event_info)
+test_button(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
-   Evas_Object *win, *bg, *bx, *ic, *bt;
+   Evas_Object *win, *bg, *scr, *bx, *ic, *bt;
    char buf[PATH_MAX];
 
    win = elm_win_add(NULL, "buttons", ELM_WIN_BASIC);
@@ -27,9 +46,16 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_show(bg);
 
+   scr = elm_scroller_add(win);
+   elm_scroller_bounce_set(scr, EINA_FALSE, EINA_TRUE);
+   elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+   elm_win_resize_object_add(win, scr);
+   evas_object_show(scr);
+   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
    bx = elm_box_add(win);
    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   elm_win_resize_object_add(win, bx);
+   elm_scroller_content_set(scr, bx);
    evas_object_show(bx);
 
    ic = elm_icon_add(win);
@@ -39,17 +65,21 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    bt = elm_button_add(win);
    elm_button_label_set(bt, "Icon sized to button");
    elm_button_icon_set(bt, ic);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)1);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)1);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
 
-   ic = elm_icon_add(win);
+   ic = elm_icon_add(bx);
    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(ic, buf, NULL);
    elm_icon_scale_set(ic, 0, 0);
    bt = elm_button_add(win);
    elm_button_label_set(bt, "Icon no scale");
    elm_button_icon_set(bt, ic);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)2);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)2);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
@@ -62,6 +92,8 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    elm_button_label_set(bt, "Disabled Button");
    elm_button_icon_set(bt, ic);
    elm_object_disabled_set(bt, 1);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)3);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)3);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
@@ -73,12 +105,16 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    bt = elm_button_add(win);
    elm_button_icon_set(bt, ic);
    elm_object_disabled_set(bt, 1);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)4);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)4);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
    
    bt = elm_button_add(win);
    elm_button_label_set(bt, "Label Only");
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)5);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)5);
    elm_box_pack_end(bx, bt);
    evas_object_smart_callback_add(bt, "repeated", _bt_repeated, NULL);
    elm_button_autorepeat_set(bt, 1);
@@ -92,14 +128,17 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    elm_icon_scale_set(ic, 0, 0);
    bt = elm_button_add(win);
    elm_button_icon_set(bt, ic);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)6);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)6);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
 
-
    bt = elm_button_add(win);
    elm_object_style_set(bt, "anchor");
    elm_button_label_set(bt, "Anchor style");
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)7);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)7);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
 
@@ -110,11 +149,12 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    bt = elm_button_add(win);
    elm_object_style_set(bt, "anchor");
    elm_button_icon_set(bt, ic);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)8);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)8);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
 
-
    ic = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(ic, buf, NULL);
@@ -123,10 +163,12 @@ test_button(void *data, Evas_Object *obj, void *event_info)
    elm_object_style_set(bt, "anchor");
    elm_button_icon_set(bt, ic);
    elm_object_disabled_set(bt, 1);
+   evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)9);
+   evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)9);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_show(ic);
-   
+   evas_object_resize(win, 320, 480);
    evas_object_show(win);
 }
 #endif
index 44db9a7..b0800d6 100644 (file)
@@ -1,29 +1,32 @@
 #include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
 #ifndef ELM_LIB_QUICKLAUNCH
 
 static double size = 0.0;
 
 static void
-_press(void *data, Evas_Object *obj, void *event_info)
+_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
     printf("press\n");
 }
 
 static void
-_unpress(void *data, Evas_Object *obj, void *event_info)
+_unpress(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
 {
     printf("unpress, size : %f\n", elm_panes_content_left_size_get(obj));
 }
 
 static void
-_clicked(void *data, Evas_Object *obj, void *event_info)
+_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
     printf("clicked\n");
 }
 
 
 static void
-_clicked_double(void *data, Evas_Object *obj, void *event_info)
+_clicked_double(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
 {
     printf("clicked double\n");
     if(elm_panes_content_left_size_get(obj) > 0)
@@ -37,7 +40,7 @@ _clicked_double(void *data, Evas_Object *obj, void *event_info)
 
 
 void
-test_panes(void *data, Evas_Object *obj, void *event_info)
+test_panes(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
    Evas_Object *win, *bg, *panes, *panes_h, *bt;
 
@@ -48,6 +51,7 @@ test_panes(void *data, Evas_Object *obj, void *event_info)
    bg = elm_bg_add(win);
    elm_win_resize_object_add(win, bg);
    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
    evas_object_show(bg);
 
    panes = elm_panes_add(win);
index 2258feb..b78ee48 100644 (file)
@@ -621,6 +621,7 @@ extern "C" {
    EAPI void         elm_box_unpack_all(Evas_Object *obj);
    /* smart callbacks called:
     */
+
    typedef enum 
      {
        UIControlStateDefault,
@@ -630,17 +631,34 @@ extern "C" {
        UIControlStateReserved
      } UIControlState;
 
-   EAPI Evas_Object *elm_button_add(Evas_Object *parent);
-   EAPI void         elm_button_label_set(Evas_Object *obj, const char *label);
+ /* button */
+   EAPI Evas_Object *elm_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI void         elm_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
    EAPI void         elm_button_label_set_for_state(Evas_Object *obj, const char *label, UIControlState state);
-   EAPI const char  *elm_button_label_get(const Evas_Object *obj);
+   EAPI const char  *elm_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI const char  *elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state);
-   EAPI void         elm_button_icon_set(Evas_Object *obj, Evas_Object *icon);
-   EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj);
-   EAPI void         elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on);
-   EAPI void         elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t);
-   EAPI void         elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t);
+   EAPI void         elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object *elm_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool    elm_button_autorepeat_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+   EAPI double       elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+   EAPI double       elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /* available styles:
+    * default
+    * anchor
+    * hoversel_vertical
+    * hoversel_vertical_entry
+    */
+   /* smart callbacks called:
+    * "clicked" - the user clicked the button
+    * "repeated" - the user pressed the button without releasing it
+    * "unpressed" - when the button is unpressed (released)
+    */
 
+   /* fileselector */
    EAPI Evas_Object *elm_fileselector_button_add(Evas_Object *parent);
    EAPI void         elm_fileselector_button_label_set(Evas_Object *obj, const char *label);
    EAPI const char  *elm_fileselector_button_label_get(const Evas_Object *obj);
@@ -663,17 +681,6 @@ extern "C" {
    EAPI void         elm_fileselector_button_selected_set(Evas_Object *obj, const char *path);
    EAPI const char  *elm_fileselector_button_selected_get(const Evas_Object *obj);
 
-   /* available styles:
-    * default
-    * anchor
-    * hoversel_vertical
-    * hoversel_vertical_entry
-    */
-   /* smart callbacks called:
-    * "clicked" - the user clicked the button
-    * "repeated" - the user pressed the button without releasing it
-    * "unpressed" - when the button is unpressed (released)
-    */
 
    typedef enum _Elm_Scroller_Policy
      {
@@ -1898,20 +1905,19 @@ extern "C" {
     * Update the minimun height of the bar in the theme. No minimun should be set in the vertical theme
     * Add events (move, start ...)
     */
-   EAPI Evas_Object          *elm_panes_add(Evas_Object *parent);
-   EAPI void                  elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content);
-   EAPI void                  elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content);
-   EAPI Evas_Object          *elm_panes_content_left_get(const Evas_Object *obj);
-   EAPI Evas_Object          *elm_panes_content_right_get(const Evas_Object *obj);
-   EAPI Evas_Object          *elm_panes_content_left_unset(Evas_Object *obj);
-   EAPI Evas_Object          *elm_panes_content_right_unset(Evas_Object *obj);
-   EAPI double                elm_panes_content_left_size_get(const Evas_Object *obj);
-   EAPI void                  elm_panes_content_left_size_set(Evas_Object *obj, double size);
-   EAPI void                  elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
-   EAPI Eina_Bool             elm_panes_horizontal_get(const Evas_Object *obj);
-   EAPI void                  elm_panes_fixed_set(Evas_Object *obj, Eina_Bool fixed);
-   EAPI Eina_Bool             elm_panes_fixed_get(const Evas_Object *obj);
-
+   EAPI Evas_Object          *elm_panes_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object          *elm_panes_content_left_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object          *elm_panes_content_right_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object          *elm_panes_content_left_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object          *elm_panes_content_right_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI double                elm_panes_content_left_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_panes_content_left_size_set(Evas_Object *obj, double size) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool             elm_panes_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_panes_fixed_set(Evas_Object *obj, Eina_Bool fixed) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool             elm_panes_fixed_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /* flip */
    typedef enum _Elm_Flip_Mode
      {
index 514570b..160035e 100644 (file)
@@ -43,6 +43,11 @@ static void _signal_clicked(void *data, Evas_Object *obj, const char *emission,
 static void _signal_pressed(void *data, Evas_Object *obj, const char *emission, const char *source);
 static void _signal_unpressed(void *data, Evas_Object *obj, const char *emission, const char *source);
 static void _on_focus_hook(void *data, Evas_Object *obj);
+static void _activate(Evas_Object *obj);
+static void _activate_hook(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+                             Evas_Callback_Type type, void *event_info);
+
 static void _set_label(Evas_Object *obj, const char *label);
 static void _signal_default_text_set(void *data, Evas_Object *obj, const char *emission, const char *source);
 
@@ -56,6 +61,25 @@ static const Evas_Smart_Cb_Description _signals[] = {
   {NULL, NULL}
 };
 
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+   if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+   Evas_Event_Key_Down *ev = event_info;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return EINA_FALSE;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+   if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+   if ((strcmp(ev->keyname, "Return")) &&
+       (strcmp(ev->keyname, "KP_Enter")) &&
+       (strcmp(ev->keyname, "space")))
+     return EINA_FALSE;
+   _activate(obj);
+   ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+   edje_object_signal_emit(wd->btn, "elm,anim,activate", "elm");
+   return EINA_TRUE;
+}
+
 static void
 _del_hook(Evas_Object *obj)
 {
@@ -80,8 +104,8 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
           {
              _set_label(obj, wd->statelabel[FOCUSED]);
           }
-        edje_object_signal_emit(wd->btn, "elm,action,focus", "elm");
-        evas_object_focus_set(wd->btn, EINA_TRUE);
+       edje_object_signal_emit(wd->btn, "elm,action,focus", "elm");
+       evas_object_focus_set(wd->btn, EINA_TRUE);
      }
    else
      {
@@ -91,8 +115,8 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
         else
           _set_label(obj, wd->label);
         #endif
-        edje_object_signal_emit(wd->btn, "elm,action,unfocus", "elm");
-        evas_object_focus_set(wd->btn, EINA_FALSE);
+       edje_object_signal_emit(wd->btn, "elm,action,unfocus", "elm");
+       evas_object_focus_set(wd->btn, EINA_FALSE);
      }
 }
 
@@ -100,27 +124,29 @@ static void
 _theme_hook(Evas_Object *obj)
 {
    Widget_Data *wd = elm_widget_data_get(obj);
+   const char *str;
    if (!wd) return;
    _elm_theme_object_set(obj, wd->btn, "button", "base", elm_widget_style_get(obj));
-
    if (wd->icon)
      edje_object_part_swallow(wd->btn, "elm.swallow.content", wd->icon);
-   
    if (wd->label)
      edje_object_signal_emit(wd->btn, "elm,state,text,visible", "elm");
    else
-     edje_object_signal_emit(wd->btn, "elm,state,text,hidden", "elm");
-   
+     edje_object_signal_emit(wd->btn, "elm,state,text,hidden", "elm");  
    if (wd->icon)
      edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
    else
      edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
-
    edje_object_part_text_set(wd->btn, "elm.text", wd->label);
    if (elm_object_disabled_get(obj))
      edje_object_signal_emit(wd->btn, "elm,state,disabled", "elm");
    edje_object_message_signal_process(wd->btn);
    edje_object_scale_set(wd->btn, elm_widget_scale_get(obj) * _elm_config->scale);
+   str = edje_object_data_get(wd->btn, "focus_highlight");
+   if ((str) && (!strcmp(str, "on")))
+     elm_widget_highlight_in_theme_set(obj, EINA_TRUE);
+   else
+     elm_widget_highlight_in_theme_set(obj, EINA_FALSE);
    _sizing_eval(obj);
 }
 
@@ -150,6 +176,30 @@ _disable_hook(Evas_Object *obj)
 }
 
 static void
+_signal_emit_hook(Evas_Object *obj, const char *emission, const char *source)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   edje_object_signal_emit(wd->btn, emission, source);
+}
+
+static void
+_signal_callback_add_hook(Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   edje_object_signal_callback_add(wd->btn, emission, source, func_cb, data);
+}
+
+static void
+_signal_callback_del_hook(Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   edje_object_signal_callback_del_full(wd->btn, emission, source, func_cb,
+                                        data);
+}
+
+static void
 _sizing_eval(Evas_Object *obj)
 {
    Widget_Data *wd = elm_widget_data_get(obj);
@@ -185,27 +235,39 @@ _sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info)
    if (!wd) return;
    if (sub == wd->icon)
      {
-        edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
-        evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+       edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
+       evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                        _changed_size_hints, obj);
-        wd->icon = NULL;
-        edje_object_message_signal_process(wd->btn);
-        _sizing_eval(obj);
+       wd->icon = NULL;
+       edje_object_message_signal_process(wd->btn);
+       _sizing_eval(obj);
      }
 }
 
 static void
-_signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+_activate(Evas_Object *obj)
 {
-   Widget_Data *wd = elm_widget_data_get(data);
+   Widget_Data *wd = elm_widget_data_get(obj);
    if (!wd) return;
    if (wd->timer)
      {
-        ecore_timer_del(wd->timer);
-        wd->timer = NULL;
+       ecore_timer_del(wd->timer);
+       wd->timer = NULL;
      }
    wd->repeating = EINA_FALSE;
-   evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
+   evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+}
+
+static void
+_activate_hook(Evas_Object *obj)
+{
+   _activate(obj);
+}
+
+static void
+_signal_clicked(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+   _activate(data);
 }
 
 static Eina_Bool
@@ -217,9 +279,10 @@ _autorepeat_send(void *data)
    evas_object_smart_callback_call(data, SIG_REPEATED, NULL);
    if (!wd->repeating)
      {
-        wd->timer = NULL;
-        return ECORE_CALLBACK_CANCEL;
+       wd->timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
      }
+
    return ECORE_CALLBACK_RENEW;
 }
 
@@ -247,12 +310,12 @@ _signal_pressed(void *data, Evas_Object *obj __UNUSED__, const char *emission __
      {
         _set_label(data, wd->statelabel[HIGHLIGHTED]);
      }
-   if (wd->autorepeat && !wd->repeating)
+   if ((wd->autorepeat) && (!wd->repeating))
      {
-        if (wd->ar_threshold <= 0.0)
-          _autorepeat_initial_send(data); /* call immediately */
-        else
-          wd->timer = ecore_timer_add(wd->ar_threshold, _autorepeat_initial_send, data);
+       if (wd->ar_threshold <= 0.0)
+         _autorepeat_initial_send(data); /* call immediately */
+       else
+         wd->timer = ecore_timer_add(wd->ar_threshold, _autorepeat_initial_send, data);
      }
 }
 
@@ -284,8 +347,8 @@ _signal_unpressed(void *data, Evas_Object *obj __UNUSED__, const char *emission
 
    if (wd->timer)
      {
-        ecore_timer_del(wd->timer);
-        wd->timer = NULL;
+       ecore_timer_del(wd->timer);
+       wd->timer = NULL;
      }
    wd->repeating = EINA_FALSE;
    evas_object_smart_callback_call(data, SIG_UNPRESSED, NULL);
@@ -305,18 +368,26 @@ elm_button_add(Evas_Object *parent)
    Evas *e;
    Widget_Data *wd;
 
+   EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+
    wd = ELM_NEW(Widget_Data);
    e = evas_object_evas_get(parent);
+   if (!e) return NULL;
    obj = elm_widget_add(e);
    ELM_SET_WIDTYPE(widtype, "button");
    elm_widget_type_set(obj, "button");
-   elm_widget_can_focus_set(obj, EINA_TRUE);
    elm_widget_sub_object_add(parent, obj);
    elm_widget_on_focus_hook_set( obj, _on_focus_hook, NULL );
    elm_widget_data_set(obj, wd);
    elm_widget_del_hook_set(obj, _del_hook);
    elm_widget_theme_hook_set(obj, _theme_hook);
    elm_widget_disable_hook_set(obj, _disable_hook);
+   elm_widget_can_focus_set(obj, EINA_TRUE);
+   elm_widget_activate_hook_set(obj, _activate_hook);
+   elm_widget_event_hook_set(obj, _event_hook);
+   elm_widget_signal_emit_hook_set(obj, _signal_emit_hook);
+   elm_widget_signal_callback_add_hook_set(obj, _signal_callback_add_hook);
+   elm_widget_signal_callback_del_hook_set(obj, _signal_callback_del_hook);
 
    wd->btn = edje_object_add(e);
    _elm_theme_object_set(obj, wd->btn, "button", "base", "default");
@@ -340,7 +411,7 @@ elm_button_add(Evas_Object *parent)
 
    evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
 
-   _sizing_eval(obj);
+   _theme_hook(obj);
 
    // TODO: convert Elementary to subclassing of Evas_Smart_Class
    // TODO: and save some bytes, making descriptions per-class and not instance!
@@ -470,6 +541,8 @@ elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state)
  * Set the icon used for the button
  *
  * Once the icon object is set, a previously set one will be deleted
+ * If you want to keep that old content object, use the
+ * elm_button_icon_unset() function. 
  *
  * @param[in] obj The button object
  * @param[in] icon The image for the button
@@ -487,12 +560,12 @@ elm_button_icon_set(Evas_Object *obj, Evas_Object *icon)
    wd->icon = icon;
    if (icon)
      {
-        elm_widget_sub_object_add(obj, icon);
-        evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                                       _changed_size_hints, obj);
-        edje_object_part_swallow(wd->btn, "elm.swallow.content", icon);
-        edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
-        edje_object_message_signal_process(wd->btn);
+       elm_widget_sub_object_add(obj, icon);
+       evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                                      _changed_size_hints, obj);
+       edje_object_part_swallow(wd->btn, "elm.swallow.content", icon);
+       edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm");
+       edje_object_message_signal_process(wd->btn);
      }
    _sizing_eval(obj);
 }
@@ -500,8 +573,9 @@ elm_button_icon_set(Evas_Object *obj, Evas_Object *icon)
 /**
  * Get the icon used for the button
  *
+ * Return the icon object which is set for this widget.
  * @param[in] obj The button object
- * @return The image for the button
+ * @return The icon object that is being used
  *
  * @ingroup Button
  */
@@ -515,6 +589,30 @@ elm_button_icon_get(const Evas_Object *obj)
 }
 
 /**
+ * Unset the icon used for the button
+ *
+ * Unparent and return the icon object which was set for this widget.
+ *
+ * @param[in] obj The button object
+ * @return The icon object that was being used
+ *
+ * @ingroup Button
+ */
+EAPI Evas_Object *
+elm_button_icon_unset(Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return NULL;
+   if (!wd->icon) return NULL;
+   Evas_Object *icon = wd->icon;
+   elm_widget_sub_object_del(obj, wd->icon);
+   edje_object_part_unswallow(wd->btn, wd->icon);
+   wd->icon = NULL;
+   return icon;
+}
+
+/**
  * Turn on/off the autorepeat event generated when the user keeps pressing on the button
  *
  * @param[in] obj The button object
@@ -538,6 +636,23 @@ elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on)
 }
 
 /**
+ * Get if autorepeat event is on
+ *
+ * @param obj The button object
+ * @return If autorepeat is on
+ *
+ * @ingroup Button
+ */
+EAPI Eina_Bool
+elm_button_autorepeat_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return EINA_FALSE;
+   return wd->autorepeat;
+}
+
+/**
  * Set the initial timeout before the autorepeat event is generated
  *
  * @param[in] obj The button object
@@ -554,13 +669,30 @@ elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t)
    if (wd->ar_threshold == t) return;
    if (wd->timer)
      {
-        ecore_timer_del(wd->timer);
-        wd->timer = NULL;
+       ecore_timer_del(wd->timer);
+       wd->timer = NULL;
      }
    wd->ar_threshold = t;
 }
 
 /**
+ * Get the initial timeout before the autorepeat event is generated
+ *
+ * @param[in] obj The button object
+ * @return Timeout
+ *
+ * @ingroup Button
+ */
+EAPI double
+elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return 0.0;
+   return wd->ar_threshold;
+}
+
+/**
  * Set the interval between each generated autorepeat event
  *
  * @param[in] obj The button object
@@ -577,5 +709,22 @@ elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t)
    if (wd->ar_interval == t) return;
 
    wd->ar_interval = t;
-   if (wd->repeating && wd->timer) ecore_timer_interval_set(wd->timer, t);
+   if ((wd->repeating) && (wd->timer)) ecore_timer_interval_set(wd->timer, t);
+}
+
+/**
+ * Get the interval between each generated autorepeat event
+ *
+ * @param[in] obj The button object
+ * @return Interval
+ *
+ * @ingroup Button
+ */
+EAPI double
+elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return 0.0;
+   return wd->ar_interval;
 }
index 5c770a2..1347d8a 100644 (file)
@@ -15,15 +15,15 @@ struct _Widget_Data
 
    struct
      {
-        Evas_Object *left;
-        Evas_Object *right;
+       Evas_Object *left;
+       Evas_Object *right;
      } contents;
 
    struct
      {
-        int x_diff;
-        int y_diff;
-        Eina_Bool move;
+       int x_diff;
+       int y_diff;
+       Eina_Bool move;
      } move;
 
    Eina_Bool clicked_double;
@@ -42,6 +42,7 @@ _del_hook(Evas_Object *obj)
 {
    Widget_Data *wd = elm_widget_data_get(obj);
    if (!wd) return;
+   if (wd->panes) evas_object_del(wd->panes);
    free(wd);
 }
 
@@ -71,6 +72,52 @@ _theme_hook(Evas_Object *obj)
    elm_panes_content_left_size_set(obj, size);
 }
 
+static Eina_Bool
+_elm_panes_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+
+   if (!wd)
+     return EINA_FALSE;
+
+   double w, h;
+   edje_object_part_drag_value_get(wd->panes, "elm.bar", &w, &h);
+   if (((wd->horizontal) && ( h == 0.0 )) || ((!wd->horizontal) && ( w == 0.0 )))
+     return elm_widget_focus_next_get(wd->contents.right, dir, next);
+
+   Evas_Object *chain[2];
+
+   /* Direction */
+   if (dir == ELM_FOCUS_PREVIOUS)
+     {
+        chain[0] = wd->contents.right;
+        chain[1] = wd->contents.left;
+     }
+   else if (dir == ELM_FOCUS_NEXT)
+     {
+        chain[0] = wd->contents.left;
+        chain[1] = wd->contents.right;
+     }
+   else
+     return EINA_FALSE;
+
+   unsigned char i = elm_widget_focus_get(chain[1]);
+
+   if (elm_widget_focus_next_get(chain[i], dir, next))
+     return EINA_TRUE;
+
+   i = !i;
+
+   Evas_Object *to_focus;
+   if (elm_widget_focus_next_get(chain[i], dir, &to_focus))
+     {
+        *next = to_focus;
+        return !!i;
+     }
+
+   return EINA_FALSE;
+}
+
 static void
 _sizing_eval(Evas_Object *obj)
 {
@@ -93,16 +140,17 @@ _sub_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
    if (!wd) return;
    if (sub == wd->contents.left)
      {
-        evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+       evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
                                             _changed_size_hints, obj);
-        wd->contents.left = NULL;
-        _sizing_eval(obj);
+       wd->contents.left = NULL;
+       _sizing_eval(obj);
      }
    else if (sub == wd->contents.right)
      {
-        evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
-        wd->contents.right= NULL;
-       _sizing_eval(obj);
+       evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                                            _changed_size_hints, obj);
+       wd->contents.right= NULL;
+       _sizing_eval(obj);
      }
 }
 
@@ -134,8 +182,8 @@ _unpress(void *data, Evas_Object *obj __UNUSED__ , const char *emission __UNUSED
 
    if (wd->clicked_double)
      {
-        evas_object_smart_callback_call(data, "clicked,double", NULL);
-        wd->clicked_double = EINA_FALSE;
+       evas_object_smart_callback_call(data, "clicked,double", NULL);
+       wd->clicked_double = EINA_FALSE;
      }
 }
 
@@ -158,14 +206,16 @@ elm_panes_add(Evas_Object *parent)
 
    wd = ELM_NEW(Widget_Data);
    e = evas_object_evas_get(parent);
+   if (!e) return NULL;
    obj = elm_widget_add(e);
    ELM_SET_WIDTYPE(widtype, "panes");
-   elm_widget_type_set(obj, widtype);
+   elm_widget_type_set(obj, "panes");
    elm_widget_can_focus_set(obj, EINA_FALSE);
    elm_widget_sub_object_add(parent, obj);
    elm_widget_data_set(obj, wd);
    elm_widget_del_hook_set(obj, _del_hook);
    elm_widget_theme_hook_set(obj, _theme_hook);
+   elm_widget_focus_next_hook_set(obj, _elm_panes_focus_next_hook);
    wd->contents.left = NULL;
    wd->contents.right = NULL;
 
@@ -212,19 +262,19 @@ elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content)
    Widget_Data *wd = elm_widget_data_get(obj);
    if (wd->contents.left)
      {
-        evas_object_del(wd->contents.left);
-        wd->contents.left = NULL;
+       evas_object_del(wd->contents.left);
+       wd->contents.left = NULL;
      }
    if (content)
      {
-        elm_widget_sub_object_add(obj, content);
-        wd->contents.left = content;
-        edje_object_part_swallow(wd->panes, "elm.swallow.left", content);
+       wd->contents.left = content;
+       elm_widget_sub_object_add(obj, content);
+       edje_object_part_swallow(wd->panes, "elm.swallow.left", content);
         if (wd->contents.right)
-          edje_object_signal_emit(wd->panes, "panes_pair", "elm");
+          edje_object_signal_emit(wd->panes, "elm.panes.pair", "elm");
      }
    else
-      edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+      edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
 }
 
 /**
@@ -246,19 +296,19 @@ elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content)
    Widget_Data *wd = elm_widget_data_get(obj);
    if (wd->contents.right)
      {
-        evas_object_del(wd->contents.right);
-        wd->contents.right = NULL;
+       evas_object_del(wd->contents.right);
+       wd->contents.right = NULL;
      }
    if (content)
      {
-        elm_widget_sub_object_add(obj, content);
-        wd->contents.right = content;
-        edje_object_part_swallow(wd->panes, "elm.swallow.right", content);
+       wd->contents.right = content;
+       elm_widget_sub_object_add(obj, content);
+       edje_object_part_swallow(wd->panes, "elm.swallow.right", content);
         if (wd->contents.left)
-          edje_object_signal_emit(wd->panes, "panes_pair", "elm");
+          edje_object_signal_emit(wd->panes, "elm.panes.pair", "elm");
      }
    else
-     edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+     edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
 }
 
 /**
@@ -266,7 +316,7 @@ elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content)
  *
  * Return the left/top content object which is set for this widget.
  *
- * @param[in] obj The pane object
+ * @param[in] obj The panes object
  * @return The left/top content object that is being used
  *
  * @ingroup Panes
@@ -284,8 +334,8 @@ elm_panes_content_left_get(const Evas_Object *obj)
  *
  * Return the right/bottom content object which is set for this widget.
  *
- * @param[in] obj The pane object
- * @return The Evas Object set as a right/bottom content of the pane
+ * @param[in] obj The panes object
+ * @return The right/bottom content object that is being used
  *
  * @ingroup Panes
  */
@@ -311,18 +361,15 @@ EAPI Evas_Object *
 elm_panes_content_left_unset(Evas_Object *obj)
 {
    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
-   Widget_Data *wd = NULL;
-   Evas_Object *content = NULL;
-
-   wd = elm_widget_data_get(obj);
+   Widget_Data *wd = elm_widget_data_get(obj);
    if (!wd) return NULL;
    if (!wd->contents.left) return NULL;
-   content = wd->contents.left;
+   Evas_Object *content = wd->contents.left;
    edje_object_part_unswallow(wd->panes, content);
    elm_widget_sub_object_del(obj, content);
    evas_object_hide(content);
    wd->contents.left = NULL;
-   edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+   edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
    return content;
 }
 
@@ -340,19 +387,15 @@ EAPI Evas_Object *
 elm_panes_content_right_unset(Evas_Object *obj)
 {
    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
-   Widget_Data *wd = NULL;
-   Evas_Object *content = NULL;
-
-   wd = elm_widget_data_get(obj);
+   Widget_Data *wd = elm_widget_data_get(obj);
    if (!wd) return NULL;
    if (!wd->contents.right) return NULL;
-
-   content = wd->contents.right;
+   Evas_Object *content = wd->contents.right;
    edje_object_part_unswallow(wd->panes, content);
    elm_widget_sub_object_del(obj, content);
    evas_object_hide(content);
    wd->contents.right = NULL;
-   edje_object_signal_emit(wd->panes, "panes_unpair", "elm");
+   edje_object_signal_emit(wd->panes, "elm.panes.unpair", "elm");
    return content;
 }
 
@@ -450,9 +493,9 @@ elm_panes_fixed_set(Evas_Object *obj, Eina_Bool fixed)
    Widget_Data *wd = elm_widget_data_get(obj);
    wd->fixed = fixed;
    if (wd->fixed == EINA_TRUE)
-     edje_object_signal_emit(wd->panes, "elm.fixed", "movement.decider");
+     edje_object_signal_emit(wd->panes, "elm.panes.fixed", "elm");
    else
-     edje_object_signal_emit(wd->panes, "elm.unfixed", "movement.decider");
+     edje_object_signal_emit(wd->panes, "elm.panes.unfixed", "elm");
 }
 
 /**