diff --git a/src/modules/illume2/Makefile.am b/src/modules/illume2/Makefile.am index ac6b15cc4..f47e204b8 100644 --- a/src/modules/illume2/Makefile.am +++ b/src/modules/illume2/Makefile.am @@ -34,7 +34,9 @@ module_la_SOURCES = e_mod_main.h \ e_mod_windows.h \ e_mod_windows.c \ e_mod_select_window.h \ - e_mod_select_window.c + e_mod_select_window.c \ + e_mod_policy.h \ + e_mod_policy.c module_la_LIBADD = @e_libs@ @dlopen_libs@ module_la_LDFLAGS = -module -avoid-version diff --git a/src/modules/illume2/e_mod_animation.h b/src/modules/illume2/e_mod_animation.h index 71abf2177..cf8a36ee0 100644 --- a/src/modules/illume2/e_mod_animation.h +++ b/src/modules/illume2/e_mod_animation.h @@ -1,6 +1,6 @@ #ifndef E_MOD_ANIM_H #define E_MOD_ANIM_H -EAPI void il_config_animation_show(E_Container *con, const char *params); +void il_config_animation_show(E_Container *con, const char *params); #endif diff --git a/src/modules/illume2/e_mod_config.c b/src/modules/illume2/e_mod_config.c index 5e11b92b1..ebe2eb718 100644 --- a/src/modules/illume2/e_mod_config.c +++ b/src/modules/illume2/e_mod_config.c @@ -3,6 +3,7 @@ #include "e_mod_config.h" #include "e_mod_animation.h" #include "e_mod_windows.h" +#include "e_mod_policy.h" /* local variables */ EAPI Il_Config *il_cfg = NULL; @@ -73,7 +74,7 @@ il_config_init(E_Module *m) /* Add new config variables here */ if ((il_cfg->version & 0xffff) < 1) { - il_cfg->policy.name = NULL; + il_cfg->policy.name = eina_stringshare_add("Illume"); il_cfg->policy.vkbd.class = eina_stringshare_add("Virtual-Keyboard"); il_cfg->policy.vkbd.name = @@ -131,12 +132,16 @@ il_config_init(E_Module *m) e_configure_registry_generic_item_add("illume/windows", 0, _("Windows"), NULL, "enlightenment/windows", il_config_windows_show); + e_configure_registry_generic_item_add("illume/policy", 0, _("Policy"), + NULL, "enlightenment/policy", + il_config_policy_show); return 1; } EAPI int il_config_shutdown(void) { + e_configure_registry_item_del("illume/policy"); e_configure_registry_item_del("illume/windows"); e_configure_registry_item_del("illume/animation"); e_configure_registry_category_del("illume"); diff --git a/src/modules/illume2/e_mod_layout.c b/src/modules/illume2/e_mod_layout.c index d7bcee427..0b56a1814 100644 --- a/src/modules/illume2/e_mod_layout.c +++ b/src/modules/illume2/e_mod_layout.c @@ -101,6 +101,12 @@ illume_layout_mode_unregister(const Illume_Layout_Mode *laymode) modes = eina_list_remove(modes, laymode); } +Eina_List * +illume_layout_modes_get(void) +{ + return modes; +} + ////////////////////////////////////////////////////////////////////////////// // :: Convenience routines to make it easy to write layout logic code :: diff --git a/src/modules/illume2/e_mod_layout.h b/src/modules/illume2/e_mod_layout.h index 0f15d2bd9..f62f560d0 100644 --- a/src/modules/illume2/e_mod_layout.h +++ b/src/modules/illume2/e_mod_layout.h @@ -34,6 +34,7 @@ struct _Illume_Layout_Mode void illume_layout_mode_register(const Illume_Layout_Mode *laymode); void illume_layout_mode_unregister(const Illume_Layout_Mode *laymode); +Eina_List *illume_layout_modes_get(void); void illume_border_activate(E_Border *bd); void illume_border_show(E_Border *bd); diff --git a/src/modules/illume2/e_mod_policy.c b/src/modules/illume2/e_mod_policy.c new file mode 100644 index 000000000..15af96d38 --- /dev/null +++ b/src/modules/illume2/e_mod_policy.c @@ -0,0 +1,104 @@ +#include "e.h" +#include "e_mod_layout.h" +#include "e_mod_policy.h" +#include "e_mod_config.h" + +/* local function prototypes */ +static void *_il_config_policy_create(E_Config_Dialog *cfd); +static void _il_config_policy_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static Evas_Object *_il_config_policy_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); +static void _il_config_policy_list_changed(void *data); +static int _il_config_policy_change_timeout(void *data); + +/* local variables */ +Ecore_Timer *_policy_change_timer = NULL; +const char *policy_name = NULL; + +void +il_config_policy_show(E_Container *con, const char *params) +{ + E_Config_Dialog *cfd; + E_Config_Dialog_View *v; + + if (e_config_dialog_find("E", "_config_illume_policy_settings")) return; + v = E_NEW(E_Config_Dialog_View, 1); + v->create_cfdata = _il_config_policy_create; + v->free_cfdata = _il_config_policy_free; + v->basic.create_widgets = _il_config_policy_ui; + v->basic_only = 1; + v->normal_win = 1; + v->scroll = 1; + cfd = e_config_dialog_new(con, _("Policy"), "E", + "_config_illume_policy_settings", + "enlightenment/policy", 0, v, NULL); + e_dialog_resizable_set(cfd->dia, 1); +} + +/* local functions */ +static void * +_il_config_policy_create(E_Config_Dialog *cfd) +{ + return NULL; +} + +static void +_il_config_policy_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +{ + if (_policy_change_timer) ecore_timer_del(_policy_change_timer); +} + +static Evas_Object * +_il_config_policy_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +{ + Evas_Object *list, *ow; + Eina_List *modes, *l; + int i = 0, sel = 0; + + list = e_widget_list_add(evas, 0, 0); + ow = e_widget_ilist_add(evas, 24, 24, &(policy_name)); + e_widget_ilist_selector_set(ow, 1); + evas_event_freeze(evas); + edje_freeze(); + e_widget_ilist_freeze(ow); + e_widget_ilist_clear(ow); + e_widget_ilist_go(ow); + + modes = illume_layout_modes_get(); + for (i = 0, l = modes; l; l = l->next, i++) + { + Illume_Layout_Mode *mode; + + if (!(mode = l->data)) continue; + if ((mode->name) && (il_cfg->policy.name) && + (!strcmp(il_cfg->policy.name, mode->name))) + sel = i; + e_widget_ilist_append(ow, NULL, mode->label, + _il_config_policy_list_changed, NULL, mode->name); + } + e_widget_size_min_set(ow, 100, 200); + e_widget_ilist_go(ow); + e_widget_ilist_selected_set(ow, sel); + e_widget_ilist_thaw(ow); + edje_thaw(); + evas_event_thaw(evas); + e_widget_list_object_append(list, ow, 1, 0, 0.0); + return list; +} + +static void +_il_config_policy_list_changed(void *data) +{ + if (il_cfg->policy.name) eina_stringshare_del(il_cfg->policy.name); + if (policy_name) il_cfg->policy.name = eina_stringshare_add(policy_name); + if (_policy_change_timer) ecore_timer_del(_policy_change_timer); + _policy_change_timer = + ecore_timer_add(0.5, _il_config_policy_change_timeout, data); +} + +static int +_il_config_policy_change_timeout(void *data) +{ + e_config_save_queue(); + _policy_change_timer = NULL; + return 0; +} diff --git a/src/modules/illume2/e_mod_policy.h b/src/modules/illume2/e_mod_policy.h new file mode 100644 index 000000000..606f3da40 --- /dev/null +++ b/src/modules/illume2/e_mod_policy.h @@ -0,0 +1,6 @@ +#ifndef E_MOD_POLICY_H +#define E_MOD_POLICY_H + +void il_config_policy_show(E_Container *con, const char *params); + +#endif