Enlightenment CVS committal

Author  : barbieri
Project : e17
Module  : apps/edje_viewer

Dir     : e17/apps/edje_viewer/src/bin


Modified Files:
        conf.c etk_gui.c etk_gui.h 


Log Message:
Various improvements and fixes.

 * Port to new ETK signal system;
 * Remove memory leak from edje_viewer_config_recent_set() and
   edje_viewer_config_last_set();
 * Fix "Part" column sort;
 * Add "Visibility" column sort;
 * Use proper callbacks for each menu item;
 * Fix invalid memory access, thanks to valgrind.


===================================================================
RCS file: /cvs/e/e17/apps/edje_viewer/src/bin/conf.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- conf.c      8 Jul 2006 23:32:00 -0000       1.4
+++ conf.c      30 Sep 2007 02:16:55 -0000      1.5
@@ -55,33 +55,22 @@
 void edje_viewer_config_recent_set(const char *path)
 {
    int count, key_length, i;
-   char *key, *val, *cwd, *new_path;
+   char key[sizeof("/recent/") + 8], *key_v, *val, *cwd;
+   char new_path[PATH_MAX];
 
    if (!path) return;
    count = edje_viewer_config_count_get();
 
-   new_path = malloc(PATH_MAX);
-   if (!(path[0] == '/')) {
-       cwd = malloc(PATH_MAX);
-       getcwd(cwd, PATH_MAX);
-
-       snprintf(new_path, PATH_MAX, "%s/%s", cwd, path);
-
-       FREE(cwd);
-   } else {
-       new_path = strdup(path);
-   }
+   realpath(path, new_path);
 
-   key_length = strlen("/recent/") + 8;
-   key = malloc(key_length * sizeof(key));
+   strcpy(key, "/recent/");
+   key_v = key + sizeof("/recent/") - 1;
    for (i = 0; i < count; i++)
      {
-       snprintf(key, key_length, "/recent/%i", i + 1);
+       snprintf(key_v, 8, "%i", i + 1);
        val = ecore_config_string_get(key);
        if (!strcmp(new_path, val))
          {
-            FREE(key);
-            FREE(new_path);
             FREE(val);
             return;
          }
@@ -97,11 +86,8 @@
      }
 
    edje_viewer_config_count_set(count);
-   snprintf(key, key_length, "/recent/%i", i);
+   snprintf(key_v, 8, "%i", i);
    ecore_config_string_set(key, new_path);
-
-   FREE(key);
-   FREE(new_path);
 }
 
 char *edje_viewer_config_last_get(void)
@@ -111,26 +97,12 @@
 
 void edje_viewer_config_last_set(const char *path)
 {
-   char *cwd, *new_path;
+   char new_path[PATH_MAX];
 
    if (!path) return;
 
-   new_path = malloc(PATH_MAX);
-   if (!(path[0] == '/')) {
-       cwd = malloc(PATH_MAX);
-       getcwd(cwd, PATH_MAX);
-
-       snprintf(new_path, PATH_MAX, "%s/%s", cwd, path);
-
-       FREE(cwd);
-   } else {
-       new_path = strdup(path);
-   }
-
-
+   realpath(path, new_path);
    ecore_config_string_set("/recent/last", new_path);
-
-   FREE(new_path);
 }
 
 Etk_Bool edje_viewer_config_open_last_get(void)
===================================================================
RCS file: /cvs/e/e17/apps/edje_viewer/src/bin/etk_gui.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- etk_gui.c   14 Aug 2007 16:21:31 -0000      1.22
+++ etk_gui.c   30 Sep 2007 02:16:55 -0000      1.23
@@ -6,29 +6,33 @@
 
 static Etk_Widget *_gui_menubar_item_new(Gui *gui, const char *label,
        Etk_Menu_Shell *menu_shell);
-static Etk_Widget *_gui_menu_stock_item_new(Gui *gui, const char *label,
-       Etk_Stock_Id stock_id, Etk_Menu_Shell *menu_shell);
 static Etk_Widget *_gui_menu_item_new(Gui *gui, const char *label,
-      Etk_Menu_Shell *menu_shell);
+        Etk_Menu_Shell *menu_shell);
+static Etk_Widget *_gui_menu_stock_item_new(Gui *gui, const char *label,
+       Etk_Stock_Id stock_id, Etk_Menu_Shell *menu_shell,
+        Etk_Callback callback);
 
 static Etk_Bool _gui_tree_search(Gui *gui, Tree_Search direction);
 static void _open_edje_file(Gui *gui);
 
-static void _gui_menu_item_clicked_cb(Etk_Object *obj, void *data);
-static void _gui_open_last_clicked_cb(Etk_Object *obj, void *data);
-static void _gui_sort_parts_clicked_cb(Etk_Object *obj, void *data);
-static void _gui_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data);
-static void _gui_search_entry_key_down_cb(Etk_Object *object, 
Etk_Event_Key_Down *event, void *data);
-static void _gui_search_entry_text_changed_cb(Etk_Entry *entry, void *data);
-static void _gui_fm_ok_clicked_cb(Etk_Object *obj, void *data);
-static void _gui_fm_cancel_clicked_cb(Etk_Object *obj, void *data);
-static Etk_Bool _gui_main_window_deleted_cb(void *data);
-static void _gui_open_edje_file_cb(Gui *gui);
-static void _gui_tree_checkbox_toggled_cb(Etk_Object *obj, Etk_Tree_Row *row,
+static Etk_Bool _gui_open_last_clicked_cb(Etk_Object *obj, void *data);
+static Etk_Bool _gui_sort_parts_clicked_cb(Etk_Object *obj, void *data);
+static Etk_Bool _gui_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data);
+static Etk_Bool _gui_search_entry_key_down_cb(Etk_Object *object, 
Etk_Event_Key_Down *event, void *data);
+static Etk_Bool _gui_search_entry_text_changed_cb(Etk_Entry *entry, void 
*data);
+static Etk_Bool _gui_menu_item_reload_cb(Etk_Menu_Item *item, Gui *gui);
+static Etk_Bool _gui_menu_item_quit_cb(Etk_Menu_Item *item, Gui *gui);
+static Etk_Bool _gui_menu_item_open_recent_cb(Etk_Menu_Item *item, Gui *gui);
+static Etk_Bool _gui_menu_item_open_edje_file_cb(Etk_Menu_Item *item, Gui 
*gui);
+static Etk_Bool _gui_fm_ok_clicked_cb(Etk_Button *btn, Gui *gui);
+static Etk_Bool _gui_fm_cancel_clicked_cb(Etk_Button *btn, Gui *gui);
+static Etk_Bool _gui_main_window_deleted_cb(Etk_Window *obj, Gui *gui);
+static Etk_Bool _gui_tree_checkbox_toggled_cb(Etk_Object *obj, Etk_Tree_Row 
*row,
       void *data);
-static void _gui_send_clicked_cb(Etk_Object *obj, void *data);
+static Etk_Bool _gui_send_clicked_cb(Etk_Object *obj, void *data);
+static int gui_visibility_col_sort_cb(Etk_Tree_Col *col, Etk_Tree_Row *row1, 
Etk_Tree_Row *row2, void *data);
 
-void main_window_show(char *file)
+void main_window_show(const char *file)
 {
    Gui *gui;
    Etk_Widget *menubar;
@@ -59,10 +63,16 @@
    gui->search_entry = etk_entry_new();
    etk_container_add(ETK_CONTAINER(gui->popup), gui->search_entry);
    etk_widget_show(gui->search_entry);
-   etk_signal_connect("key-down", ETK_OBJECT(gui->search_entry), 
-        ETK_CALLBACK(_gui_search_entry_key_down_cb), gui);
-   etk_signal_connect("text-changed", ETK_OBJECT(gui->search_entry), 
-        ETK_CALLBACK(_gui_search_entry_text_changed_cb), gui);
+
+   Etk_Signal_Connect_Desc search_entru_conn_desc[] = {
+     ETK_SC_DESC(ETK_WIDGET_KEY_DOWN_SIGNAL,
+                _gui_search_entry_key_down_cb),
+     ETK_SC_DESC(ETK_ENTRY_TEXT_CHANGED_SIGNAL,
+                _gui_search_entry_text_changed_cb),
+     ETK_SC_DESC_SENTINEL
+   };
+   etk_signal_connect_multiple(search_entru_conn_desc,
+                              ETK_OBJECT(gui->search_entry), gui);
 
    vbox = etk_vbox_new(ETK_FALSE, 0);
    etk_container_add(ETK_CONTAINER(gui->win), vbox);
@@ -76,15 +86,15 @@
    menu = etk_menu_new();
    etk_menu_item_submenu_set(ETK_MENU_ITEM(menuitem), ETK_MENU(menu));
    _gui_menu_stock_item_new(gui, _("Open"), ETK_STOCK_DOCUMENT_OPEN,
-        ETK_MENU_SHELL(menu));
+        ETK_MENU_SHELL(menu), _gui_menu_item_open_edje_file_cb);
    menuitem = _gui_menu_stock_item_new(gui, _("Open recent"),
-        ETK_STOCK_DOCUMENT_OPEN, ETK_MENU_SHELL(menu));
+        ETK_STOCK_DOCUMENT_OPEN, ETK_MENU_SHELL(menu), NULL);
    _gui_menu_stock_item_new(gui, _("Reload"), ETK_STOCK_VIEW_REFRESH,
-        ETK_MENU_SHELL(menu));
+        ETK_MENU_SHELL(menu), ETK_CALLBACK(_gui_menu_item_reload_cb));
    separator = etk_menu_item_separator_new();
    etk_menu_shell_append(ETK_MENU_SHELL(menu), ETK_MENU_ITEM(separator));
    _gui_menu_stock_item_new(gui, _("Quit"), ETK_STOCK_DIALOG_CLOSE,
-          ETK_MENU_SHELL(menu));
+          ETK_MENU_SHELL(menu), _gui_menu_item_quit_cb);
 
    /* Recent submenu */
    menu = etk_menu_new();
@@ -94,7 +104,7 @@
      {
        recent = edje_viewer_config_recent_get(i+1);
        _gui_menu_stock_item_new(gui, recent, ETK_STOCK_X_OFFICE_DOCUMENT,
-             ETK_MENU_SHELL(menu));
+             ETK_MENU_SHELL(menu), _gui_menu_item_open_recent_cb);
      }
    if (count == 0)
      _gui_menu_item_new(gui, _("No recent files"), ETK_MENU_SHELL(menu));
@@ -106,15 +116,17 @@
    etk_menu_item_submenu_set(ETK_MENU_ITEM(menuitem), ETK_MENU(menu));
    menuitem = etk_menu_item_check_new_with_label(_("Open Last"));
    etk_menu_shell_append(ETK_MENU_SHELL(menu), ETK_MENU_ITEM(menuitem));
-   etk_signal_connect("activated", ETK_OBJECT(menuitem),
-          ETK_CALLBACK(_gui_open_last_clicked_cb), gui);
+   etk_signal_connect_by_code(ETK_MENU_ITEM_CHECK_TOGGLED_SIGNAL,
+                             ETK_OBJECT(menuitem),
+                             ETK_CALLBACK(_gui_open_last_clicked_cb), gui);
    check = edje_viewer_config_open_last_get();
    etk_menu_item_check_active_set(ETK_MENU_ITEM_CHECK(menuitem), check);
 
    menuitem = etk_menu_item_check_new_with_label(_("Sort parts"));
    etk_menu_shell_append(ETK_MENU_SHELL(menu), ETK_MENU_ITEM(menuitem));
