From a4ef12329eaa0b8fd37a3d8cbe5e67a3d58bf8c7 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 7 Feb 2013 08:20:42 +0000 Subject: [PATCH] add config option for remembering filemanager windows globally instead of per-directory ticket #1982 SVN revision: 83718 --- ChangeLog | 4 ++ NEWS | 1 + src/bin/e_config.c | 2 + src/bin/e_config.h | 1 + src/bin/e_configure_option.c | 4 +- .../e_int_config_remembers.c | 14 +++++-- src/modules/fileman/e_fwin.c | 42 ++++++++++--------- 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index f355968e4..6331c56cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-02-07 Mike Blumenkrantz + + * added option for remembering filemanager windows globally + 2013-02-07 Carsten Haitzler * fix clock timerfd usage to actually detect a date change. diff --git a/NEWS b/NEWS index 9e8d82ca7..13e30838e 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,7 @@ Additions: * edge bindings can now be set to "drag only" * new option for disabling all pointer warps * added option for preventing all keyboard layout changes + * added option for remembering filemanager windows globally Changes: Modules: diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 6cc2316e9..d8c5f2ccf 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -623,6 +623,7 @@ _e_config_edd_init(Eina_Bool old) E_CONFIG_LIST(D, T, remembers, _e_config_remember_edd); E_CONFIG_VAL(D, T, remember_internal_windows, INT); E_CONFIG_VAL(D, T, remember_internal_fm_windows, UCHAR); + E_CONFIG_VAL(D, T, remember_internal_fm_windows_globally, UCHAR); E_CONFIG_VAL(D, T, move_info_follows, INT); /**/ E_CONFIG_VAL(D, T, resize_info_follows, INT); /**/ E_CONFIG_VAL(D, T, move_info_visible, INT); /**/ @@ -1413,6 +1414,7 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->icon_theme_overrides, 0, 1); E_CONFIG_LIMIT(e_config->remember_internal_windows, 0, 3); E_CONFIG_LIMIT(e_config->remember_internal_fm_windows, 0, 1); + E_CONFIG_LIMIT(e_config->remember_internal_fm_windows_globally, 0, 1); E_CONFIG_LIMIT(e_config->desk_auto_switch, 0, 1); E_CONFIG_LIMIT(e_config->screen_limits, 0, 2); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 5c45194da..73ec92bff 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -162,6 +162,7 @@ struct _E_Config Eina_List *remembers; // GUI int remember_internal_windows; // GUI Eina_Bool remember_internal_fm_windows; // GUI + Eina_Bool remember_internal_fm_windows_globally; // GUI int move_info_follows; // GUI int resize_info_follows; // GUI int move_info_visible; // GUI diff --git a/src/bin/e_configure_option.c b/src/bin/e_configure_option.c index d1d1c7531..880079d8f 100644 --- a/src/bin/e_configure_option.c +++ b/src/bin/e_configure_option.c @@ -1661,7 +1661,9 @@ e_configure_option_init(void) OPT_ADD(BOOL, remember_internal_windows, _("Remember internal window geometry"), _("border"), _("remember")); OPT_HELP(_("This option causes E to remember the geometry of its internal dialogs and windows, NOT including filemanager windows")); OPT_ADD(BOOL, remember_internal_fm_windows, _("Remember internal filemanager window geometry"), _("border"), _("remember"), _("files")); - OPT_HELP(_("This option causes E to remember the geometry of its internal filemanager windows, NOT including dialog windows")); + OPT_HELP(_("This option causes E to remember the geometry of its internal filemanager windows, NOT including dialog windows, based on the directory the window is showing")); + OPT_ADD(BOOL, remember_internal_fm_windows_globally, _("Remember internal filemanager window geometry globally"), _("border"), _("remember"), _("files")); + OPT_HELP(_("This option causes E to remember the geometry of its internal filemanager windows globally instead of using the target directory")); OPT_ADD(BOOL, move_info_follows, _("Window position info follows window when moving"), _("border"), _("placement"), _("move")); OPT_ADD(BOOL, resize_info_follows, _("Window geometry info follows window when resizing"), _("border"), _("placement"), _("resize")); diff --git a/src/modules/conf_window_remembers/e_int_config_remembers.c b/src/modules/conf_window_remembers/e_int_config_remembers.c index f1d5828ae..11fbc0204 100644 --- a/src/modules/conf_window_remembers/e_int_config_remembers.c +++ b/src/modules/conf_window_remembers/e_int_config_remembers.c @@ -15,6 +15,7 @@ struct _E_Config_Dialog_Data Evas_Object *list, *btn, *name, *class, *title, *role; int remember_dialogs; int remember_fm_wins; + int remember_internal_fm_windows_globally; }; E_Config_Dialog * @@ -82,6 +83,7 @@ _create_data(E_Config_Dialog *cfd __UNUSED__) cfdata = E_NEW(E_Config_Dialog_Data, 1); cfdata->remember_dialogs = e_config->remember_internal_windows; cfdata->remember_fm_wins = e_config->remember_internal_fm_windows; + cfdata->remember_internal_fm_windows_globally = e_config->remember_internal_fm_windows_globally; return cfdata; } @@ -96,7 +98,8 @@ static int _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { return ((cfdata->remember_dialogs == e_config->remember_internal_windows) && - (cfdata->remember_fm_wins == e_config->remember_internal_fm_windows)); + (cfdata->remember_fm_wins == e_config->remember_internal_fm_windows) && + (cfdata->remember_internal_fm_windows_globally == e_config->remember_internal_fm_windows_globally)); } static int @@ -104,6 +107,7 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { e_config->remember_internal_windows = cfdata->remember_dialogs; e_config->remember_internal_fm_windows = cfdata->remember_fm_wins; + e_config->remember_internal_fm_windows_globally = cfdata->remember_internal_fm_windows_globally; e_config_save_queue(); return 1; @@ -112,7 +116,7 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) static Evas_Object * _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { - Evas_Object *ol, *of2, *ow; + Evas_Object *ol, *of2, *ow, *oc; Evas_Coord mw, mh; e_dialog_resizable_set(cfd->dia, 1); @@ -121,8 +125,12 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) ow = e_widget_check_add(evas, _("Remember internal dialogs"), &(cfdata->remember_dialogs)); e_widget_list_object_append(ol, ow, 1, 0, 0.0); - ow = e_widget_check_add(evas, _("Remember file manager windows"), + oc = e_widget_check_add(evas, _("Remember file manager windows"), &(cfdata->remember_fm_wins)); + e_widget_list_object_append(ol, oc, 1, 0, 0.0); + ow = e_widget_check_add(evas, _("Don't remember file manager windows by directory"), + &(cfdata->remember_internal_fm_windows_globally)); + e_widget_check_widget_disable_on_unchecked_add(oc, ow); e_widget_list_object_append(ol, ow, 1, 0, 0.0); ow = e_widget_button_add(evas, _("Delete"), "list-remove", diff --git a/src/modules/fileman/e_fwin.c b/src/modules/fileman/e_fwin.c index 0efbe22c8..4b0d16f75 100644 --- a/src/modules/fileman/e_fwin.c +++ b/src/modules/fileman/e_fwin.c @@ -239,11 +239,13 @@ static E_Fwin *drag_fwin = NULL; static Eina_List *fwins = NULL; static E_Fm2_Mime_Handler *dir_handler = NULL; static Efreet_Desktop *tdesktop = NULL; +static Eina_Stringshare *fwin_class = NULL; /* externally accessible functions */ int e_fwin_init(void) { + fwin_class = eina_stringshare_add("e_fwin"); tdesktop = e_util_terminal_desktop_get(); if (!tdesktop) return 1; dir_handler = e_fm2_mime_handler_new(_("Open Terminal here"), @@ -262,6 +264,7 @@ e_fwin_shutdown(void) EINA_LIST_FREE(fwins, fwin) e_object_del(E_OBJECT(fwin)); + eina_stringshare_replace(&fwin_class, NULL); if (dir_handler) { e_fm2_mime_handler_mime_del(dir_handler, "inode/directory"); @@ -1513,8 +1516,13 @@ _e_fwin_window_title_set(E_Fwin_Page *page) e_win_title_set(page->fwin->win, buf); } - snprintf(buf, sizeof(buf), "e_fwin::%s", e_fm2_real_path_get(page->fm_obj)); - e_win_name_class_set(page->fwin->win, "E", buf); + if (e_config->remember_internal_fm_windows_globally) + e_win_name_class_set(page->fwin->win, "E", fwin_class); + else + { + snprintf(buf, sizeof(buf), "e_fwin::%s", e_fm2_real_path_get(page->fm_obj)); + e_win_name_class_set(page->fwin->win, "E", buf); + } } static void @@ -2222,35 +2230,28 @@ _e_fwin_border_set(E_Fwin_Page *page, E_Fwin *fwin, E_Fm2_Icon_Info *ici) oic = e_fm2_icon_get(evas_object_evas_get(ici->fm), ici->ic, NULL, NULL, 0, &itype); if (!oic) return; - if (fwin->win->border->internal_icon) - eina_stringshare_del(fwin->win->border->internal_icon); - fwin->win->border->internal_icon = NULL; - if (fwin->win->border->internal_icon_key) - eina_stringshare_del(fwin->win->border->internal_icon_key); - fwin->win->border->internal_icon_key = NULL; + eina_stringshare_replace(&fwin->win->border->internal_icon, NULL); + eina_stringshare_replace(&fwin->win->border->internal_icon_key, NULL); if (!strcmp(evas_object_type_get(oic), "edje")) { edje_object_file_get(oic, &file, &group); - if (file) - { - fwin->win->border->internal_icon = - eina_stringshare_add(file); - if (group) - fwin->win->border->internal_icon_key = - eina_stringshare_add(group); - } + fwin->win->border->internal_icon = eina_stringshare_ref(file); + fwin->win->border->internal_icon_key = eina_stringshare_ref(group); } else { e_icon_file_get(oic, &file, &group); - fwin->win->border->internal_icon = eina_stringshare_add(file); - fwin->win->border->internal_icon_key = eina_stringshare_add(group); + fwin->win->border->internal_icon = eina_stringshare_ref(file); + fwin->win->border->internal_icon_key = eina_stringshare_ref(group); } evas_object_del(oic); if (fwin->win->border->placed) return; - class = eina_stringshare_printf("e_fwin::%s", e_fm2_real_path_get(fwin->cur_page->fm_obj)); + if (e_config->remember_internal_fm_windows_globally) + class = fwin_class; + else + class = eina_stringshare_printf("e_fwin::%s", e_fm2_real_path_get(fwin->cur_page->fm_obj)); e_zone_useful_geometry_get(fwin->win->border->zone, NULL, NULL, &zw, &zh); EINA_LIST_FOREACH(e_config->remembers, ll, rem) @@ -2263,7 +2264,8 @@ _e_fwin_border_set(E_Fwin_Page *page, E_Fwin *fwin, E_Fm2_Icon_Info *ici) rem->prop.pos_y = E_CLAMP(rem->prop.pos_y, 0, zh - rem->prop.h); break; } - eina_stringshare_del(class); + if (!e_config->remember_internal_fm_windows_globally) + eina_stringshare_del(class); if (found) return;