Enlightenment CVS committal Author : devilhorns Project : e_modules Module : screenshot
Dir : e_modules/screenshot Modified Files: TODO e_mod_config.c e_mod_main.c e_mod_main.h Log Message: Screenshot module can now optionally prompt for a filename when you take the shot (titansoccer) :) Removed a todo item. =================================================================== RCS file: /cvs/e/e_modules/screenshot/TODO,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- TODO 22 May 2006 09:16:32 -0000 1.7 +++ TODO 13 Jun 2006 01:25:49 -0000 1.8 @@ -11,8 +11,6 @@ In the Advanced case, i'd leave the behaviour of the ss as is. -Option to allow prompting to user of filename to use. - * Nice to have * * The ss module should highlight when mouse overs it. Similarly as Start module does. =================================================================== RCS file: /cvs/e/e_modules/screenshot/e_mod_config.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- e_mod_config.c 21 May 2006 15:07:31 -0000 1.22 +++ e_mod_config.c 13 Jun 2006 01:25:49 -0000 1.23 @@ -7,6 +7,7 @@ int method; int use_import; int use_scrot; + int prompt; double delay_time; char *location; char *filename; @@ -26,6 +27,8 @@ } scrot; int use_app; char *app; + + Evas_Object *file_entry; }; /* Protos */ @@ -35,6 +38,7 @@ static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static void _prompt_cb_change(void *data, Evas_Object *obj); /* Config Calls */ void @@ -63,6 +67,8 @@ static void _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata) { + cfdata->prompt = ci->prompt; + if (ci->use_import == 1) cfdata->method = 0; else if (ci->use_scrot == 1) @@ -143,15 +149,20 @@ e_widget_list_object_append(o, of, 1, 1, 0.5); of = e_widget_frametable_add(evas, D_("File Settings"), 1); - ob = e_widget_label_add(evas, D_("Save Directory:")); + ob = e_widget_check_add(evas, D_("Always Prompt For Filename"), &(cfdata->prompt)); + e_widget_on_change_hook_set(ob, _prompt_cb_change, cfdata); e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 0, 1, 0); + ob = e_widget_label_add(evas, D_("Save Directory:")); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0); ob = e_widget_entry_add(evas, &cfdata->location); - e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0); ob = e_widget_label_add(evas, D_("Filename:")); - e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 0, 0, 1, 0); ob = e_widget_entry_add(evas, &cfdata->filename); - e_widget_frametable_object_append(of, ob, 1, 1, 2, 1, 1, 0, 1, 0); + cfdata->file_entry = ob; + e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0); e_widget_list_object_append(o, of, 1, 1, 0.5); + return o; } @@ -163,6 +174,9 @@ Config_Item *ci; ci = cfd->data; + + ci->prompt = cfdata->prompt; + if (cfdata->method == 0) { ci->use_import = 1; @@ -188,7 +202,7 @@ evas_stringshare_del(ci->filename); if (cfdata->filename != NULL) { - cfdata->filename = ecore_file_strip_ext(cfdata->filename); +// cfdata->filename = ecore_file_strip_ext(cfdata->filename); ci->filename = evas_stringshare_add(cfdata->filename); } else @@ -234,20 +248,24 @@ of = e_widget_frametable_add(evas, D_("Image Viewer Settings"), 1); ob = e_widget_check_add(evas, D_("Launch Image Viewer After Screenshot"), &(cfdata->use_app)); - e_widget_frametable_object_append(of, ob, 0, 0, 2, 1, 1, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 0, 1, 0); ob = e_widget_entry_add(evas, &(cfdata->app)); - e_widget_frametable_object_append(of, ob, 0, 1, 2, 1, 1, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 0, 1, 0); e_widget_list_object_append(o, of, 1, 1, 0.5); of = e_widget_frametable_add(evas, D_("File Settings"), 1); - ob = e_widget_label_add(evas, D_("Save Directory:")); + ob = e_widget_check_add(evas, D_("Always Prompt For Filename"), &(cfdata->prompt)); + e_widget_on_change_hook_set(ob, _prompt_cb_change, cfdata); e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 0, 0, 1, 0); + ob = e_widget_label_add(evas, D_("Save Directory:")); + e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0); ob = e_widget_entry_add(evas, &cfdata->location); - e_widget_frametable_object_append(of, ob, 1, 0, 2, 1, 1, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 0, 1, 0); ob = e_widget_label_add(evas, D_("Filename:")); - e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 0, 0, 1, 0); + e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 0, 0, 1, 0); ob = e_widget_entry_add(evas, &cfdata->filename); - e_widget_frametable_object_append(of, ob, 1, 1, 2, 1, 1, 0, 1, 0); + cfdata->file_entry = ob; + e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 0, 1, 0); e_widget_list_object_append(o, of, 1, 1, 0.5); ot = e_widget_table_add(evas, 0); @@ -308,4 +326,24 @@ e_config_save_queue(); return 1; +} + +static void +_prompt_cb_change(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = data; + if (!cfdata) return; + + if (!cfdata->prompt) + { + e_widget_disabled_set(cfdata->file_entry, 0); + e_widget_entry_text_set(cfdata->file_entry, cfdata->filename); + } + else + { + e_widget_disabled_set(cfdata->file_entry, 1); + e_widget_entry_text_set(cfdata->file_entry, ""); + } } =================================================================== RCS file: /cvs/e/e_modules/screenshot/e_mod_main.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -3 -r1.47 -r1.48 --- e_mod_main.c 6 Jun 2006 15:31:00 -0000 1.47 +++ e_mod_main.c 13 Jun 2006 01:25:49 -0000 1.48 @@ -47,6 +47,9 @@ static void _ss_free(Screenshot *ss); static void _ss_handle_mouse_down(Instance *inst); static int _ss_exe_cb_exit(void *data, int type, void *event); +static void _ss_take_shot(void *data); +static void _ss_get_filename(void *data); +static void _cb_entry_ok(char *text, void *data); char *_get_import_options(Config_Item *ci); char *_get_scrot_options(Config_Item *ci); @@ -228,6 +231,7 @@ ci->use_import = 0; ci->use_scrot = 1; } + ci->prompt = 0; ci->location = evas_stringshare_add(e_user_homedir_get()); ci->filename = evas_stringshare_add(""); ci->import.use_img_border = 1; @@ -267,6 +271,7 @@ E_CONFIG_VAL(D, T, delay_time, DOUBLE); E_CONFIG_VAL(D, T, use_import, UCHAR); E_CONFIG_VAL(D, T, use_scrot, UCHAR); + E_CONFIG_VAL(D, T, prompt, UCHAR); E_CONFIG_VAL(D, T, location, STR); E_CONFIG_VAL(D, T, filename, STR); E_CONFIG_VAL(D, T, import.use_img_border, UCHAR); @@ -317,6 +322,7 @@ ci->use_import = 0; ci->use_scrot = 1; } + ci->prompt = 0; ci->location = evas_stringshare_add(e_user_homedir_get()); ci->filename = evas_stringshare_add(""); ci->import.use_img_border = 1; @@ -336,7 +342,7 @@ ss_config->module = m; e_gadcon_provider_register(&_gc_class); - return 1; + return (void *)1; } EAPI int @@ -428,45 +434,23 @@ static void _ss_handle_mouse_down(Instance *inst) { - Edje_Message_Int_Set *msg; - char buf[1024]; - char *cmd, *opt, *f; Config_Item *ci; if (inst->exe) return; ci = _ss_config_item_get(inst->gcc->id); - if (ci->use_import == 1) - { - cmd = strdup("import"); - opt = _get_import_options(ci); - } - else if (ci->use_scrot == 1) + if (!ci->prompt) { - cmd = strdup("scrot"); - opt = _get_scrot_options(ci); + if (!ci->filename) + { + char *f = _get_filename(ci); + ci->filename = evas_stringshare_add(f); + e_config_save_queue(); + } + _ss_take_shot(inst); } else - { - e_module_dialog_show(D_("Enlightenment Screenshot Module"), - D_("Please install either ImageMagick or Scrot for taking screenshots.")); - return; - } - - f = _get_filename(ci); - snprintf(buf, sizeof(buf), "%s %s %s", cmd, opt, f); - - inst->filename = evas_stringshare_add(f); - ss_config->exe_exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _ss_exe_cb_exit, NULL); - if (ci->delay_time > 0) - { - msg = malloc(sizeof(Edje_Message_Int_Set) + 1 * sizeof(int)); - msg->count = 1; - msg->val[0] = ci->delay_time - 1; - edje_object_message_send(inst->ss->ss_obj, EDJE_MESSAGE_INT_SET, 1, msg); - free(msg); - } - inst->exe = ecore_exe_run(buf, inst); + _ss_get_filename(inst); } char * @@ -605,3 +589,106 @@ } return 0; } + +static void +_ss_take_shot(void *data) +{ + Instance *inst; + Config_Item *ci; + Edje_Message_Int_Set *msg; + char buf[1024]; + char *cmd, *opt, *p; + + inst = data; + if (!inst) return; + + ci = _ss_config_item_get(inst->gcc->id); + if (!ci) return; + + if (ci->use_import == 1) + { + cmd = strdup("import"); + opt = _get_import_options(ci); + } + else if (ci->use_scrot == 1) + { + cmd = strdup("scrot"); + opt = _get_scrot_options(ci); + } + else + { + e_module_dialog_show(D_("Enlightenment Screenshot Module"), + D_("Please install either ImageMagick or Scrot for taking screenshots.")); + return; + } + + p = strrchr(ci->filename, '.'); + if (!p) + { + snprintf(buf, sizeof(buf), "%s.png", ci->filename); + evas_stringshare_del(ci->filename); + ci->filename = evas_stringshare_add(buf); + e_config_save_queue(); + } + + snprintf(buf, sizeof(buf), "%s %s %s/%s", cmd, opt, ci->location, ci->filename); + inst->filename = evas_stringshare_add(ci->filename); + ss_config->exe_exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _ss_exe_cb_exit, NULL); + if (ci->delay_time > 0) + { + msg = malloc(sizeof(Edje_Message_Int_Set) + 1 * sizeof(int)); + msg->count = 1; + msg->val[0] = ci->delay_time - 1; + edje_object_message_send(inst->ss->ss_obj, EDJE_MESSAGE_INT_SET, 1, msg); + free(msg); + } + inst->exe = ecore_exe_run(buf, inst); +} + +static void +_ss_get_filename(void *data) +{ + e_entry_dialog_show(_("Enlightenment Screenshot Module"), "enlightenment/e", + _("Enter a new filename to use for this screenshot"), + NULL, NULL, _cb_entry_ok, NULL, data); +} + +static void +_cb_entry_ok(char *text, void *data) +{ + Instance *inst; + Config_Item *ci; + char buf[4096]; + char *t; + + inst = data; + if (!inst) return; + + ci = _ss_config_item_get(inst->gcc->id); + + t = ecore_file_get_dir(text); + if (!strcmp(t, text)) + { + e_module_dialog_show(D_("Enlightenment Screenshot Module"), + D_("You did not specify a path.<br>" + "This shot will be saved in your home folder.")); + if (ci->location) + evas_stringshare_del(ci->location); + ci->location = evas_stringshare_add(e_user_homedir_get()); + } + else + { + + if (ci->location) + evas_stringshare_del(ci->location); + ci->location = evas_stringshare_add(t); + } + + if (ci->filename) + evas_stringshare_del(ci->filename); + ci->filename = evas_stringshare_add(text); + e_config_save_queue(); + + _ss_take_shot(inst); +} + =================================================================== RCS file: /cvs/e/e_modules/screenshot/e_mod_main.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- e_mod_main.h 6 Jun 2006 15:31:00 -0000 1.18 +++ e_mod_main.h 13 Jun 2006 01:25:49 -0000 1.19 @@ -23,6 +23,7 @@ double delay_time; unsigned char use_import; unsigned char use_scrot; + unsigned char prompt; const char *location; const char *filename; unsigned char use_app; _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs