Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_config_background.c e_int_config_background_import.h 
        e_int_config_background_import.c 


Log Message:
Rewrite the import dialog. Should behave better now
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_background.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- e_int_config_background.c   22 Jan 2006 22:45:44 -0000      1.32
+++ e_int_config_background.c   23 Jan 2006 02:56:01 -0000      1.33
@@ -3,6 +3,7 @@
  */
 
 #include "e.h"
+//#include <Ecore_X.h>
 
 #define BG_SET_DEFAULT_DESK 0
 #define BG_SET_THIS_DESK 1
@@ -21,6 +22,9 @@
 static int          _bg_dialog_close            (E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
 static void         _bg_file_added              (void *data, 
Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path);
 
+static void _import_cb_closed(void *obj);
+static int import_open = 0;
+
 static Ecore_File_Monitor *_bg_file_monitor;
 
 struct _E_Config_Dialog_Data
@@ -28,8 +32,9 @@
    char *bg, *current_bg;
    int bg_method;
    E_Config_Dialog *cfd;
-   E_Config_Dialog *import;
    Evas_Object *il;
+   
+   E_Win *import;
 };
 
 EAPI E_Config_Dialog *
@@ -406,13 +411,23 @@
 _bg_config_dialog_cb_import(void *data, void *data2) 
 {
    E_Config_Dialog *parent;
-   E_Config_Dialog *import;
+   E_Win *import;
    
    parent = data;
    if (!parent) return;
 
    import = e_int_config_background_import(parent);
-   parent->cfdata->import = import;
+   if (import) 
+     {         
+       parent->cfdata->import = import;
+       import_open = 1;
+       e_object_del_attach_func_set(E_OBJECT(import), _import_cb_closed);
+     }
+   else 
+     {
+       parent->cfdata->import = NULL;
+       import_open = 0;
+     }
 }
 
 static void 
