Use proper config dialog window class, so that when the module gets

unloaded, any existing dialogs are killed. This stops a crash that was
happening if the module was unloaded while the dialog was shown.



SVN revision: 44153
This commit is contained in:
Christopher Michael 2009-12-03 03:41:24 +00:00
parent 61c451f011
commit 4042dda53a
2 changed files with 66 additions and 68 deletions

View File

@ -40,7 +40,8 @@ struct _E_Config_Dialog_Data
E_Dialog *dia_web; E_Dialog *dia_web;
}; };
static const char *parts_list[] = { static const char *parts_list[] =
{
"about:e/widgets/about/main", "about:e/widgets/about/main",
"borders:e/widgets/border/default/border", "borders:e/widgets/border/default/border",
"background:e/desktop/background", "background:e/desktop/background",
@ -76,7 +77,7 @@ e_int_config_theme(E_Container *con, const char *params __UNUSED__)
E_Config_Dialog *cfd; E_Config_Dialog *cfd;
E_Config_Dialog_View *v; E_Config_Dialog_View *v;
if (e_config_dialog_find("E", "appearance/theme")) return NULL; if (e_config_dialog_find("E", "_config_theme_dialog")) return NULL;
v = E_NEW(E_Config_Dialog_View, 1); v = E_NEW(E_Config_Dialog_View, 1);
v->create_cfdata = _create_data; v->create_cfdata = _create_data;
@ -88,7 +89,7 @@ e_int_config_theme(E_Container *con, const char *params __UNUSED__)
v->override_auto_apply = 1; v->override_auto_apply = 1;
cfd = e_config_dialog_new(con, cfd = e_config_dialog_new(con,
_("Theme Selector"), _("Theme Selector"),
"E", "appearance/theme", "E", "_config_theme_dialog",
"preferences-desktop-theme", 0, v, NULL); "preferences-desktop-theme", 0, v, NULL);
return cfd; return cfd;
} }
@ -130,7 +131,8 @@ e_int_config_theme_update(E_Config_Dialog *dia, char *file)
e_widget_flist_path_set(cfdata->o_fm, path, "/"); e_widget_flist_path_set(cfdata->o_fm, path, "/");
if (cfdata->o_preview) if (cfdata->o_preview)
e_widget_preview_edje_set(cfdata->o_preview, cfdata->theme, "e/desktop/background"); e_widget_preview_edje_set(cfdata->o_preview, cfdata->theme,
"e/desktop/background");
if (cfdata->o_fm) e_widget_change(cfdata->o_fm); if (cfdata->o_fm) e_widget_change(cfdata->o_fm);
} }

View File

@ -4,27 +4,13 @@
#include "e.h" #include "e.h"
#include "e_mod_main.h" #include "e_mod_main.h"
/***************************************************************************/
/**/
/* actual module specifics */ /* actual module specifics */
static void _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_mod_menu_add(void *data, E_Menu *m); static void _e_mod_menu_add(void *data, E_Menu *m);
static E_Module *conf_module = NULL; static E_Module *conf_module = NULL;
static E_Int_Menu_Augmentation *maug = NULL; static E_Int_Menu_Augmentation *maug = NULL;
/**/
/***************************************************************************/
/***************************************************************************/
/**/
/**/
/***************************************************************************/
/***************************************************************************/
/**/
/* module setup */ /* module setup */
EAPI E_Module_Api e_modapi = EAPI E_Module_Api e_modapi =
{ {
@ -35,9 +21,15 @@ EAPI E_Module_Api e_modapi =
EAPI void * EAPI void *
e_modapi_init(E_Module *m) e_modapi_init(E_Module *m)
{ {
e_configure_registry_category_add("appearance", 10, _("Look"), NULL, "preferences-appearance"); e_configure_registry_category_add("appearance", 10, _("Look"), NULL,
e_configure_registry_item_add("appearance/theme", 20, _("Theme"), NULL, "preferences-desktop-theme", e_int_config_theme); "preferences-appearance");
maug = e_int_menus_menu_augmentation_add_sorted("config/1", _("Theme"), _e_mod_menu_add, NULL, NULL, NULL); e_configure_registry_item_add("appearance/theme", 20, _("Theme"), NULL,
"preferences-desktop-theme",
e_int_config_theme);
maug =
e_int_menus_menu_augmentation_add_sorted("config/1", _("Theme"),
_e_mod_menu_add, NULL, NULL, NULL);
conf_module = m; conf_module = m;
e_module_delayed_set(m, 1); e_module_delayed_set(m, 1);
@ -48,13 +40,17 @@ EAPI int
e_modapi_shutdown(E_Module *m) e_modapi_shutdown(E_Module *m)
{ {
E_Config_Dialog *cfd; E_Config_Dialog *cfd;
/* remove module-supplied menu additions */ /* remove module-supplied menu additions */
if (maug) if (maug)
{ {
e_int_menus_menu_augmentation_del("config/1", maug); e_int_menus_menu_augmentation_del("config/1", maug);
maug = NULL; maug = NULL;
} }
while ((cfd = e_config_dialog_get("E", "_config_theme_dialog"))) e_object_del(E_OBJECT(cfd));
while ((cfd = e_config_dialog_get("E", "_config_theme_dialog")))
e_object_del(E_OBJECT(cfd));
e_configure_registry_item_del("appearance/theme"); e_configure_registry_item_del("appearance/theme");
e_configure_registry_category_del("appearance"); e_configure_registry_category_del("appearance");
conf_module = NULL; conf_module = NULL;