diff --git a/src/Makefile.am b/src/Makefile.am index d056588..f330a27 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,7 +11,7 @@ pkgdir = $(module_dir)/$(PACKAGE)/$(MODULE_ARCH) pkg_LTLIBRARIES = module.la module_la_SOURCES = e_mod_main.h \ e_mod_main.c \ - e_mod_config.c \ + ds_config.c \ maximize.c \ moveresize.c \ desksanity.c diff --git a/src/ds_config.c b/src/ds_config.c new file mode 100644 index 0000000..9f20345 --- /dev/null +++ b/src/ds_config.c @@ -0,0 +1,65 @@ +#include "e_mod_main.h" + +static E_Int_Menu_Augmentation *maug = NULL; + + +static void +_ds_menu_ruler(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) +{ + ds_config->disable_ruler = mi->toggle; + if (ds_config->disable_ruler) + mr_shutdown(); + else + mr_init(); +} + +static void +_ds_menu_maximize(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) +{ + ds_config->disable_maximize = mi->toggle; + if (ds_config->disable_maximize) + maximize_shutdown(); + else + maximize_init(); +} + +static void +_ds_menu_add(void *data EINA_UNUSED, E_Menu *m) +{ + E_Menu_Item *mi; + E_Menu *subm; + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, D_("Desksanity")); + e_menu_item_icon_edje_set(mi, mod->edje_file, "icon"); + + subm = e_menu_new(); + e_menu_title_set(subm, D_("Options")); + e_menu_item_submenu_set(mi, subm); + + mi = e_menu_item_new(subm); + e_menu_item_label_set(mi, D_("Disable Move/Resize Ruler")); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, ds_config->disable_ruler); + e_menu_item_callback_set(mi, _ds_menu_ruler, NULL); + + mi = e_menu_item_new(subm); + e_menu_item_label_set(mi, D_("Disable Maximize Effects")); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, ds_config->disable_maximize); + e_menu_item_callback_set(mi, _ds_menu_maximize, NULL); +} + +EINTERN void +ds_config_init(void) +{ + maug = e_int_menus_menu_augmentation_add_sorted + ("config/1", D_("Desksanity"), _ds_menu_add, NULL, NULL, NULL); +} + +EINTERN void +ds_config_shutdown(void) +{ + e_int_menus_menu_augmentation_del("config/1", maug); + maug = NULL; +} diff --git a/src/e_mod_config.c b/src/e_mod_config.c deleted file mode 100644 index 7733afb..0000000 --- a/src/e_mod_config.c +++ /dev/null @@ -1,244 +0,0 @@ -#include "e_mod_main.h" -#if 0 - -static void -_free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata EINA_UNUSED) -{ - mod->cfd = NULL; - mod->label = mod->cfd_list[0] = mod->cfd_list[1] = NULL; -} -/* -static void * -_create_data(E_Config_Dialog *cfd EINA_UNUSED) -{ - return NULL; -} - -static int -_basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata EINA_UNUSED) -{ - return 0; -} - -static int -_basic_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata EINA_UNUSED) -{ - return 0; -} -*/ - -static void -_obj_del(Echievement *ec, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - if (obj == ec->dialog.icon) - ec->dialog.icon = NULL; - else - ec->dialog.label = NULL; -} - -static Evas_Object * -_item_create(Evas *evas, Echievement *ec, Eina_Bool save) -{ - Evas_Object *table, *icon, *label; - char progress[128]; - unsigned int goal, counter; - - etrophy_trophy_goal_get(ec->trophy, &goal, &counter); - table = e_widget_frametable_add(evas, D_(etrophy_trophy_name_get(ec->trophy)), 1); - - icon = e_widget_image_add_from_file(evas, PACKAGE_DATA_DIR "/trophy.png", - 64, 64); - if (save) ec->dialog.icon = icon; - evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, (Evas_Object_Event_Cb)_obj_del, ec); - e_widget_frametable_object_append(table, icon, 0, 0, 1, 2, 1, 1, 1, 0); - label = e_widget_label_add(evas, D_(etrophy_trophy_description_get(ec->trophy))); - e_widget_frametable_object_append(table, label, 1, 0, 3, 1, 1, 1, 1, 0); - - if (etrophy_trophy_earned_get(ec->trophy)) - { - char date[256]; - char buf[512]; - time_t t0; - - t0 = etrophy_trophy_date_get(ec->trophy); - strftime(date, sizeof(date), "%d %B %Y - %r", localtime(&t0)); - snprintf(buf, sizeof(buf), D_("Achieved: %s"), date); - label = e_widget_label_add(evas, buf); - } - else if (goal < 2) - label = e_widget_label_add(evas, D_("Not achieved")); - else - { - snprintf(progress, sizeof(progress), D_("Progress: %u/%u"), counter, goal); - label = e_widget_label_add(evas, progress); - } - if (save) ec->dialog.label = label; - evas_object_event_callback_add(label, EVAS_CALLBACK_DEL, (Evas_Object_Event_Cb)_obj_del, ec); - e_widget_frametable_object_append(table, label, 1, 1, 3, 1, 1, 1, 1, 0); - - return table; -} - -static Evas_Object * -_basic_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data *cfdata EINA_UNUSED) -{ - Evas_Object *toolbook, *list, *item, *sf; - Echievement *ec; - int mw, mh, mww; - - toolbook = e_widget_toolbook_add(evas, 48 * e_scale, 48 * e_scale); - - /* FIXME it should be scrollable and all initial items should - be visible */ - mod->cfd_list[0] = list = e_widget_list_add(evas, 1, 0); - EINA_INLIST_FOREACH(EINA_INLIST_GET(mod->trophies_list), ec) - { - if (!etrophy_trophy_earned_get(ec->trophy)) continue; - item = _item_create(evas, ec, EINA_FALSE); - e_widget_list_object_append(list, item, 1, 1, 0.5); - } - e_widget_size_min_get(list, &mw, &mh); - - if (mw < 320) mw = 320; - if (mh < 220) mh = 220; - - evas_object_resize(list, mw, mh); - sf = e_widget_scrollframe_simple_add(evas, list); - e_widget_size_min_set(sf, 320, 220); - e_widget_toolbook_page_append(toolbook, NULL, D_("My Trophies"), - sf, 1, 1, 1, 1, 0.5, 0.0); - - mod->cfd_list[1] = list = e_widget_list_add(evas, 1, 0); - - EINA_INLIST_FOREACH(EINA_INLIST_GET(mod->trophies_list), ec) - { - if ((!etrophy_trophy_earned_get(ec->trophy)) && (!etrophy_trophy_visibility_get(ec->trophy))) continue; - item = _item_create(evas, ec, EINA_TRUE); - e_widget_list_object_append(list, item, 1, 1, 0.5); - } - e_widget_size_min_get(list, &mww, &mh); - - if (mww < mw) mww = mw; - if (mh < 220) mh = 220; - - evas_object_resize(list, mww, mh); - sf = e_widget_scrollframe_simple_add(evas, list); - e_widget_size_min_set(sf, 320, 220); - e_widget_toolbook_page_append(toolbook, NULL, D_("All Trophies"), - sf, 1, 1, 1, 1, 0.5, 0.0); - - e_widget_toolbook_page_show(toolbook, 0); - list = e_widget_list_add(evas, 0, 0); - e_widget_list_object_append(list, toolbook, 1, 1, 0.5); - { - char buf[1024]; - unsigned score = etrophy_gamescore_trophies_points_get(ds_config->gs); - - /* FIXME: this can look better */ - snprintf(buf, sizeof(buf), DP_("%u Echievement Point", "%u Echievement Points", score), score); - mod->label = item = e_widget_label_add(evas, buf); - e_widget_list_object_append(list, item, 0, 0, 0.5); - } - return list; -} - -static void -_totals_update(void) -{ - char buf[1024]; - unsigned score = etrophy_gamescore_trophies_points_get(ds_config->gs); - - snprintf(buf, sizeof(buf), DP_("%u Echievement Point", "%u Echievement Points", score), score); - e_widget_label_text_set(mod->label, buf); -} - -E_Config_Dialog * -e_int_config_echievements(E_Container *con, const char *params EINA_UNUSED) -{ - E_Config_Dialog *cfd = NULL; - E_Config_Dialog_View *v = NULL; - char buf[4096]; - - if (e_config_dialog_find("Echievements", "extensions/echievements")) - return NULL; - - mod->obj_del_cb = (Evas_Object_Event_Cb)_obj_del; - v = E_NEW(E_Config_Dialog_View, 1); - v->free_cfdata = _free_data; - v->basic.create_widgets = _basic_create; -/* - v->create_cfdata = _create_data; - v->basic.apply_cfdata = _basic_apply; - v->basic.check_changed = _basic_check_changed; -*/ - snprintf(buf, sizeof(buf), "%s/e-module-echievements.edj", - mod->module->dir); - - cfd = e_config_dialog_new(con, D_("Echievements"), "Echievements", - "extensions/echievements", buf, 0, v, NULL); - - e_dialog_resizable_set(cfd->dia, 1); - mod->cfd = cfd; - return cfd; -} - -EINTERN void -ech_cfg_ech_update(Echievement *ec) -{ - char progress[128]; - unsigned int goal, counter; - - if (!mod->cfd) return; - if ((!ec->dialog.icon) || (!ec->dialog.label)) return; - etrophy_trophy_goal_get(ec->trophy, &goal, &counter); - if (etrophy_trophy_earned_get(ec->trophy)) - { - char date[256]; - char buf[512]; - time_t t0; - - t0 = etrophy_trophy_date_get(ec->trophy); - strftime(date, sizeof(date), "%d %B %Y - %r", localtime(&t0)); - snprintf(buf, sizeof(buf), D_("Achieved: %s"), date); - e_widget_label_text_set(ec->dialog.label, buf); - } - else if (goal < 2) - e_widget_label_text_set(ec->dialog.label, D_("Not achieved")); - else - { - snprintf(progress, sizeof(progress), D_("Progress: %u/%u"), counter, goal); - e_widget_label_text_set(ec->dialog.label, progress); - } - e_widget_frametable_object_repack(e_widget_parent_get(ec->dialog.label), ec->dialog.label, 1, 1, 3, 1, 1, 1, 1, 0); - _totals_update(); -} - -EINTERN void -ech_cfg_ech_add(Echievement *ec) -{ - Evas *e; - Evas_Object *item; - int mh; - int w; - - if (!mod->cfd) return; - /* use "all trophies" list current width - * since it's guaranteed to be correct for the moment - */ - evas_object_geometry_get(mod->cfd_list[1], NULL, NULL, &w, NULL); - e = evas_object_evas_get(mod->cfd_list[0]); - item = _item_create(e, ec, EINA_FALSE); - e_widget_list_object_append(mod->cfd_list[0], item, 1, 1, 0.5); - e_widget_size_min_get(mod->cfd_list[0], NULL, &mh); - - evas_object_resize(mod->cfd_list[0], w, mh); - - if (ec->dialog.icon || ec->dialog.label) return; - - item = _item_create(e, ec, EINA_TRUE); - e_widget_list_object_append(mod->cfd_list[1], item, 1, 1, 0.5); - e_widget_size_min_get(mod->cfd_list[1], NULL, &mh); - evas_object_resize(mod->cfd_list[1], w, mh); - _totals_update(); -} -#endif diff --git a/src/e_mod_main.c b/src/e_mod_main.c index 7b63dc5..ed0041c 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -2,7 +2,6 @@ EAPI E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Desksanity"}; static E_Config_DD *conf_edd = NULL; -static Eina_List *handlers = NULL; EINTERN Mod *mod = NULL; EINTERN Config *ds_config = NULL; @@ -16,46 +15,45 @@ _e_mod_ds_config_load(void) #define T Config #define D conf_edd E_CONFIG_VAL(D, T, config_version, UINT); + E_CONFIG_VAL(D, T, disable_ruler, UCHAR); + E_CONFIG_VAL(D, T, disable_maximize, UCHAR); - //ds_config = e_config_domain_load("module.desksanity", conf_edd); + ds_config = e_config_domain_load("module.desksanity", conf_edd); if (ds_config) { if (!e_util_module_config_check("Desksanity", ds_config->config_version, MOD_CONFIG_FILE_VERSION)) - {} + E_FREE(ds_config); } if (!ds_config) - { - ds_config = E_NEW(Config, 1); - ds_config->config_version = (MOD_CONFIG_FILE_EPOCH << 16); - } + ds_config = E_NEW(Config, 1); + ds_config->config_version = MOD_CONFIG_FILE_VERSION; } EAPI void * e_modapi_init(E_Module *m) { - char buf[4096]; + char buf[PATH_MAX]; bindtextdomain(PACKAGE, LOCALEDIR); bind_textdomain_codeset(PACKAGE, "UTF-8"); snprintf(buf, sizeof(buf), "%s/e-module-desksanity.edj", m->dir); elm_theme_overlay_add(NULL, buf); -// - //e_configure_registry_category_add("appearance", 80, D_("Look"), - //NULL, "preferences-look"); - //e_configure_registry_item_add("extensions/desksanity", 110, D_("Echievements"), - //NULL, buf, e_int_config_desksanity); efx_init(); + _e_mod_ds_config_load(); mod = E_NEW(Mod, 1); mod->module = m; mod->edje_file = eina_stringshare_add(buf); + ds_config_init(); ds_init(); - mr_init(); - maximize_init(); + if (!ds_config->disable_ruler) + mr_init(); + if (!ds_config->disable_maximize) + maximize_init(); return m; } @@ -63,19 +61,17 @@ e_modapi_init(E_Module *m) EAPI int e_modapi_shutdown(E_Module *m EINA_UNUSED) { - e_configure_registry_item_del("appearance/desksanity"); - - e_configure_registry_category_del("extensions"); - - E_FREE_FUNC(mod->cfd, e_object_del); - maximize_shutdown(); - mr_shutdown(); + if (!ds_config->disable_maximize) + maximize_shutdown(); + if (!ds_config->disable_ruler) + mr_shutdown(); ds_shutdown(); - //e_config_domain_save("module.desksanity", conf_edd, ds_config); + ds_config_shutdown(); + e_config_domain_save("module.desksanity", conf_edd, ds_config); + E_FREE(ds_config); E_CONFIG_DD_FREE(conf_edd); eina_stringshare_del(mod->edje_file); E_FREE(mod); - E_FREE_LIST(handlers, ecore_event_handler_del); //efx_shutdown(); broken... return 1; } @@ -83,7 +79,7 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) EAPI int e_modapi_save(E_Module *m EINA_UNUSED) { - //e_config_domain_save("module.desksanity", conf_edd, ds_config); + e_config_domain_save("module.desksanity", conf_edd, ds_config); return 1; } diff --git a/src/e_mod_main.h b/src/e_mod_main.h index 38dc2b3..ab8f04b 100644 --- a/src/e_mod_main.h +++ b/src/e_mod_main.h @@ -35,6 +35,8 @@ typedef struct Mod typedef struct Config { unsigned int config_version; + Eina_Bool disable_ruler; + Eina_Bool disable_maximize; } Config; extern Mod *mod; @@ -49,4 +51,7 @@ EINTERN void mr_init(void); EINTERN void maximize_init(void); EINTERN void maximize_shutdown(void); + +EINTERN void ds_config_init(void); +EINTERN void ds_config_shutdown(void); #endif