@@ -452,19 +467,18 @@
 
 static int
 _bg_dialog_close(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
-{   
-   E_Dialog *dia;
-   E_Border *bd;
-   
+{
    if (!cfd) return 0;
    if (!cfdata) return 0;
    if (!cfdata->import) return 1;
-   if (!cfdata->import->dia) return 1;
-   
-   dia = cfdata->import->dia;
-   bd = e_border_find_by_window(dia->win->evas_win);
-   if (!bd) return 1;
+   if (!import_open) return 1;
    
-   e_object_del(E_OBJECT(cfdata->import->dia));   
+   e_object_del(E_OBJECT(cfdata->import));        
    return 1;
 }
+
+static void
+_import_cb_closed(void *obj) 
+{
+   import_open = 0;
+}
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_background_import.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_int_config_background_import.h    22 Jan 2006 14:11:15 -0000      1.1
+++ e_int_config_background_import.h    23 Jan 2006 02:56:01 -0000      1.2
@@ -3,7 +3,7 @@
 #ifndef E_INT_CONFIG_BACKGROUND_IMPORT_H
 #define E_INT_CONFIG_BACKGROUND_IMPORT_H
 
-EAPI E_Config_Dialog *e_int_config_background_import(E_Config_Dialog *parent);
+EAPI E_Win *e_int_config_background_import(E_Config_Dialog *parent);
 
 #endif
 #endif
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_background_import.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- e_int_config_background_import.c    22 Jan 2006 18:14:51 -0000      1.5
+++ e_int_config_background_import.c    23 Jan 2006 02:56:01 -0000      1.6
@@ -79,131 +79,171 @@
 
 static Ecore_Event_Handler *_edj_exe_exit_handler = NULL;
 
-static void        *_create_data               (E_Config_Dialog *cfd);
-static void         _free_data                 (E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
-static int          _basic_apply_data          (E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
-static Evas_Object *_basic_create_widgets      (E_Config_Dialog *cfd, Evas 
*evas, E_Config_Dialog_Data *cfdata);
-static void         _fill_data                 (E_Config_Dialog_Data *cfdata);
 static void         _efm_hilite_cb             (Evas_Object *obj, char *file, 
void *data);
 static void         _bg_edj_gen                (Evas *evas, char *filename, 
int method);
 static int          _edj_exe_exit_cb           (void *data, int type, void 
*event);
 
-struct _E_Config_Dialog_Data 
-{
-   char *file;   
-   int method;
-};
+static void _import_cb_delete(E_Win *win);
+static void _import_cb_resize(E_Win *win);
+static void _import_cb_close(void *data, void *data2);
+static void _import_cb_ok(void *data, void *data2);
+static void _import_cb_wid_on_focus(void *data, Evas_Object *obj);
+static void _import_cb_key_down(void *data, Evas *e, Evas_Object *obj, void 
*event);
 
-EAPI E_Config_Dialog *
-e_int_config_background_import(E_Config_Dialog *parent)
+typedef struct _Bg_Import_Window Bg_Import_Window;
+struct _Bg_Import_Window 
 {
-   E_Config_Dialog *cfd;
-   E_Config_Dialog_View *v;
+   E_Config_Dialog *parent;
+   E_Config_Dialog_Data *cfdata;
    
-   /* Create A New Import Dialog */
-   v = E_NEW(E_Config_Dialog_View, 1);
+   Evas_Object *bg_obj;
+   Evas_Object *box_obj;
+   Evas_Object *event_obj;
+   Evas_Object *content_obj;
    
-   v->create_cfdata           = _create_data;
-   v->free_cfdata             = _free_data;
-   v->basic.apply_cfdata      = _basic_apply_data;
-   v->basic.create_widgets    = _basic_create_widgets;
+   Evas_Object *ok_obj;
+   Evas_Object *close_obj;
    
-   cfd = e_config_dialog_new(parent->con, _("Import An Image"), NULL, 0, v, 
NULL);
-   e_dialog_resizable_set(cfd->dia, 1);
-   ecore_x_icccm_transient_for_set(cfd->dia->win->evas_win, 
parent->dia->win->evas_win);
-   return cfd;
-}
+   E_Win *win;
+};
 
-static void *
-_create_data(E_Config_Dialog *cfd) 
+struct _E_Config_Dialog_Data 
 {
-   E_Config_Dialog_Data *cfdata;
-
-   cfdata = E_NEW(E_Config_Dialog_Data, 1);
-   cfd->cfdata = cfdata;
-   _fill_data(cfdata);
-   return cfdata;   
-}
+   char *file;   
+   int method;
+};
 
-static void
-_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
+EAPI E_Win *
+e_int_config_background_import(E_Config_Dialog *parent)
 {
-   free(cfdata);
-}
-
-static int
-_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) 
-{  
-   E_Fm_File *f;
    Evas *evas;
+   E_Win *win;
+   Bg_Import_Window *import;
+   Evas_Object *o, *of, *ofm, *ord;
+   E_Radio_Group *rg;
+   Evas_Coord w, h;
+   E_Config_Dialog_Data *cfdata;
+   Evas_Modifier_Mask mask;
    
-   if (!cfdata->file[0]) return 0;
-
-   f = e_fm_file_new(cfdata->file);
-   if (!f) return 0;
-      
-   if (!e_fm_file_is_image(f)) return 0;
-   free(f);
+   import = E_NEW(Bg_Import_Window, 1);
+   if (!import) return NULL;
    
-   evas = e_win_evas_get(cfd->dia->win);
-   _bg_edj_gen(evas, cfdata->file, cfdata->method);
-   return 1;
-}
-
-static Evas_Object *
-_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata) 
-{
-   Evas_Object *o, *of, *ofm, *ol;
-   E_Dialog *dia;
-   E_Radio_Group *rg;
+   win = e_win_new(parent->con);
+   if (!win) 
+     { 
+       free(import);
+       return NULL;    
+     }
    
-   _fill_data(cfdata);
+   cfdata = E_NEW(E_Config_Dialog_Data, 1);
+   cfdata->method = 0;
+   import->cfdata = cfdata;
+   import->win = win;
+   
+   evas = e_win_evas_get(win);
+   
+   import->parent = parent;
+
+   e_win_title_set(win, _("Import An Image"));
+   e_win_delete_callback_set(win, _import_cb_delete);
+   e_win_resize_callback_set(win, _import_cb_resize);
+   e_win_dialog_set(win, 1);
+   e_win_name_class_set(win, "E", "_dialog");
+
+   o = edje_object_add(evas);
+   import->bg_obj = o;
+   e_theme_edje_object_set(o, "base/theme/dialog", "widgets/dialog/main");
+   evas_object_move(o, 0, 0);
+   evas_object_show(o);
+   
+   o = e_widget_list_add(evas, 1, 1);
+   e_widget_on_focus_hook_set(o, _import_cb_wid_on_focus, import);
+   import->box_obj = o;
+   edje_object_part_swallow(import->bg_obj, "buttons_swallow", o);
+   
+   o = evas_object_rectangle_add(evas);
+   import->event_obj = o;
+   mask = 0;
+   evas_object_key_grab(o, "Tab", mask, ~mask, 0);
+   mask = evas_key_modifier_mask_get(evas, "Shift");
+   evas_object_key_grab(o, "Tab", mask, ~mask, 0);
+   mask = 0;
+   evas_object_key_grab(o, "Return", mask, ~mask, 0);
+   mask = 0;
+   evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0);
+   mask = 0;
+   evas_object_key_grab(o, "Space", mask, ~mask, 0);
+   mask = 0;
+   evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, 
_import_cb_key_down, import);
    
-   dia = cfd->dia;
+   o = e_widget_list_add(evas, 0, 0);   
+   import->content_obj = o;
 
-   ol = e_widget_list_add(evas, 0, 0);
-   of = e_widget_framelist_add(evas, _("Image To Import"), 0);   
    ofm = e_widget_fileman_add(evas, (&(cfdata->file)));
-   e_widget_fileman_hilite_callback_add(ofm, _efm_hilite_cb, dia);
-   e_widget_framelist_object_append(of, ofm);   
-   e_widget_list_object_append(ol, of, 1, 1, 0.5);
-   
+   e_widget_fileman_hilite_callback_add(ofm, _efm_hilite_cb, import);
+   e_widget_list_object_append(o, ofm, 1, 1, 0.5);
+
    of = e_widget_frametable_add(evas, _("Options"), 0);
    rg = e_widget_radio_group_new(&cfdata->method);
-   o = e_widget_radio_add(evas, _("Center"), E_BG_CENTER, rg);
-   e_widget_frametable_object_append(of, o, 0, 0, 1, 1, 1, 0, 1, 0);
-   o = e_widget_radio_add(evas, _("Scale"), E_BG_SCALE, rg);
-   e_widget_frametable_object_append(of, o, 0, 1, 1, 1, 1, 0, 1, 0);
-   o = e_widget_radio_add(evas, _("Tile"), E_BG_TILE, rg);
-   e_widget_frametable_object_append(of, o, 0, 2, 1, 1, 1, 0, 1, 0);
-
-   e_widget_list_object_append(ol, of, 1, 1, 0.5);
-   return ol;
-}
-
-static void
-_fill_data(E_Config_Dialog_Data *cfdata)
-{
-   cfdata->method = E_BG_SCALE;
+   ord = e_widget_radio_add(evas, _("Center Image"), E_BG_CENTER, rg);
+   e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0);
+   ord = e_widget_radio_add(evas, _("Scale Image"), E_BG_SCALE, rg);
+   e_widget_frametable_object_append(of, ord, 0, 1, 1, 1, 1, 0, 1, 0);
+   ord = e_widget_radio_add(evas, _("Tile Image"), E_BG_TILE, rg);
+   e_widget_frametable_object_append(of, ord, 0, 2, 1, 1, 1, 0, 1, 0);
+   
+   e_widget_list_object_append(o, of, 1, 1, 0.5);
+   
+   e_widget_min_size_get(o, &w, &h);
+   edje_extern_object_min_size_set(o, w, h);
+   edje_object_part_swallow(import->bg_obj, "content_swallow", o);
+   evas_object_show(o);
+   
+   import->ok_obj = e_widget_button_add(evas, _("Import"), NULL, 
_import_cb_ok, win, cfdata);
+   e_widget_disabled_set(import->ok_obj, 1);
+   e_widget_list_object_append(import->box_obj, import->ok_obj, 1, 0, 0.5);
+
+   import->close_obj = e_widget_button_add(evas, _("Close"), NULL, 
_import_cb_close, win, NULL);
+   e_widget_list_object_append(import->box_obj, import->close_obj, 1, 0, 0.5);
+   
+   e_win_centered_set(win, 1);
+   
+   o = import->box_obj;
+   e_widget_min_size_get(o, &w, &h);
+   edje_extern_object_min_size_set(o, w, h);
+   edje_object_part_swallow(import->bg_obj, "buttons_swallow", o);
+   
+   edje_object_size_min_calc(import->bg_obj, &w, &h);
+   evas_object_resize(import->bg_obj, w, h);
+   e_win_resize(win, w, h);
+   e_win_size_min_set(win, w, h);
+   e_win_size_max_set(win, 99999, 99999);
+   e_win_show(win);
+   
+   if (!e_widget_focus_get(import->bg_obj))
+     e_widget_focus_set(import->box_obj, 1);
+   
+   win->data = import;
+   return win;
 }
 
 static void 
 _efm_hilite_cb(Evas_Object *obj, char *file, void *data) 
 {
-   E_Dialog *dia;
    E_Fm_File *f;
+   Bg_Import_Window *import;
    
-   dia = (E_Dialog *)data;
-   if (!dia) return;
-
    f = e_fm_file_new(file);
    if (!f) return;
    
+   import = data;
+   if (!import) return;
+   
    if (e_fm_file_is_image(f)) 
-     {
-       e_dialog_button_disable_num_set(dia, 0, 0);   
-       e_dialog_button_disable_num_set(dia, 1, 0);     
-     }
+     e_widget_disabled_set(import->ok_obj, 0);
+   else 
+     e_widget_disabled_set(import->ok_obj, 1); 
+   
    free(f);
 }
 
