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

Reply via email to