-   etk_signal_connect("activated", ETK_OBJECT(menuitem),
-          ETK_CALLBACK(_gui_sort_parts_clicked_cb), gui);
+   etk_signal_connect_by_code(ETK_MENU_ITEM_CHECK_TOGGLED_SIGNAL,
+                             ETK_OBJECT(menuitem),
+                             ETK_CALLBACK(_gui_sort_parts_clicked_cb), gui);
    check = edje_viewer_config_sort_parts_get();
    etk_menu_item_check_active_set(ETK_MENU_ITEM_CHECK(menuitem), check);
 
@@ -134,8 +146,11 @@
    col2 = etk_tree_col_new(ETK_TREE(gui->tree), _("Visibility"), 60, 0.0);
    etk_tree_col_model_add(col2, etk_tree_model_checkbox_new());
    etk_tree_build(ETK_TREE(gui->tree));
+   etk_tree_col_sort_set(col2, gui_visibility_col_sort_cb, NULL);
    etk_widget_size_request_set(gui->tree, 300, 0);
-   etk_signal_connect("key-down", ETK_OBJECT(gui->tree), 
ETK_CALLBACK(_gui_tree_key_down_cb), gui);
+   etk_signal_connect_by_code(ETK_WIDGET_KEY_DOWN_SIGNAL,
+                             ETK_OBJECT(gui->tree),
+                             ETK_CALLBACK(_gui_tree_key_down_cb), gui);
    etk_paned_child1_set(ETK_PANED(paned), gui->tree, ETK_FALSE);
 
    gui->canvas = etk_canvas_new();
@@ -175,8 +190,9 @@
    send_button = etk_button_new_with_label("Send");
    etk_button_alignment_set(ETK_BUTTON(send_button), 1.0, 0.5);
    etk_box_append(ETK_BOX(hbox), send_button, ETK_BOX_END, ETK_BOX_NONE, 0);
-   etk_signal_connect("clicked", ETK_OBJECT(send_button),
-          ETK_CALLBACK(_gui_send_clicked_cb), gui);
+   etk_signal_connect_by_code(ETK_BUTTON_CLICKED_SIGNAL,
+                             ETK_OBJECT(send_button),
+                             ETK_CALLBACK(_gui_send_clicked_cb), gui);
 
    bg_setup(ETK_CANVAS(gui->canvas));
    etk_widget_show_all(gui->win);
@@ -184,22 +200,27 @@
    check = edje_viewer_config_open_last_get();
    if (file) 
      {
-       gui->path = file;
+       gui->path = strdup(file);
        _open_edje_file(gui);
      }
    else if (check)
      {
-       file = edje_viewer_config_last_get();
-       if (file)
+       char *last_file;
+
+       last_file = edje_viewer_config_last_get();
+       if (last_file)
          {
-            gui->path = file;
+            gui->path = last_file;
             _open_edje_file(gui);
          }
      }
-   etk_signal_connect("delete-event", ETK_OBJECT(gui->win),
-          ETK_CALLBACK(_gui_main_window_deleted_cb), NULL);
-   etk_signal_connect("cell-value-changed", ETK_OBJECT(col2),
-        ETK_CALLBACK(_gui_tree_checkbox_toggled_cb), gui);
+   etk_signal_connect_by_code(ETK_WINDOW_DELETE_EVENT_SIGNAL,
+                             ETK_OBJECT(gui->win),
+                             ETK_CALLBACK(_gui_main_window_deleted_cb), NULL);
+   etk_signal_connect_by_code(ETK_TREE_COL_CELL_VALUE_CHANGED_SIGNAL,
+                             ETK_OBJECT(col2),
+                             ETK_CALLBACK(_gui_tree_checkbox_toggled_cb),
+                             gui);
 }
 
 static Etk_Widget *_gui_menubar_item_new (Gui *gui, const char *label,
@@ -217,21 +238,20 @@
 }
 
 static Etk_Widget *_gui_menu_stock_item_new(Gui *gui, const char *label,
-       Etk_Stock_Id stock_id, Etk_Menu_Shell *menu_shell)
+       Etk_Stock_Id stock_id, Etk_Menu_Shell *menu_shell,
+        Etk_Callback callback)
 {
    Etk_Widget *menu_item;
    Etk_Widget *image;
 
-   if (!menu_shell)
-     return NULL;
-
    menu_item = etk_menu_item_image_new_with_label(label);
    image = etk_image_new_from_stock(stock_id, ETK_STOCK_SMALL);
    etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image));
    etk_menu_shell_append(menu_shell, ETK_MENU_ITEM(menu_item));
 