@@ -289,8 +329,133 @@
    
    x = NULL;
    ecore_event_handler_del(_edj_exe_exit_handler);
-
+   _edj_exe_exit_handler = NULL;
+   
    unlink(data);   
-
    return 0;
 }
+
+static void 
+_import_cb_delete(E_Win *win) 
+{
+   Bg_Import_Window *import;
+   
+   import = win->data;
+   if (import) free(import);
+   e_object_del(E_OBJECT(win));
+}
+
+static void 
+_import_cb_resize(E_Win *win) 
+{
+   Bg_Import_Window *import;
+   
+   import = win->data;
+   if (!import) return;
+   evas_object_resize(import->bg_obj, win->w, win->h);
+}
+
+static void 
+_import_cb_close(void *data, void *data2) 
+{
+   Bg_Import_Window *import;
+   E_Win *win;
+   
+   win = data;   
+   import = win->data;
+   if (import) free(import);
+   e_object_del(E_OBJECT(win));
+}
+
+static void 
+_import_cb_ok(void *data, void *data2) 
+{
+   E_Fm_File *f;
+   Evas *evas;
+   E_Win *win;
+   E_Config_Dialog_Data *cfdata;
+   
+   win = data;   
+   cfdata = data2;
+   
+   if (!cfdata->file[0]) return;
+
+   f = e_fm_file_new(cfdata->file);
+   if (!f) return;
+   if (!e_fm_file_is_image(f)) return;
+   free(f);
+
+   evas = e_win_evas_get(win);
+   _bg_edj_gen(evas, cfdata->file, cfdata->method);
+}
+
+static void 
+_import_cb_wid_on_focus(void *data, Evas_Object *obj) 
+{
+   Bg_Import_Window *import;
+   
+   import = data;
+   if (obj == import->content_obj)
+     e_widget_focused_object_clear(import->box_obj);
+   else if (import->content_obj)
+     e_widget_focused_object_clear(import->content_obj);
+}
+
+static void 
+_import_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event) 
+{
+   Evas_Event_Key_Down *ev;
+   Bg_Import_Window *dia;
+
+   ev = event;
+   dia = data;
+   if (!strcmp(ev->keyname, "Tab"))
+     {
+       if 
(evas_key_modifier_is_set(evas_key_modifier_get(e_win_evas_get(dia->win)), 
"Shift"))
+         {
+            if (e_widget_focus_get(dia->box_obj))
+              {
+                 if (!e_widget_focus_jump(dia->box_obj, 0))
+                   {
+                      e_widget_focus_set(dia->content_obj, 0);
+                      if (!e_widget_focus_get(dia->content_obj))
+                        e_widget_focus_set(dia->box_obj, 0);
+                   }
+              }
+            else
+              {
+                 if (!e_widget_focus_jump(dia->content_obj, 0))
+                   e_widget_focus_set(dia->box_obj, 0);
+              }
+         }
+       else
+         {
+            if (e_widget_focus_get(dia->box_obj))
+              {
+                 if (!e_widget_focus_jump(dia->box_obj, 1))
+                   {
+                      e_widget_focus_set(dia->content_obj, 1);
+                      if (!e_widget_focus_get(dia->content_obj))
+                        e_widget_focus_set(dia->box_obj, 1);
+                   }
+              }
+            else
+              {
+                 if (!e_widget_focus_jump(dia->content_obj, 1))
+                   e_widget_focus_set(dia->box_obj, 1);
+              }
+         }
+     }
+   else if (((!strcmp(ev->keyname, "Return")) || 
+            (!strcmp(ev->keyname, "KP_Enter")) || 
+            (!strcmp(ev->keyname, "space"))))
+     {
+       Evas_Object *o = NULL;
+       
+       if ((dia->content_obj) && (e_widget_focus_get(dia->content_obj)))
+         o = e_widget_focused_object_get(dia->content_obj);
+       else
+         o = e_widget_focused_object_get(dia->box_obj);
+       if (o) e_widget_activate(o);
+     }   
+}




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to