diff --git a/configure.in b/configure.in index c4d1e194e..a73534a4a 100644 --- a/configure.in +++ b/configure.in @@ -351,6 +351,8 @@ src/modules/conf_window_display/Makefile src/modules/conf_window_display/module.desktop src/modules/conf_window_focus/Makefile src/modules/conf_window_focus/module.desktop +src/modules/conf_window_remembers/Makefile +src/modules/conf_window_remembers/module.desktop src/modules/conf_window_manipulation/Makefile src/modules/conf_window_manipulation/module.desktop src/modules/conf_menus/Makefile diff --git a/data/themes/default_icons.edc b/data/themes/default_icons.edc index 949d73fa3..08d88255f 100644 --- a/data/themes/default_icons.edc +++ b/data/themes/default_icons.edc @@ -105,6 +105,8 @@ images { image: "e17_icon_startup_applications.png" COMP; image: "e17_icon_power_management.png" COMP; image: "e17_icon_screensaver.png" COMP; + + image: "e17_icon_window_remembers.png" COMP; } group { @@ -2248,6 +2250,25 @@ group { } } } +group { + name: "e/icons/enlightenment/window_remembers"; + max: 64 64; + parts { + part { + name: "icon"; + mouse_events: 0; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + max: 64 64; + image { + normal: "e17_icon_window_remembers.png"; + } + } + } + } +} diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index f94bd8f83..5a089b9e3 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -557,4 +557,6 @@ e17_tl_corner_logo.png \ e17_tl_corner_logo_shadow.png \ e17_whitev.png \ e17_wiz_b1.png \ -e17_wiz_b2.png +e17_wiz_b2.png \ +e17_icon_window_remembers.png + diff --git a/data/themes/images/e17_icon_window_remembers.png b/data/themes/images/e17_icon_window_remembers.png new file mode 100644 index 000000000..a1f2d2bbf Binary files /dev/null and b/data/themes/images/e17_icon_window_remembers.png differ diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c index 4544c0e42..8fe619f7f 100644 --- a/src/bin/e_config_dialog.c +++ b/src/bin/e_config_dialog.c @@ -177,7 +177,7 @@ _e_config_dialog_go(E_Config_Dialog *cfd, E_Config_Dialog_CFData_Type type) e_object_del_attach_func_set(E_OBJECT(cfd->dia), _e_config_dialog_cb_dialog_del); e_dialog_title_set(cfd->dia, cfd->title); if (!cfd->cfdata) cfd->cfdata = cfd->view->create_cfdata(cfd); - + if (type == E_CONFIG_DIALOG_CFDATA_TYPE_BASIC) { if (cfd->view->advanced.create_widgets) diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am index 0d9eb175c..9cf4f368c 100644 --- a/src/modules/Makefile.am +++ b/src/modules/Makefile.am @@ -49,7 +49,8 @@ conf_winlist \ conf_exebuf \ conf_paths \ conf_mime \ -conf_interaction +conf_interaction \ +conf_window_remembers if HAVE_TEMPERATURE SUBDIRS += temperature diff --git a/src/modules/conf_window_remembers/.cvsignore b/src/modules/conf_window_remembers/.cvsignore new file mode 100644 index 000000000..06d064a84 --- /dev/null +++ b/src/modules/conf_window_remembers/.cvsignore @@ -0,0 +1,7 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +module.la +module.desktop diff --git a/src/modules/conf_window_remembers/Makefile.am b/src/modules/conf_window_remembers/Makefile.am new file mode 100644 index 000000000..7ea4b1fc3 --- /dev/null +++ b/src/modules/conf_window_remembers/Makefile.am @@ -0,0 +1,31 @@ +MAINTAINERCLEANFILES = Makefile.in +MODULE = conf_window_remembers + +# data files for the module +filesdir = $(libdir)/enlightenment/modules/$(MODULE) +files_DATA = \ +e-module-$(MODULE).edj module.desktop + +EXTRA_DIST = $(files_DATA) + +# the module .so file +INCLUDES = -I. \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src/modules/$(MODULE) \ + -I$(top_srcdir)/src/bin \ + -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/modules \ + @e_cflags@ +pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH) +pkg_LTLIBRARIES = module.la +module_la_SOURCES = e_mod_main.c \ + e_mod_main.h \ + e_int_config_remembers.c \ + e_int_config_remembers.h + +module_la_LIBADD = @e_libs@ @dlopen_libs@ +module_la_LDFLAGS = -module -avoid-version +module_la_DEPENDENCIES = $(top_builddir)/config.h + +uninstall: + rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE) diff --git a/src/modules/conf_window_remembers/e-module-conf_window_remembers.edj b/src/modules/conf_window_remembers/e-module-conf_window_remembers.edj new file mode 100644 index 000000000..401e6df44 Binary files /dev/null and b/src/modules/conf_window_remembers/e-module-conf_window_remembers.edj differ diff --git a/src/modules/conf_window_remembers/e_int_config_remembers.c b/src/modules/conf_window_remembers/e_int_config_remembers.c new file mode 100644 index 000000000..b1e9c1d42 --- /dev/null +++ b/src/modules/conf_window_remembers/e_int_config_remembers.c @@ -0,0 +1,160 @@ +#include "e.h" + +/* function protos */ +static void *_create_data(E_Config_Dialog *cfd); +static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _fill_remembers(E_Config_Dialog_Data *cfdata); +static void _cb_delete(void *data, void *data2); +static void _cb_list_change(void *data, Evas_Object *obj); + +struct _E_Config_Dialog_Data +{ + Evas_Object *list, *btn; +}; + +EAPI E_Config_Dialog * +e_int_config_remembers(E_Container *con, const char *params __UNUSED__) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_remembers_dialog")) return NULL; + + v = E_NEW(E_Config_Dialog_View, 1); + v->create_cfdata = _create_data; + v->free_cfdata = _free_data; + v->basic.create_widgets = _basic_create; + + cfd = e_config_dialog_new(con, _("Window Remembers"), "E", + "_config_remembers_dialog", + "enlightenment/window_remembers", 0, v, NULL); + e_dialog_resizable_set(cfd->dia, 1); + return cfd; +} + +/* private functions */ +static void * +_create_data(E_Config_Dialog *cfd) +{ + E_Config_Dialog_Data *cfdata; + + cfdata = E_NEW(E_Config_Dialog_Data, 1); + return cfdata; +} + +static void +_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + E_FREE(cfdata); +} + +static Evas_Object * +_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *o, *of, *ow; + + o = e_widget_list_add(evas, 0, 0); + of = e_widget_frametable_add(evas, _("Window Remembers"), 0); + + ow = e_widget_button_add(evas, _("Delete Remember(s)"), NULL, _cb_delete, + cfdata, NULL); + cfdata->btn = ow; + + ow = e_widget_ilist_add(evas, 24, 24, NULL); + cfdata->list = ow; + e_widget_ilist_multi_select_set(ow, 1); + e_widget_on_change_hook_set(ow, _cb_list_change, cfdata); + _fill_remembers(cfdata); + + e_widget_frametable_object_append(of, cfdata->list, 0, 0, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, cfdata->btn, 0, 1, 1, 1, 1, 1, 1, 0); + + e_widget_list_object_append(o, of, 1, 1, 0.5); + + e_widget_disabled_set(cfdata->btn, 1); + return o; +} + +static void +_fill_remembers(E_Config_Dialog_Data *cfdata) +{ + Evas *evas; + Evas_List *l = NULL; + int w = 0; + + evas = evas_object_evas_get(cfdata->list); + evas_event_freeze(evas); + edje_freeze(); + e_widget_ilist_freeze(cfdata->list); + e_widget_ilist_clear(cfdata->list); + + for (l = e_config->remembers; l; l = l->next) + { + E_Remember *rem = NULL; + + if (!(rem = l->data)) continue; + + /* Filter out E's own remember */ + if ((rem->name) && (!strcmp(rem->name, "E"))) continue; + + if (rem->name) + e_widget_ilist_append(cfdata->list, NULL, rem->name, NULL, rem, NULL); + else if (rem->class) + e_widget_ilist_append(cfdata->list, NULL, rem->class, NULL, rem, NULL); + else if (rem->title) + e_widget_ilist_append(cfdata->list, NULL, rem->title, NULL, rem, NULL); + else if (rem->role) + e_widget_ilist_append(cfdata->list, NULL, rem->role, NULL, rem, NULL); + } + + e_widget_ilist_go(cfdata->list); + e_widget_min_size_get(cfdata->list, &w, NULL); + e_widget_min_size_set(cfdata->list, w, 200); + e_widget_ilist_thaw(cfdata->list); + edje_thaw(); + evas_event_thaw(evas); + + e_widget_disabled_set(cfdata->btn, 1); +} + +static void +_cb_delete(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + Evas_List *l = NULL; + int i = 0, changed = 0; + + if (!(cfdata = data)) return; + for (i = 0, l = e_widget_ilist_items_get(cfdata->list); l; l = l->next, i++) + { + E_Ilist_Item *item = NULL; + E_Remember *rem = NULL; + + item = l->data; + if ((!item) || (!item->selected)) continue; + if (!(rem = e_widget_ilist_nth_data_get(cfdata->list, i))) continue; + e_remember_unuse(rem); + e_remember_del(rem); + changed = 1; + } + + if (changed) e_config_save_queue(); + if (1) evas_list_free(l); + + _fill_remembers(cfdata); +} + +static void +_cb_list_change(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + + if (!(cfdata = data)) return; + if (e_widget_ilist_selected_count_get(cfdata->list) < 1) + { + e_widget_disabled_set(cfdata->btn, 1); + return; + } + e_widget_disabled_set(cfdata->btn, 0); +} diff --git a/src/modules/conf_window_remembers/e_int_config_remembers.h b/src/modules/conf_window_remembers/e_int_config_remembers.h new file mode 100644 index 000000000..3d344d3fe --- /dev/null +++ b/src/modules/conf_window_remembers/e_int_config_remembers.h @@ -0,0 +1,9 @@ +#ifdef E_TYPEDEFS +#else +#ifndef E_INT_CONFIG_REMEMBERS_H +#define E_INT_CONFIG_REMEMBERS_H + +EAPI E_Config_Dialog *e_int_config_remembers(E_Container *con, const char *params __UNUSED__); + +#endif +#endif diff --git a/src/modules/conf_window_remembers/e_mod_main.c b/src/modules/conf_window_remembers/e_mod_main.c new file mode 100644 index 000000000..9f0c8cb25 --- /dev/null +++ b/src/modules/conf_window_remembers/e_mod_main.c @@ -0,0 +1,42 @@ +#include "e.h" +#include "e_mod_main.h" + +static E_Module *conf_module = NULL; + +EAPI E_Module_Api e_modapi = +{ + E_MODULE_API_VERSION, "Configuration - Window Remembers" +}; + +EAPI void * +e_modapi_init(E_Module *m) +{ + e_configure_registry_category_add("windows", 50, _("Windows"), NULL, + "enlightenment/windows"); + e_configure_registry_item_add("windows/window_remembers", 20, + _("Window Remembers"), NULL, + "enlightenment/window_remembers", + e_int_config_remembers); + conf_module = m; + e_module_delayed_set(m, 1); + return m; +} + +EAPI int +e_modapi_shutdown(E_Module *m) +{ + E_Config_Dialog *cfd; + + while ((cfd = e_config_dialog_get("E", "_config_remember_dialog"))) + e_object_del(E_OBJECT(cfd)); + e_configure_registry_item_del("windows/window_remembers"); + e_configure_registry_category_del("windows"); + conf_module = NULL; + return 1; +} + +EAPI int +e_modapi_save(E_Module *m) +{ + return 1; +} diff --git a/src/modules/conf_window_remembers/e_mod_main.h b/src/modules/conf_window_remembers/e_mod_main.h new file mode 100644 index 000000000..986fbaa46 --- /dev/null +++ b/src/modules/conf_window_remembers/e_mod_main.h @@ -0,0 +1,15 @@ +#ifndef E_MOD_MAIN_H +#define E_MOD_MAIN_H + +#define E_TYPEDEFS 1 +#include "e_int_config_remembers.h" +#undef E_TYPEDEFS +#include "e_int_config_remembers.h" + +EAPI extern E_Module_Api e_modapi; + +EAPI void *e_modapi_init(E_Module *m); +EAPI int e_modapi_shutdown(E_Module *m); +EAPI int e_modapi_save(E_Module *m); + +#endif diff --git a/src/modules/conf_window_remembers/module.desktop.in b/src/modules/conf_window_remembers/module.desktop.in new file mode 100644 index 000000000..c3e7692ab --- /dev/null +++ b/src/modules/conf_window_remembers/module.desktop.in @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=Link +Name=Configuration - Window Remembers +Icon=e-module-conf_window_remembers +Comment=E17 Configuration Applet

Delete existing window remembers. +X-Enlightenment-ModuleType=config