-   etk_signal_connect("activated", ETK_OBJECT(menu_item),
-          ETK_CALLBACK(_gui_menu_item_clicked_cb), gui);
+   if (callback)
+      etk_signal_connect_by_code(ETK_MENU_ITEM_ACTIVATED_SIGNAL,
+                                ETK_OBJECT(menu_item), callback, gui);
 
    return menu_item;
 
@@ -242,15 +262,9 @@
 {
    Etk_Widget *menu_item;
 
-   if (!menu_shell)
-     return NULL;
-
    menu_item = etk_menu_item_new_with_label(label);
    etk_menu_shell_append(menu_shell, ETK_MENU_ITEM(menu_item));
 
-   etk_signal_connect("activated", ETK_OBJECT(menu_item),
-          ETK_CALLBACK(_gui_menu_item_clicked_cb), gui);
-
    return menu_item;
 
 }
@@ -311,68 +325,43 @@
    etk_window_title_set(ETK_WINDOW(gui->win), gui->path);
 }
 
-static void _gui_menu_item_clicked_cb(Etk_Object *obj, void *data)
-{
-   Etk_Menu_Item *item;
-   Gui *gui;
-   const char *label;
-
-   if (!(item = ETK_MENU_ITEM(obj)))
-     return;
-   if (!(gui = data)) return;
-
-   label = etk_menu_item_label_get(item);
-
-   if (!strcmp(label, "Quit"))
-     _gui_main_window_deleted_cb(NULL);
-   else if (!strcmp(label, "Open"))
-     _gui_open_edje_file_cb(gui);
-   else if (!strcmp(label, "Reload"))
-     {
-       eet_clearcache();
-       edje_file_cache_flush();
-       _open_edje_file(gui);
-     }
-   else if (strstr(label, ".edj"))
-     {
-       gui->path = strdup(label);
-       _open_edje_file(gui);
-     }
-}
-
-static void _gui_open_last_clicked_cb(Etk_Object *obj, void *data)
+static Etk_Bool _gui_open_last_clicked_cb(Etk_Object *obj, void *data)
 {
    Etk_Menu_Item_Check *item;
    Gui *gui;
    Etk_Bool check;
 
    if (!(item = ETK_MENU_ITEM_CHECK(obj)))
-     return;
-   if (!(gui = data)) return;
+     return ETK_TRUE;
+   if (!(gui = data)) return ETK_TRUE;
    check = etk_menu_item_check_active_get(item);
    edje_viewer_config_open_last_set(check);
+
+   return ETK_TRUE;
 }
 
-static void _gui_sort_parts_clicked_cb(Etk_Object *obj, void *data)
+static Etk_Bool _gui_sort_parts_clicked_cb(Etk_Object *obj, void *data)
 {
    Etk_Menu_Item_Check *item;
    Gui *gui;
    Etk_Bool check;
 
    if (!(item = ETK_MENU_ITEM_CHECK(obj)))
-     return;
-   if (!(gui = data)) return;
+     return ETK_TRUE;
+   if (!(gui = data)) return ETK_TRUE;
    check = etk_menu_item_check_active_get(item);
    edje_viewer_config_sort_parts_set(check);
+
+   return ETK_TRUE;
 }
 
