SVN revision: 15670
This commit is contained in:
Carsten Haitzler 2005-07-08 08:43:27 +00:00
parent 78192f5973
commit edbe48cda4
8 changed files with 51 additions and 19 deletions

19
TODO
View File

@ -44,6 +44,7 @@ Some of the things (in very short form) that need to be done to E17...
ESSENTIAL FEATURES ESSENTIAL FEATURES
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
* be able to set window to skip window list (and remember this)
* emit signal to submenu entries if they have a submenu shown for them or not * emit signal to submenu entries if they have a submenu shown for them or not
* add window placement options like place at pointer * add window placement options like place at pointer
* shaded windows should not allow border changes by the user * shaded windows should not allow border changes by the user
@ -86,9 +87,9 @@ Some of the things (in very short form) that need to be done to E17...
* break out ipc to set names for desktops (and get names/list them) * break out ipc to set names for desktops (and get names/list them)
* some sort of gui display of a desktop name (in the pager?) * some sort of gui display of a desktop name (in the pager?)
* window icons should be able to be chosen if e eapp icon overrides netwm * window icons should be able to be chosen if e eapp icon overrides netwm
icon or the other way around. icon or the other way around (and remember this).
* transients should have option to always follow parent * transients should have option to always follow parent
(move/resize/raise/lower) (move/resize/raise/lower) (and remember this).
* actions to make current zone different (warp mouse to there) * actions to make current zone different (warp mouse to there)
* actions to make the current container different * actions to make the current container different
* titlebar/border expansion/gadget panel for modules to put window widgets in * titlebar/border expansion/gadget panel for modules to put window widgets in
@ -128,22 +129,12 @@ Some of the things (in very short form) that need to be done to E17...
* make xrandr support get rotation and store it * make xrandr support get rotation and store it
* add separate app menu bars at top of screen support * add separate app menu bars at top of screen support
* add really nice "about" box with theme, authors credits list etc etc. * add really nice "about" box with theme, authors credits list etc etc.
* "immortal" windows (e will not allow that window to be closed or will
refuse to exit as long as the immortal flags is set until it is unset to
stop users from doing silly things like logging out while important stuff
is happening in that window -a menu option for this woudl be nice)
* need to be able to remember client positons/etc.
* with remember need to be able lock in attributes so the app (or user or both)
cannot change them (eg this window is a fixed size and location - app cannot
ask for a new size or location)
* gui config tools for bg's, keybindings, etc. etc. etc. * gui config tools for bg's, keybindings, etc. etc. etc.
* "control panel" app to launch the gui config tools * "control panel" app to launch the gui config tools
* make it possible to disable border buttons/actions (tell theme what is * make it possible to disable border buttons/actions (tell theme what is
disabled) disabled)
* modules need config executables with proper widgets (sliders, check boxes, * modules need config dialogs instead of long winded menus
radio etc. not massive menus) * remove module config menus (make them part of the module control panel etc.)
* remove module config menus (make them part of the module control panel and
as separate executables)
]]] ]]]
[[[ [[[

View File

@ -1878,6 +1878,22 @@ e_border_resize_cancel(void)
} }
} }
Evas_List *
e_border_immortal_windows_get(void)
{
Evas_List *list = NULL, *l;
for (l = borders; l; l = l->next)
{
E_Border *bd;
bd = l->data;
if (bd->lock_life)
list = evas_list_append(list, bd);
}
return list;
}
/* local subsystem functions */ /* local subsystem functions */
static void static void
_e_border_free(E_Border *bd) _e_border_free(E_Border *bd)
@ -5532,7 +5548,7 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
NEW_LOCK_MI(_("Close"), lock_close); NEW_LOCK_MI(_("Close"), lock_close);
/* NEW_LOCK_MI(_("Focus In"), lock_focus_in);*/ /* NEW_LOCK_MI(_("Focus In"), lock_focus_in);*/
/* NEW_LOCK_MI(_("Focus Out"), lock_focus_out);*/ /* NEW_LOCK_MI(_("Focus Out"), lock_focus_out);*/
/* NEW_LOCK_MI(_("Lifespan"), lock_life);*/ NEW_LOCK_MI(_("Lifespan"), lock_life);
m = e_menu_new(); m = e_menu_new();
bd->border_remember_menu = m; bd->border_remember_menu = m;

View File

@ -511,6 +511,7 @@ EAPI Evas_List *e_border_lost_windows_get(E_Zone *zone);
EAPI void e_border_ping(E_Border *bd); EAPI void e_border_ping(E_Border *bd);
EAPI void e_border_move_cancel(void); EAPI void e_border_move_cancel(void);
EAPI void e_border_resize_cancel(void); EAPI void e_border_resize_cancel(void);
EAPI Evas_List *e_border_immortal_windows_get(void);
extern EAPI int E_EVENT_BORDER_RESIZE; extern EAPI int E_EVENT_BORDER_RESIZE;
extern EAPI int E_EVENT_BORDER_MOVE; extern EAPI int E_EVENT_BORDER_MOVE;

View File

@ -331,7 +331,7 @@ _e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi)
static void static void
_e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi) _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
ecore_main_loop_quit(); if (!e_util_immortal_check()) ecore_main_loop_quit();
} }
static void static void

View File

@ -1028,7 +1028,7 @@ break;
REQ_NULL(HDL); REQ_NULL(HDL);
#elif (TYPE == E_WM_IN) #elif (TYPE == E_WM_IN)
GENERIC(HDL); GENERIC(HDL);
ecore_main_loop_quit(); if (!e_util_immortal_check()) ecore_main_loop_quit();
END_GENERIC(); END_GENERIC();
#elif (TYPE == E_REMOTE_IN) #elif (TYPE == E_REMOTE_IN)
#endif #endif

View File

@ -923,7 +923,7 @@ static int
_e_main_cb_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__) _e_main_cb_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
{ {
/* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */ /* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
ecore_main_loop_quit(); if (!e_util_immortal_check()) ecore_main_loop_quit();
return 1; return 1;
} }

View File

@ -235,3 +235,26 @@ e_util_both_str_empty(char *s1, char *s2)
if (empty == 2) return 1; if (empty == 2) return 1;
return 0; return 0;
} }
int
e_util_immortal_check(void)
{
Evas_List *wins;
wins = e_border_immortal_windows_get();
if (wins)
{
e_error_dialog_show(_("Cannot exit becaose of immortal windows."),
_("Some windows are left with still around with\n"
"the Lifespan lock enabled. This means that\n"
"Enlightenment will not allow itself to exit\n"
"until these windows have been closed or have\n"
"the lifespan lock removed.\n"));
/* FIXME: should really display a list of these lifespan locked */
/* windows in a dialog and let the user disable their locks in */
/* this dialog */
evas_list_free(wins);
return 1;
}
return 0;
}

View File

@ -19,6 +19,7 @@ EAPI E_Zone *e_util_container_zone_number_get(int con_num, int zone_num);
EAPI int e_util_head_exec(int head, char *cmd); EAPI int e_util_head_exec(int head, char *cmd);
EAPI int e_util_strcmp(char *s1, char *s2); EAPI int e_util_strcmp(char *s1, char *s2);
EAPI int e_util_both_str_empty(char *s1, char *s2); EAPI int e_util_both_str_empty(char *s1, char *s2);
EAPI int e_util_immortal_check(void);
#endif #endif
#endif #endif