From a744f48420f44002d4c4565a75bc27986693fd47 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Tue, 16 Feb 2016 00:15:52 +0000 Subject: [PATCH] [tabs] add a close all feature For the times when you just have too many tabs open! --- src/bin/edi_main.c | 8 ++++++++ src/bin/mainview/edi_mainview.c | 36 +++++++++++++++++++++++++-------- src/bin/mainview/edi_mainview.h | 7 +++++++ 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index d95f0ab..9358574 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -704,6 +704,13 @@ _edi_menu_close_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, edi_mainview_close(); } +static void +_edi_menu_closeall_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + edi_mainview_closeall(); +} + static void _edi_menu_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -815,6 +822,7 @@ _edi_menu_setup(Evas_Object *win) elm_menu_item_add(menu, menu_it, "document-save", "Save", _edi_menu_save_cb, NULL); elm_menu_item_add(menu, menu_it, "window-new", "New window", _edi_menu_open_window_cb, NULL); elm_menu_item_add(menu, menu_it, "stock_close", "Close", _edi_menu_close_cb, NULL); + elm_menu_item_add(menu, menu_it, "stock_close", "Close all", _edi_menu_closeall_cb, NULL); elm_menu_item_separator_add(menu, menu_it); elm_menu_item_add(menu, menu_it, "preferences-desktop", "Settings", _edi_menu_settings_cb, NULL); elm_menu_item_separator_add(menu, menu_it); diff --git a/src/bin/mainview/edi_mainview.c b/src/bin/mainview/edi_mainview.c index ccd9f07..923e8e0 100644 --- a/src/bin/mainview/edi_mainview.c +++ b/src/bin/mainview/edi_mainview.c @@ -479,22 +479,42 @@ edi_mainview_new_window() edi_mainview_open_window_path(item->path); } +static void +_edi_mainview_close_item(Edi_Mainview_Item *item) +{ + if (!item) + return; + + elm_naviframe_item_promote(item->view); + elm_naviframe_item_pop(nf); + elm_object_item_del(item->tab); + _edi_mainview_items = eina_list_remove(_edi_mainview_items, item); + + _edi_project_config_tab_remove(item->path); + eina_stringshare_del(item->path); + free(item); +} + void edi_mainview_close() { Edi_Mainview_Item *item; item = edi_mainview_item_current_get(); - if (!item) - return; - elm_naviframe_item_pop(nf); - elm_object_item_del(elm_toolbar_selected_item_get(tb)); - _edi_mainview_items = eina_list_remove(_edi_mainview_items, item); + _edi_mainview_close_item(item); +} - _edi_project_config_tab_remove(item->path); - eina_stringshare_del(item->path); - free(item); +void +edi_mainview_closeall() +{ + Eina_List *list, *next; + Edi_Mainview_Item *item; + + EINA_LIST_FOREACH_SAFE(_edi_mainview_items, list, next, item) + { + _edi_mainview_close_item(item); + } } void diff --git a/src/bin/mainview/edi_mainview.h b/src/bin/mainview/edi_mainview.h index b8c26a1..cd815b1 100644 --- a/src/bin/mainview/edi_mainview.h +++ b/src/bin/mainview/edi_mainview.h @@ -110,6 +110,13 @@ void edi_mainview_new_window(); */ void edi_mainview_close(); +/** + * Close all open files. + * + * @ingroup Content + */ +void edi_mainview_closeall(); + /** * Cut the current selection into the clipboard. *