-static void _gui_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data)
+static Etk_Bool _gui_tree_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data)
 {
    Gui *gui;
    int wx, wy, x, y, w, h;
 
    if (!(gui = data))
-     return;
+     return ETK_TRUE;
 
    if (!strcmp(event->key, "Return") || !strcmp(event->key, "KP_Enter") || 
!strcmp(event->keyname, "space"))
      {
@@ -386,26 +375,28 @@
        checked = checked ? ETK_FALSE : ETK_TRUE;
        etk_tree_row_fields_set(row, ETK_TRUE, col, checked, NULL);
 
-       return;
+       return ETK_TRUE;
      }
 
    if (!strlen(event->string) || !strcmp(event->key, "Tab") || 
!strcmp(event->key, "Escape") 
         || !(event->modifiers == ETK_MODIFIER_NONE || event->modifiers == 
ETK_MODIFIER_SHIFT))
-     return;
+     return ETK_TRUE;
 
    etk_widget_geometry_get(gui->tree, &x, &y, &w, &h);
    etk_window_geometry_get(ETK_WINDOW(gui->win), &wx, &wy, NULL, NULL);
    etk_popup_window_popup_at_xy(gui->popup, wx + x + w/2, wy + y + h);
    etk_widget_focus(gui->search_entry);
    etk_entry_text_set(ETK_ENTRY(gui->search_entry), event->string);
+
+   return ETK_TRUE;
 }
 
