Enlightenment CVS committal Author : mekius Project : e17 Module : proto
Dir : e17/proto/empower/src/bin/ewl Modified Files: Empower.h Makefile.am empower.c empower_cb_ewl.c empower_gui_ewl.c empower_helper_ewl.c Log Message: Alot of changes, see changelog and news. =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/Empower.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- Empower.h 30 May 2007 17:51:36 -0000 1.9 +++ Empower.h 1 Jun 2007 04:20:09 -0000 1.10 @@ -14,14 +14,21 @@ #define WIDTH 0 #define HEIGHT 85 Ewl_Widget *win; +Ewl_Widget *exec; Ewl_Widget *entry; char cmd[1024]; Ecore_Exe *sudo; +int auth_passed; +int exec_empty; +int startup; +int failure; -enum{SUDO,PASS} mode; +enum{SUDO,PASS,SUDOPROG,HELP} mode; /* empower_cb prototypes */ void key_down_cb(Ewl_Widget *w, void *event, void *data); +void focus_cb(Ewl_Widget *w, void *event, void *data); +void unfocus_cb(Ewl_Widget *w, void *event, void *data); void destroy_cb(Ewl_Widget *w, void *event, void *data); void reveal_cb(Ewl_Widget *w, void *event, void *data); void check_pass_cb(Ewl_Widget *w, void *event, void *data); =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile.am 30 May 2007 03:30:31 -0000 1.4 +++ Makefile.am 1 Jun 2007 04:20:09 -0000 1.5 @@ -14,6 +14,12 @@ empower_ewl_LDADD = $(INTLLIBS) \ @EWL_LIBS@ + +install-exec-hook: + rm -f $(DESTDIR)$(bindir)/empower-askpass && \ + cd $(DESTDIR)$(bindir) && \ + $(LN_S) empower_ewl empower-askpass + else bin_PROGRAMS = empower @@ -24,6 +30,11 @@ empower_LDADD = $(INTLLIBS) \ @EWL_LIBS@ + +install-exec-hook: + rm -f $(DESTDIR)$(bindir)/empower-askpass && \ + cd $(DESTDIR)$(bindir) && \ + $(LN_S) empower empower-askpass endif EXTRA_DIST = =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/empower.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- empower.c 30 May 2007 17:51:36 -0000 1.5 +++ empower.c 1 Jun 2007 04:20:09 -0000 1.6 @@ -1,74 +1,86 @@ #include "Empower.h" -int main(int argc, char** argv) +void parse_options(int argc, char** argv) { - sudo = NULL; + /*FIXME: Parse options here so we can properly handle everything*/ - if(!strcmp(*argv,"empower-askpass")) - mode = PASS; - else if(!strcmp(*argv, "./empower-askpass")) + /*Do initial mode guessing based on executable name and number of args*/ + if(!strcmp(*argv,"empower-askpass") || !strcmp(*argv,"./empower-askpass")) mode = PASS; - else + else if(argc > 1) mode = SUDO; - - --argc; ++argv; //pop off program name + else + mode = SUDOPROG; - if(mode != PASS && !strcmp(*argv, "-p")) - mode = PASS; + --argc; ++argv; //move to the next argument - if(!ecore_init()) - { - printf("Unable to init ecore\n"); - return 1; - } + if(mode == SUDO || mode == SUDOPROG) + snprintf(cmd, 1024, "sudo"); - if(argc || mode == PASS) //commands - { - int i; - - ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,exit_cb,NULL); - - if(mode == SUDO) - snprintf(cmd, 1024, "sudo"); - - while(argc) + while(argc--) + { + if(!strcmp(*argv,"-h") || !strcmp(*argv, "-help")) //help mode + { + mode = HELP; + break; + } + else if(!strcmp(*argv, "-a") || !strcmp(*argv, "-askpass")) //ssh-askpass mode { - if(strcmp(*argv, "--")) + mode = PASS; + break; + } + else + { + if(mode == SUDO || mode == SUDOPROG) { - if(mode == SUDO) - { - strncat(cmd, " ", 1024); - strncat(cmd, *argv, 1024); - --argc; ++argv; - } + strncat(cmd, " ", 1024); + strncat(cmd, *argv, 1024); } - else - break; - } - - if(!ewl_init(&argc, argv)) - { - printf("Unable to init ewl\n"); - return; } - if(mode == SUDO) - ecore_job_add(check_sudo_timeout_job, NULL); - else if(mode == PASS) - display_window(); - - ewl_main(); + argv++; + } +} + +int main(int argc, char** argv) +{ + int i; + sudo = NULL; - if(mode == SUDO) - ecore_exe_run(cmd,NULL); + if(!ecore_init()) + { + printf("Unable to init ecore\n"); + return 1; } - else + + if(!ewl_init(&argc, argv)) + { + printf("Unable to init ewl\n"); + return; + } + + parse_options(argc,argv); + + if(mode == HELP) { printf("-=Usage=-\n"); - printf(" Sudo: empower [SUDO OPTIONS] <program> [PROGRAM OPTIONS] -- [EWL OPTIONS]\n"); - printf(" AskPass: empower-askpass -- [EWL OPTIONS] or empower -p -- [EWL OPTIONS]\n"); - return 1; + printf(" Sudo: empower [SUDO OPTIONS] [PROGRAM] [PROGRAM OPTIONS] [EWL OPTIONS]\n"); + printf(" AskPass: empower-askpass [EWL OPTIONS] or empower -p [EWL OPTIONS]\n"); + return 0; } + + ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,exit_cb,NULL); + + if(mode == SUDO || mode == SUDOPROG) + ecore_job_add(check_sudo_timeout_job, NULL); + else if(mode == PASS) + display_window(); + + ewl_main(); + + if(mode == SUDO || mode == SUDOPROG) + ecore_exe_run(cmd,NULL); return 0; } + =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/empower_cb_ewl.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- empower_cb_ewl.c 30 May 2007 17:51:36 -0000 1.7 +++ empower_cb_ewl.c 1 Jun 2007 04:20:09 -0000 1.8 @@ -2,9 +2,7 @@ void key_down_cb(Ewl_Widget *w, void *event, void *data) { - Ewl_Event_Key_Down *ev; - - ev = event; + Ewl_Event_Key_Down *ev = event; if(!ev->base.modifiers) { @@ -14,6 +12,59 @@ ewl_main_quit(); exit(-1); } + else + { + if(!(startup++)) + { + if(mode != SUDOPROG || failure) + { + ewl_widget_focus_send(entry); + /*Check for single alpha or numeric value*/ + if(ev->base.keyname[1] == '\0' && + (isalpha(*(ev->base.keyname)) || + isdigit(*(ev->base.keyname)))) + ewl_password_text_set(EWL_PASSWORD(entry),ev->base.keyname); + failure = 0; + } + else + { + ewl_widget_focus_send(exec); + /*Check for single alpha or numeric value*/ + if(ev->base.keyname[1] == '\0' && + (isalpha(*(ev->base.keyname)) || + isdigit(*(ev->base.keyname)))) + ewl_text_text_set(EWL_TEXT(exec),ev->base.keyname); + } + } + } + } +} + +void focus_cb(Ewl_Widget *w, void *event, void *data) +{ + const char* text = (char*)data; + if(EWL_PASSWORD_IS(w)) + { + if(!ewl_password_text_get(EWL_PASSWORD(w))) + ewl_password_clear(EWL_PASSWORD(w)); + } + else if(EWL_ENTRY_IS(w)) + { + if(ewl_text_text_get(EWL_TEXT(w)) && + !strcmp(ewl_text_text_get(EWL_TEXT(w)),text)) + ewl_text_clear(EWL_TEXT(w)); + } +} + +void unfocus_cb(Ewl_Widget *w, void *event, void *data) +{ + const char* text = (char*)data; + + if(!ewl_text_text_get(EWL_TEXT(w))) + { + ewl_text_text_set(EWL_TEXT(w),text); + ewl_text_cursor_position_set(EWL_TEXT(w),0); + ewl_text_color_apply(EWL_TEXT(w),100,100,100,200,strlen(text)); } } @@ -32,13 +83,15 @@ void check_pass_cb(Ewl_Widget *w, void *event, void *data) { - char *pass = ewl_password_text_get(EWL_PASSWORD(data)); + char *pass; + + if(data && !auth_passed) pass = ewl_password_text_get(EWL_PASSWORD(data)); if(pass && strlen(pass)) { ewl_widget_disable(win); - if(mode == SUDO) + if(mode == SUDO || mode == SUDOPROG) authorize(pass); else { @@ -54,10 +107,28 @@ int* code = data; sudo = NULL; - ewl_main_quit(); if((ev->exit_code)) + { + ewl_main_quit(); exit(-1); + } + else if(mode == SUDOPROG) + { + if(exec && strlen(ewl_text_text_get(EWL_TEXT(exec)))) + { + ewl_main_quit(); + strncat(cmd, " ", 1024); + strncat(cmd, ewl_text_text_get(EWL_TEXT(exec)), 1024); + } + else + { + auth_passed = 1; + display_window(); + } + } + else + ewl_main_quit(); return 0; } =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/empower_gui_ewl.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- empower_gui_ewl.c 30 May 2007 03:30:31 -0000 1.18 +++ empower_gui_ewl.c 1 Jun 2007 04:20:09 -0000 1.19 @@ -7,15 +7,9 @@ Ewl_Widget *progtext = NULL; Ewl_Widget *vbox = NULL, *hbox = NULL; Ewl_Widget *image = NULL; - uid_t user; - struct passwd *user_name; - char username[256]; - - user = getuid(); - if ((user_name = getpwuid(user)) != NULL) - snprintf(username, 256, "%s's password", user_name->pw_name); - else - snprintf(username, 256, "Your Password"); + entry = NULL; + win = NULL; + exec = NULL; win = ewl_dialog_new(); ewl_window_title_set(EWL_WINDOW(win), "Empower!"); @@ -47,44 +41,59 @@ ewl_object_fill_policy_set(EWL_OBJECT(vbox), EWL_FLAG_FILL_HFILL); ewl_widget_show(vbox); - progtext = ewl_text_new(); - ewl_container_child_append(EWL_CONTAINER(vbox), progtext); - ewl_text_font_size_set(EWL_TEXT(progtext), 12); - ewl_object_alignment_set(EWL_OBJECT(progtext), EWL_FLAG_ALIGN_CENTER); - ewl_object_fill_policy_set(EWL_OBJECT(progtext), EWL_FLAG_FILL_NONE); - ewl_text_text_set(EWL_TEXT(progtext), username); - ewl_widget_show(progtext); - + if(mode == SUDOPROG) + { + exec = ewl_entry_new(); + ewl_container_child_append(EWL_CONTAINER(vbox), exec); + ewl_callback_append(exec, EWL_CALLBACK_VALUE_CHANGED, check_pass_cb, + entry); + ewl_callback_append(exec, EWL_CALLBACK_FOCUS_IN, focus_cb, + "Execute"); + ewl_callback_append(exec, EWL_CALLBACK_FOCUS_OUT, unfocus_cb, + "Execute"); + exec_empty = 1; + ewl_text_align_set(EWL_TEXT(exec),EWL_FLAG_ALIGN_LEFT); + ewl_text_text_set(EWL_TEXT(exec),"Execute"); + ewl_text_cursor_position_set(EWL_TEXT(exec),0); + ewl_text_color_apply(EWL_TEXT(exec),100,100,100,200,strlen("Execute")); + ewl_widget_show(exec); + } + entry = ewl_password_new(); ewl_container_child_append(EWL_CONTAINER(vbox), entry); ewl_callback_append(entry, EWL_CALLBACK_VALUE_CHANGED, check_pass_cb, entry); - ewl_widget_focus_send(entry); - ewl_widget_show(entry); - - ewl_dialog_active_area_set(EWL_DIALOG(win), EWL_POSITION_BOTTOM); - - ok_button = ewl_button_new(); - ewl_stock_type_set(EWL_STOCK(ok_button), EWL_STOCK_OK); - ewl_object_fill_policy_set(EWL_OBJECT(ok_button), EWL_FLAG_FILL_NONE - | EWL_FLAG_FILL_HFILL); - ewl_container_child_append(EWL_CONTAINER(win), ok_button); - ewl_callback_append(ok_button, EWL_CALLBACK_CLICKED, check_pass_cb, - entry); - ewl_widget_show(ok_button); + ewl_callback_append(entry, EWL_CALLBACK_FOCUS_IN, focus_cb, + "Password"); + ewl_callback_append(entry, EWL_CALLBACK_FOCUS_OUT, unfocus_cb, + "Password"); + ewl_text_align_set(EWL_TEXT(entry),EWL_FLAG_ALIGN_LEFT); + ewl_text_text_set(EWL_TEXT(entry),"Password"); + ewl_text_cursor_position_set(EWL_TEXT(entry),0); + ewl_text_color_apply(EWL_TEXT(entry),100,100,100,200,strlen("Password")); - cancel_button = ewl_button_new(); - ewl_stock_type_set(EWL_STOCK(cancel_button), EWL_STOCK_CANCEL); - ewl_object_fill_policy_set(EWL_OBJECT(cancel_button), - EWL_FLAG_FILL_NONE | EWL_FLAG_FILL_HFILL); - ewl_container_child_append(EWL_CONTAINER(win), cancel_button); - ewl_callback_append(cancel_button, EWL_CALLBACK_CLICKED, destroy_cb, - NULL); - ewl_widget_show(cancel_button); + if(!auth_passed) + ewl_widget_show(entry); + + startup = 0; + failure = 0; } void display_window() { - setup_window(); - ewl_widget_show(win); + if(win) + { + ewl_widget_enable(win); + + ewl_password_clear(EWL_PASSWORD(entry)); + ewl_text_text_set(EWL_TEXT(entry),"Password"); + ewl_text_cursor_position_set(EWL_TEXT(entry),0); + ewl_text_color_apply(EWL_TEXT(entry),100,100,100,200,strlen("Password")); + failure = 1; + } + else + { + setup_window(); + ewl_widget_show(win); + } } =================================================================== RCS file: /cvs/e/e17/proto/empower/src/bin/ewl/empower_helper_ewl.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- empower_helper_ewl.c 30 May 2007 03:30:31 -0000 1.1 +++ empower_helper_ewl.c 1 Jun 2007 04:20:09 -0000 1.2 @@ -25,5 +25,6 @@ void check_sudo_timeout_job(void *data) { + auth_passed = 0; authorize(NULL); } ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs