Open Terminal Here menu item is now a directory mime action located in the Actions menu

SVN revision: 76666
This commit is contained in:
Mike Blumenkrantz 2012-09-14 12:46:23 +00:00
parent 751ef7b127
commit 023248ca67
2 changed files with 38 additions and 59 deletions

View File

@ -99,6 +99,8 @@ typedef enum
} E_Fwin_Exec_Type;
/* local subsystem prototypes */
static int _e_fwin_cb_dir_handler_test(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *path);
static void _e_fwin_cb_dir_handler(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *path);
static void _e_fwin_page_favorites_add(E_Fwin_Page *page);
static void _e_fwin_icon_mouse_out(void *data, Evas_Object *obj __UNUSED__, void *event_info);
static void _e_fwin_icon_mouse_in(void *data, Evas_Object *obj __UNUSED__, void *event_info);
@ -137,10 +139,6 @@ static void _e_fwin_selected(void *data,
static void _e_fwin_selection_change(void *data,
Evas_Object *obj,
void *event_info);
static void _e_fwin_cb_menu_extend_end(void *data,
Evas_Object *obj,
E_Menu *m,
E_Fm2_Icon_Info *info);
static void _e_fwin_cb_menu_extend_open_with(void *data,
E_Menu *m);
static void _e_fwin_cb_menu_open_fast(void *data,
@ -149,9 +147,6 @@ 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,
@ -244,11 +239,20 @@ static E_Fwin *drag_fwin = NULL;
/* local subsystem globals */
static Eina_List *fwins = NULL;
static E_Fm2_Mime_Handler *dir_handler = NULL;
static Efreet_Desktop *tdesktop = NULL;
/* externally accessible functions */
int
e_fwin_init(void)
{
tdesktop = e_util_terminal_desktop_get();
if (!tdesktop) return 1;
dir_handler = e_fm2_mime_handler_new(_("Open Terminal Here"),
tdesktop->icon,
_e_fwin_cb_dir_handler, NULL,
_e_fwin_cb_dir_handler_test, NULL);
e_fm2_mime_handler_mime_add(dir_handler, "inode/directory");
return 1;
}
@ -260,6 +264,16 @@ e_fwin_shutdown(void)
EINA_LIST_FREE(fwins, fwin)
e_object_del(E_OBJECT(fwin));
if (dir_handler)
{
e_fm2_mime_handler_mime_del(dir_handler, "inode/directory");
e_fm2_mime_handler_free(dir_handler);
}
efreet_desktop_free(tdesktop);
tdesktop = NULL;
dir_handler = NULL;
return 1;
}
@ -431,7 +445,6 @@ e_fwin_zone_new(E_Zone *zone, void *p)
evas_object_smart_callback_add(o, "icon_mouse_in", (Evas_Smart_Cb)_e_fwin_icon_mouse_in, fwin);
evas_object_smart_callback_add(o, "icon_mouse_out", (Evas_Smart_Cb)_e_fwin_icon_mouse_out, fwin);
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, page);
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_cb_menu_extend_end, page);
e_fm2_underlay_hide(o);
evas_object_show(o);
@ -930,7 +943,6 @@ _e_fwin_page_create(E_Fwin *fwin)
evas_object_smart_callback_add(o, "icon_mouse_in", (Evas_Smart_Cb)_e_fwin_icon_mouse_in, fwin);
evas_object_smart_callback_add(o, "icon_mouse_out", (Evas_Smart_Cb)_e_fwin_icon_mouse_out, fwin);
e_fm2_icon_menu_start_extend_callback_set(o, _e_fwin_cb_menu_extend_start, page);
e_fm2_icon_menu_end_extend_callback_set(o, _e_fwin_cb_menu_extend_end, page);
e_fm2_window_object_set(o, E_OBJECT(fwin->win));
evas_object_focus_set(o, 1);
_e_fwin_config_set(page);
@ -1938,32 +1950,22 @@ _e_fwin_zone_del(void *data,
return ECORE_CALLBACK_PASS_ON;
}
/* fm menu extend */
static void
_e_fwin_cb_menu_extend_end(void *data,
Evas_Object *obj __UNUSED__,
E_Menu *m,
E_Fm2_Icon_Info *info __UNUSED__)
static int
_e_fwin_cb_dir_handler_test(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *path)
{
E_Menu_Item *mi;
Efreet_Desktop *tdesktop;
E_Fwin_Page *page = data;
return ecore_file_is_dir(path);
}
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
tdesktop = e_util_terminal_desktop_get();
if (!tdesktop) return;
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);
static void
_e_fwin_cb_dir_handler(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *path)
{
char buf[PATH_MAX];
if (!getcwd(buf, sizeof(buf))) return;
chdir(path);
e_exec(e_util_zone_current_get(e_manager_current_get()), tdesktop, NULL, NULL, "fileman");
chdir(buf);
/* FIXME: if info != null then check mime type and offer options based
* on that
*/
@ -1977,30 +1979,6 @@ _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;
char buf[PATH_MAX];
const char *path;
if (!fwin->cur_page) return;
if (!getcwd(buf, sizeof(buf))) return;
tdesktop = e_util_terminal_desktop_get();
if (!tdesktop) return;
path = e_fm2_real_path_get(fwin->cur_page->fm_obj);
if (path)
{
chdir(path);
e_exec(e_util_zone_current_get(e_manager_current_get()), tdesktop, NULL, NULL, "fileman");
chdir(buf);
}
efreet_desktop_free(tdesktop);
}
static void
_e_fwin_cb_menu_open_fast(void *data,
E_Menu *m __UNUSED__,

View File

@ -38,8 +38,6 @@ e_modapi_init(E_Module *m)
conf_module = m;
//eina_init();
/* Setup Entry in Config Panel */
e_configure_registry_category_add("fileman", 100, _("Files"),
NULL, "system-file-manager");
@ -63,6 +61,8 @@ e_modapi_init(E_Module *m)
maug = e_int_menus_menu_augmentation_add_sorted("main/1", _("Navigate"), _e_mod_menu_add, NULL, NULL, NULL);
e_module_delayed_set(m, 1);
e_fwin_init();
/* Hook into zones */
for (l = e_manager_list(); l; l = l->next)
{
@ -129,6 +129,7 @@ e_modapi_shutdown(E_Module *m __UNUSED__)
e_int_menus_menu_augmentation_del("main/1", maug);
maug = NULL;
}
e_fwin_shutdown();
/* remove module-supplied action */
if (act)
{