-static void _gui_search_entry_key_down_cb(Etk_Object *object, 
Etk_Event_Key_Down *event, void *data)
+static Etk_Bool _gui_search_entry_key_down_cb(Etk_Object *object, 
Etk_Event_Key_Down *event, void *data)
 {
    Gui *gui;
 
    if (!(gui = data))
-     return;
+     return ETK_TRUE;
 
    if (event->modifiers & ETK_MODIFIER_CTRL)
      {
@@ -436,16 +427,18 @@
      _gui_tree_search(gui, TREE_SEARCH_PREV);
    else if (!strcmp(event->keyname, "Down"))
      _gui_tree_search(gui, TREE_SEARCH_NEXT);
+
+   return ETK_TRUE;
 }
 
-static void _gui_search_entry_text_changed_cb(Etk_Entry *entry, void *data)
+static Etk_Bool _gui_search_entry_text_changed_cb(Etk_Entry *entry, void *data)
 {
    Gui *gui;
    Evas_Object *editable;
    int cursor_pos;
 
    if (!(gui = data))
-     return;
+     return ETK_TRUE;
 
    if (!_gui_tree_search(gui, TREE_SEARCH_START))
      {
@@ -453,15 +446,40 @@
        cursor_pos = etk_editable_cursor_pos_get(editable);
        etk_editable_delete(editable, cursor_pos - 1, cursor_pos);
      }
+
+   return ETK_TRUE;
+}
+
+static Etk_Bool _gui_main_window_deleted_cb(Etk_Window *obj, Gui *gui)
+{
+   etk_main_quit();
+   return ETK_TRUE;
+}
+
+static Etk_Bool _gui_menu_item_reload_cb(Etk_Menu_Item *item, Gui *gui)
+{
+   eet_clearcache();
+   edje_file_cache_flush();
+   _open_edje_file(gui);
+   return ETK_TRUE;
 }
 
-static Etk_Bool _gui_main_window_deleted_cb(void *data)
+static Etk_Bool _gui_menu_item_quit_cb(Etk_Menu_Item *item, Gui *gui)
 {
    etk_main_quit();
-   return 1;
+   return ETK_TRUE;
+}
+
+static Etk_Bool _gui_menu_item_open_recent_cb(Etk_Menu_Item *item, Gui *gui)
+{
+   if (gui->path)
+      free(gui->path);
+   gui->path = strdup(etk_menu_item_label_get(item));
+   _open_edje_file(gui);
+   return ETK_TRUE;
 }
 
-static void _gui_open_edje_file_cb(Gui *gui)
+static Etk_Bool _gui_menu_item_open_edje_file_cb(Etk_Menu_Item *item, Gui *gui)
 {
    Etk_Widget *button;
    char *cwd;
@@ -469,7 +487,7 @@
    if (gui->fm_dialog)
      {
        etk_widget_show_all(ETK_WIDGET(gui->fm_dialog));
-       return;
+       return ETK_TRUE;
      }
 
    cwd = malloc(1024);
@@ -477,8 +495,9 @@
 
    gui->fm_dialog = etk_dialog_new();
    etk_window_title_set(ETK_WINDOW(gui->fm_dialog), _("Choose an edje file"));
-   etk_signal_connect("delete-event", ETK_OBJECT(gui->fm_dialog),
-          ETK_CALLBACK(etk_window_hide_on_delete), NULL);      
+   etk_signal_connect_by_code(ETK_WINDOW_DELETE_EVENT_SIGNAL,
+                             ETK_OBJECT(gui->fm_dialog),
+                             ETK_CALLBACK(etk_window_hide_on_delete), NULL);
 
    gui->fm_chooser = etk_filechooser_widget_new();
    if (cwd)
@@ -490,56 +509,66 @@
 
    button = etk_dialog_button_add_from_stock(ETK_DIALOG(gui->fm_dialog),
           ETK_STOCK_DIALOG_OK, 1);
-   etk_signal_connect("clicked", ETK_OBJECT(button),
-          ETK_CALLBACK(_gui_fm_ok_clicked_cb), gui);
+   etk_signal_connect_by_code(ETK_BUTTON_CLICKED_SIGNAL, ETK_OBJECT(button),
+                             ETK_CALLBACK(_gui_fm_ok_clicked_cb), gui);
    button = etk_dialog_button_add_from_stock(ETK_DIALOG(gui->fm_dialog),
           ETK_STOCK_DIALOG_CLOSE, 2);
-   etk_signal_connect("clicked", ETK_OBJECT(button),
-          ETK_CALLBACK(_gui_fm_cancel_clicked_cb), gui);
+   etk_signal_connect_by_code(ETK_BUTTON_CLICKED_SIGNAL, ETK_OBJECT(button),
+                             ETK_CALLBACK(_gui_fm_cancel_clicked_cb), gui);
 
    etk_widget_show_all(gui->fm_dialog);
+
+   return ETK_TRUE;
 }
 
-static void _gui_fm_ok_clicked_cb(Etk_Object *obj, void *data)
+static Etk_Bool _gui_fm_ok_clicked_cb(Etk_Button *btn, Gui *gui)
 {
-   Gui *gui;
+   Etk_Filechooser_Widget *fm_chooser;
    const char *file;
    const char *dir;
+   int dir_size;
+
+   fm_chooser = (Etk_Filechooser_Widget*)gui->fm_chooser;
+
+   dir = etk_filechooser_widget_current_folder_get(fm_chooser);
+   file = etk_filechooser_widget_selected_file_get(fm_chooser);
+
+   if (!dir || !file)
+      return ETK_TRUE;
 
-   if (!(gui = data)) return;
+   if (gui->path)
+      free(gui->path);
+
+   dir_size = strlen(dir);
+   gui->path = malloc(dir_size + strlen(file) + 2);
+   strcpy(gui->path, dir);
+   gui->path[dir_size] = '/';
+   strcpy(gui->path + dir_size + 1, file);
 
-   dir = etk_filechooser_widget_current_folder_get(
-          ETK_FILECHOOSER_WIDGET(gui->fm_chooser));
-   if (!(file = etk_filechooser_widget_selected_file_get(
-          ETK_FILECHOOSER_WIDGET(gui->fm_chooser)))) return;
-
-   gui->path = strdup(dir);
-   gui->path = strcat(gui->path, "/");
-   gui->path = strcat(gui->path, file);
-   etk_window_hide_on_delete(ETK_OBJECT(gui->fm_dialog), NULL);
    _open_edje_file(gui);
+
+   etk_widget_hide(gui->fm_dialog);
+   return ETK_TRUE;
 }
 
-static void _gui_fm_cancel_clicked_cb(Etk_Object *obj, void *data)
+static Etk_Bool _gui_fm_cancel_clicked_cb(Etk_Button *btn, Gui *gui)
 {
-   Gui *gui;
-
-   if (!(gui = data)) return;
-
-   etk_window_hide_on_delete(ETK_OBJECT(gui->fm_dialog), NULL);
+   etk_widget_hide(gui->fm_dialog);
+   return ETK_TRUE;
 }
 
-static void _gui_tree_checkbox_toggled_cb(Etk_Object *obj, Etk_Tree_Row *row,
-      void *data)
+static Etk_Bool _gui_tree_checkbox_toggled_cb(Etk_Object *obj,
+                                             Etk_Tree_Row *row,
+                                             void *data)
 {
    Collection *co;
    Etk_Bool checked;
    Etk_Tree_Col *col;
    Gui *gui;
 
-   if (!(co = etk_tree_row_data_get(row))) return;
-   if (!(col = ETK_TREE_COL(obj)) || !row) return;
-   if (!(gui = data)) return;
+   if (!(co = etk_tree_row_data_get(row))) return ETK_TRUE;
+   if (!(col = ETK_TREE_COL(obj)) || !row) return ETK_TRUE;
+   if (!(gui = data)) return ETK_TRUE;
 
    if (!co->de)
      co->de = edje_part_create(ETK_TREE(gui->output), 
@@ -550,16 +579,18 @@
      edje_part_show(ETK_CANVAS(gui->canvas), co->de);
    else
      edje_part_hide(co->de);
+
+   return ETK_TRUE;
 }
 
-static void _gui_send_clicked_cb(Etk_Object *obj, void *data)
+static Etk_Bool _gui_send_clicked_cb(Etk_Object *obj, void *data)
 {
   Gui * gui;
   Evas_List *l;
   const char *sig, *src;
 
   gui = data;
-  if (!gui) return;
+  if (!gui) return ETK_TRUE;
 
   sig = etk_entry_text_get(ETK_ENTRY(gui->signal_entry));
   src = etk_entry_text_get(ETK_ENTRY(gui->source_entry));
@@ -572,15 +603,16 @@
     if (!de) continue;
     edje_object_signal_emit(de->edje, sig, src);
   }
+
+   return ETK_TRUE;
 }
 
 int gui_part_col_sort_cb
-(Etk_Tree *tree, Etk_Tree_Row *row1, Etk_Tree_Row *row2, Etk_Tree_Col *col,
- void *data)
+(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void *data)
 {
    char *row1_value, *row2_value;
 
-   if (!tree || !row1 || !row2 || !col)
+   if (!row1 || !row2 || !col)
       return 0;
 
    etk_tree_row_fields_get(row1, col, &row1_value, NULL);
@@ -592,4 +624,23 @@
       return 1;
    else
       return 0;
+}
+
+static int gui_visibility_col_sort_cb
+(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void *data)
+{
+   Etk_Bool row1_value, row2_value;
+
+   if (!row1 || !row2 || !col)
+      return 0;
+
+   etk_tree_row_fields_get(row1, col, &row1_value, NULL);
+   etk_tree_row_fields_get(row2, col, &row2_value, NULL);
+
+   if (row1_value == row2_value)
+      return 0;
+   else if (row1_value)
+      return -1;
+   else
+      return 1;
 }
===================================================================
RCS file: /cvs/e/e17/apps/edje_viewer/src/bin/etk_gui.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- etk_gui.h   20 Jan 2007 05:57:48 -0000      1.8
+++ etk_gui.h   30 Sep 2007 02:16:55 -0000      1.9
@@ -30,6 +30,6 @@
    char *path;
 };
 
-void main_window_show(char *file);
-int gui_part_col_sort_cb(Etk_Tree *tree, Etk_Tree_Row *row1,
-      Etk_Tree_Row *row2, Etk_Tree_Col *col, void *data);
+void main_window_show(const char *file);
+int gui_part_col_sort_cb(Etk_Tree_Col *col, Etk_Tree_Row *row1,
+      Etk_Tree_Row *row2, void *data);



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to