abstract the "get terminal desktop" code into util code and now use
from e_exec AND in efm - open terminal here menu item is there with code to set your default terminal in default applications too. SVN revision: 75290
This commit is contained in:
parent
bd1e81be80
commit
6efc2eb976
|
@ -264,38 +264,9 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining)
|
|||
e_util_library_path_strip();
|
||||
if ((desktop) && (desktop->terminal))
|
||||
{
|
||||
Efreet_Desktop *tdesktop, *td;
|
||||
int i;
|
||||
// XXX: FIXME: this should become config some day...
|
||||
const char *terms[] =
|
||||
{
|
||||
"terminology.desktop",
|
||||
"xterm.desktop",
|
||||
"rxvt.desktop",
|
||||
"gnome-terimnal.desktop",
|
||||
"konsole.desktop",
|
||||
NULL
|
||||
};
|
||||
Efreet_Desktop *tdesktop;
|
||||
|
||||
for (i = 0; terms[i]; i++)
|
||||
{
|
||||
tdesktop = efreet_util_desktop_file_id_find(terms[i]);
|
||||
if (tdesktop) break;
|
||||
}
|
||||
if (!tdesktop)
|
||||
{
|
||||
l = efreet_util_desktop_category_list("TerminalEmulator");
|
||||
if (l)
|
||||
{
|
||||
// just take first one since above list doesn't work.
|
||||
tdesktop = l->data;
|
||||
EINA_LIST_FREE(l, td)
|
||||
{
|
||||
// free/unref the desktosp we are not going to use
|
||||
if (td != tdesktop) efreet_desktop_free(td);
|
||||
}
|
||||
}
|
||||
}
|
||||
tdesktop = e_util_terminal_desktop_get();
|
||||
if (tdesktop)
|
||||
{
|
||||
if (tdesktop->exec)
|
||||
|
|
|
@ -1451,3 +1451,73 @@ e_util_size_debug_set(Evas_Object *obj, Eina_Bool enable)
|
|||
_e_util_size_debug, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static Efreet_Desktop *
|
||||
_e_util_default_terminal_get(const char *defaults_list)
|
||||
{
|
||||
Efreet_Desktop *tdesktop = NULL;
|
||||
Efreet_Ini *ini;
|
||||
const char *s;
|
||||
|
||||
ini = efreet_ini_new(defaults_list);
|
||||
if ((ini) && (ini->data) &&
|
||||
(efreet_ini_section_set(ini, "Default Applications")) &&
|
||||
(ini->section))
|
||||
{
|
||||
s = efreet_ini_string_get(ini, "x-scheme-handler/terminal");
|
||||
if (s) tdesktop = efreet_util_desktop_file_id_find(s);
|
||||
}
|
||||
if (ini) efreet_ini_free(ini);
|
||||
return tdesktop;
|
||||
}
|
||||
|
||||
EAPI Efreet_Desktop *
|
||||
e_util_terminal_desktop_get(void)
|
||||
{
|
||||
const char *terms[] =
|
||||
{
|
||||
"terminology.desktop",
|
||||
"xterm.desktop",
|
||||
"rxvt.desktop",
|
||||
"gnome-terimnal.desktop",
|
||||
"konsole.desktop",
|
||||
NULL
|
||||
};
|
||||
const char *s;
|
||||
char buf[PATH_MAX];
|
||||
Efreet_Desktop *tdesktop = NULL, *td;
|
||||
Eina_List *l;
|
||||
int i;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list",
|
||||
efreet_data_home_get());
|
||||
tdesktop = _e_util_default_terminal_get(buf);
|
||||
if (tdesktop) return tdesktop;
|
||||
EINA_LIST_FOREACH(efreet_data_dirs_get(), l, s)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list", s);
|
||||
tdesktop = _e_util_default_terminal_get(buf);
|
||||
if (tdesktop) return tdesktop;
|
||||
}
|
||||
|
||||
for (i = 0; terms[i]; i++)
|
||||
{
|
||||
tdesktop = efreet_util_desktop_file_id_find(terms[i]);
|
||||
if (tdesktop) return tdesktop;
|
||||
}
|
||||
if (!tdesktop)
|
||||
{
|
||||
l = efreet_util_desktop_category_list("TerminalEmulator");
|
||||
if (l)
|
||||
{
|
||||
// just take first one since above list doesn't work.
|
||||
tdesktop = l->data;
|
||||
EINA_LIST_FREE(l, td)
|
||||
{
|
||||
// free/unref the desktosp we are not going to use
|
||||
if (td != tdesktop) efreet_desktop_free(td);
|
||||
}
|
||||
}
|
||||
}
|
||||
return tdesktop;
|
||||
}
|
||||
|
|
|
@ -65,5 +65,7 @@ EAPI Eina_Bool e_util_fullscreen_curreny_any(void);
|
|||
EAPI Eina_Bool e_util_fullscreen_any(void);
|
||||
EAPI const char *e_util_time_str_get(long int seconds);
|
||||
EAPI void e_util_size_debug_set(Evas_Object *obj, Eina_Bool enable);
|
||||
EAPI Efreet_Desktop *e_util_terminal_desktop_get(void);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -35,6 +35,7 @@ struct _E_Config_Dialog_Data
|
|||
const char *mailto_desktop;
|
||||
const char *file_desktop;
|
||||
const char *trash_desktop;
|
||||
const char *terminal_desktop;
|
||||
|
||||
Ecore_Event_Handler *desk_change_handler;
|
||||
int gen;
|
||||
|
@ -134,6 +135,8 @@ _create_data(E_Config_Dialog *cfd __UNUSED__)
|
|||
if (s) cfdata->file_desktop = eina_stringshare_add(s);
|
||||
s = efreet_ini_string_get(myini, "x-scheme-handler/trash");
|
||||
if (s) cfdata->trash_desktop = eina_stringshare_add(s);
|
||||
s = efreet_ini_string_get(myini, "x-scheme-handler/terminal");
|
||||
if (s) cfdata->terminal_desktop = eina_stringshare_add(s);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(e_config->env_vars, l, evr)
|
||||
|
@ -182,6 +185,7 @@ _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
|
|||
if (cfdata->mailto_desktop) eina_stringshare_del(cfdata->mailto_desktop);
|
||||
if (cfdata->file_desktop) eina_stringshare_del(cfdata->file_desktop);
|
||||
if (cfdata->trash_desktop) eina_stringshare_del(cfdata->trash_desktop);
|
||||
if (cfdata->terminal_desktop) eina_stringshare_del(cfdata->terminal_desktop);
|
||||
EINA_LIST_FREE(cfdata->mimes, m)
|
||||
{
|
||||
Config_Glob *g;
|
||||
|
@ -254,6 +258,15 @@ _def_trash_cb(void *data)
|
|||
cfdata->gen = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_def_terminal_cb(void *data)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata = data;
|
||||
cfdata->seldest = &(cfdata->terminal_desktop);
|
||||
_fill_apps_list(cfdata, cfdata->obj.deflist, cfdata->seldest, 0);
|
||||
cfdata->gen = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_sel_mime_cb(void *data)
|
||||
{
|
||||
|
@ -297,6 +310,7 @@ _basic_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_ilist_append(il, NULL, _("E-Mail"), _def_mailto_cb, cfdata, NULL);
|
||||
e_widget_ilist_append(il, NULL, _("File"), _def_file_cb, cfdata, NULL);
|
||||
e_widget_ilist_append(il, NULL, _("Trash"), _def_trash_cb, cfdata, NULL);
|
||||
e_widget_ilist_append(il, NULL, _("Terminal"), _def_terminal_cb, cfdata, NULL);
|
||||
e_widget_ilist_go(il);
|
||||
e_widget_ilist_thaw(il);
|
||||
edje_thaw();
|
||||
|
@ -376,6 +390,9 @@ _basic_apply(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
|
|||
if ((cfdata->trash_desktop) && (cfdata->trash_desktop[0]))
|
||||
efreet_ini_string_set(cfdata->ini, "x-scheme-handler/trash",
|
||||
cfdata->trash_desktop);
|
||||
if ((cfdata->terminal_desktop) && (cfdata->terminal_desktop[0]))
|
||||
efreet_ini_string_set(cfdata->ini, "x-scheme-handler/terminal",
|
||||
cfdata->terminal_desktop);
|
||||
snprintf(buf, sizeof(buf), "%s/applications/defaults.list",
|
||||
efreet_data_home_get());
|
||||
efreet_ini_save(cfdata->ini, buf);
|
||||
|
|
|
@ -141,6 +141,9 @@ static void _e_fwin_cb_menu_open_fast(void *data,
|
|||
static void _e_fwin_parent(void *data,
|
||||
E_Menu *m,
|
||||
E_Menu_Item *mi);
|
||||
static void _e_fwin_terminal(void *data,
|
||||
E_Menu *m,
|
||||
E_Menu_Item *mi);
|
||||
static void _e_fwin_cb_key_down(void *data,
|
||||
Evas *e,
|
||||
Evas_Object *obj,
|
||||
|
@ -1806,7 +1809,7 @@ _e_fwin_zone_del(void *data,
|
|||
|
||||
/* fm menu extend */
|
||||
static void
|
||||
_e_fwin_menu_extend(void *data __UNUSED__,
|
||||
_e_fwin_menu_extend(void *data,
|
||||
Evas_Object *obj,
|
||||
E_Menu *m,
|
||||
E_Fm2_Icon_Info *info __UNUSED__)
|
||||
|
@ -1815,6 +1818,8 @@ _e_fwin_menu_extend(void *data __UNUSED__,
|
|||
|
||||
if (e_fm2_has_parent_get(obj))
|
||||
{
|
||||
Efreet_Desktop *tdesktop;
|
||||
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
|
@ -1825,6 +1830,24 @@ _e_fwin_menu_extend(void *data __UNUSED__,
|
|||
"e/fileman/default/button/parent"),
|
||||
"e/fileman/default/button/parent");
|
||||
e_menu_item_callback_set(mi, _e_fwin_parent, obj);
|
||||
|
||||
tdesktop = e_util_terminal_desktop_get();
|
||||
if (tdesktop)
|
||||
{
|
||||
E_Fwin_Page *page = data;
|
||||
|
||||
mi = e_menu_item_new(m);
|
||||
e_menu_item_label_set(mi, _("Open Terminal Here"));
|
||||
e_menu_item_callback_set(mi, _e_fwin_terminal, page->fwin);
|
||||
if (tdesktop->icon)
|
||||
{
|
||||
if (tdesktop->icon[0] == '/')
|
||||
e_menu_item_icon_file_set(mi, tdesktop->icon);
|
||||
else
|
||||
e_util_menu_item_theme_icon_set(mi, tdesktop->icon);
|
||||
}
|
||||
efreet_desktop_free(tdesktop);
|
||||
}
|
||||
}
|
||||
/* FIXME: if info != null then check mime type and offer options based
|
||||
* on that
|
||||
|
@ -1839,6 +1862,36 @@ _e_fwin_parent(void *data,
|
|||
e_fm2_parent_go(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_terminal(void *data,
|
||||
E_Menu *m __UNUSED__,
|
||||
E_Menu_Item *mi __UNUSED__)
|
||||
{
|
||||
E_Fwin *fwin = data;
|
||||
Efreet_Desktop *tdesktop;
|
||||
|
||||
if (!fwin->cur_page) return;
|
||||
tdesktop = e_util_terminal_desktop_get();
|
||||
if (tdesktop)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (getcwd(buf, sizeof(buf)) > 0)
|
||||
{
|
||||
const char *path;
|
||||
|
||||
path = e_fm2_real_path_get(fwin->cur_page->fm_obj);
|
||||
if (path)
|
||||
{
|
||||
chdir(path);
|
||||
e_exec(fwin->zone, tdesktop, NULL, NULL, "fileman");
|
||||
chdir(buf);
|
||||
}
|
||||
}
|
||||
efreet_desktop_free(tdesktop);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fwin_cb_menu_open_fast(void *data,
|
||||
E_Menu *m __UNUSED__,
|
||||
|
|
Loading…
Reference in New Issue