summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2005-12-27 17:16:58 +0000
committerCarsten Haitzler <raster@rasterman.com>2005-12-27 17:16:58 +0000
commit78d729a57bc06840b0403187a9cd813d80d1ebe5 (patch)
tree2880dca4e7717687aa4f6ea76e90cff549b5003c
parent4785fb1d203d13f8fd391d118c17beabf5e18cd9 (diff)
make symbol hiding actually work - fix some bugs, fixme's adjust bugs and
TODO, add exe history and actually use it etc. SVN revision: 19313
-rw-r--r--BUGS18
-rw-r--r--TODO46
-rw-r--r--src/bin/Makefile.am4
-rw-r--r--src/bin/e.h9
-rw-r--r--src/bin/e_actions.c6
-rw-r--r--src/bin/e_border.c3
-rw-r--r--src/bin/e_config.c29
-rw-r--r--src/bin/e_config_dialog.c46
-rw-r--r--src/bin/e_configure.c7
-rw-r--r--src/bin/e_dialog.h8
-rw-r--r--src/bin/e_exebuf.c49
-rw-r--r--src/bin/e_exehist.c187
-rw-r--r--src/bin/e_exehist.h22
-rw-r--r--src/bin/e_includes.h1
-rw-r--r--src/bin/e_int_config_window_display.c7
-rw-r--r--src/bin/e_int_menus.c8
-rw-r--r--src/bin/e_ipc_handlers.h25
-rw-r--r--src/bin/e_main.c2
-rw-r--r--src/bin/e_menu.c11
-rw-r--r--src/bin/e_module.c17
-rw-r--r--src/bin/e_module.h2
-rw-r--r--src/bin/e_object.h18
-rw-r--r--src/bin/e_winlist.c3
-rw-r--r--src/modules/battery/e_mod_main.c89
-rw-r--r--src/modules/battery/e_mod_main.h5
-rw-r--r--src/modules/clock/e_mod_main.h5
-rw-r--r--src/modules/cpufreq/e_mod_main.h3
-rw-r--r--src/modules/dropshadow/e_mod_main.h5
-rw-r--r--src/modules/gadget_test/e_mod_main.h4
-rw-r--r--src/modules/ibar/e_mod_main.c6
-rw-r--r--src/modules/ibar/e_mod_main.h5
-rw-r--r--src/modules/ibox/e_mod_main.h5
-rw-r--r--src/modules/pager/e_mod_main.h5
-rw-r--r--src/modules/randr/e_mod_main.h3
-rw-r--r--src/modules/start/e_mod_main.h3
-rw-r--r--src/modules/temperature/e_mod_main.h6
36 files changed, 517 insertions, 155 deletions
diff --git a/BUGS b/BUGS
index 40f5e2928..dbaf0cded 100644
--- a/BUGS
+++ b/BUGS
@@ -178,21 +178,3 @@ dj2 yea screen #0 and screen #1
178 178
179NB: in multihead if the mouse exits a screen during move or resize - either 179NB: in multihead if the mouse exits a screen during move or resize - either
180disallow it (warp back to previous position ) or limit resize/move 180disallow it (warp back to previous position ) or limit resize/move
181
182
183
184From: adi <adiroiban@gmail.com>
185To: enlightenment-devel@lists.sourceforge.net
186Subject: [E-devel] Segfault if window resize and move geometry settings are
187changed
188Date: Sun, 18 Dec 2005 17:38:33 +0200
189Sender: enlightenment-devel-admin@lists.sourceforge.net
190
191I discovered that if i try to change the default settings for window
192resize and move geometry from the configuration panel and then resize
193a window e17 crash.
194
195i build e17 from cvs 2 hours ago.
196
197bye
198adi
diff --git a/TODO b/TODO
index 5e3be64e3..a9a5ed800 100644
--- a/TODO
+++ b/TODO
@@ -8,19 +8,18 @@ Some of the things (in very short form) that need to be done to E17...
8 BUGS / FIXES 8 BUGS / FIXES
9------------------------------------------------------------------------------- 9-------------------------------------------------------------------------------
10 10
11* BUG: mouse pointer changes are buggy - white box for x curosrs the first
12 time that cursor is used. also sometimes forgets what cursor to use and
13 was being used etc.
14* BUG: advanced modules settings dialog has broken load, module click in
15 unloaded list etc. etc.
11* BUG: if you iconify a window and while iconified the window unmaps 16* BUG: if you iconify a window and while iconified the window unmaps
12 (rhythmbox does this a lot apparently) e doesnt realise and still thinks 17 (rhythmbox does this a lot apparently) e doesnt realise and still thinks
13 its iconified. 18 its iconified.
14* BUG: if app changes map state hint with XSetWMHints instead of callling
15 XMapWindow e wont de-iconify the window
16* BUG: dnd to ibar is broken if u did an icon that isn't IN the ibar yet 19* BUG: dnd to ibar is broken if u did an icon that isn't IN the ibar yet
17 (from a window border) to either the very start or end of the ibar. 20 (from a window border) to either the very start or end of the ibar.
18* BUG: race condition on winlist activate via keypress and the key grab thus
19 missing the alt key raise sometimes.
20* BUG: dnd from konqueror on zone 0 to another konq on zone 1 with xinerama (2 21* BUG: dnd from konqueror on zone 0 to another konq on zone 1 with xinerama (2
21 zones) causes segv 22 zones) causes segv
22* BUG: e often forgets what window is focused so ctrl+alt+x for example doesnt
23 close the current focused window... hmmmm
24* BUG: in general fullscreen needs work, cleaning and testing. dont allow 23* BUG: in general fullscreen needs work, cleaning and testing. dont allow
25 desktop switches for the desk a fullscreened window is on, nor allow windows 24 desktop switches for the desk a fullscreened window is on, nor allow windows
26 to be raised above the fs win etc. ie the app must seem to be entirely fs for 25 to be raised above the fs win etc. ie the app must seem to be entirely fs for
@@ -28,8 +27,6 @@ Some of the things (in very short form) that need to be done to E17...
28* BUG: if you have 2 zones and you fill up zone 2 (right) mostly and then run 27* BUG: if you have 2 zones and you fill up zone 2 (right) mostly and then run
29 a big xev (xev -g 1280x1024) that wont fit it gets placed offscreen to the 28 a big xev (xev -g 1280x1024) that wont fit it gets placed offscreen to the
30 right of zone 2 29 right of zone 2
31* BUG: if you alt-click on a module to move it, and the mouse happens to be right where a resize handle for a neighboring module is, it will resize that instead. We should probably just go to edit mode for the single module instead of _all_ modules.
32* BUG: the last desktop module enabled can not be moved with alt-drag. Disable and reenable a desktop module to test.
33]]] 30]]]
34 31
35[[[ 32[[[
@@ -37,7 +34,7 @@ Some of the things (in very short form) that need to be done to E17...
37 ESSENTIAL FEATURES 34 ESSENTIAL FEATURES
38------------------------------------------------------------------------------- 35-------------------------------------------------------------------------------
39 36
40* add fullscreen support (e16 xvidmode or xrandr style) 37* add fullscreen (zoom) support (e16 xvidmode or xrandr style)
41* implement thees maximise/fullscreen modes: 38* implement thees maximise/fullscreen modes:
42 Which of these should be different modes, and which should be options for 39 Which of these should be different modes, and which should be options for
43 a mode? i think they all should be distinct actions of their own bound 40 a mode? i think they all should be distinct actions of their own bound
@@ -76,11 +73,9 @@ Some of the things (in very short form) that need to be done to E17...
76 means .mo compiled files from a .po, an optional font and a config file that 73 means .mo compiled files from a .po, an optional font and a config file that
77 specifies the locale and font) and then install the font(s) either as a user 74 specifies the locale and font) and then install the font(s) either as a user
78 or superuser, and the .mo in the system or a user locales dir. 75 or superuser, and the .mo in the system or a user locales dir.
79* all menus need icons if they dont have them yet:)
80* gadget containers (shelves?) using popups as well as in-line in a canvas 76* gadget containers (shelves?) using popups as well as in-line in a canvas
81* finish off icccm support 77* finish off icccm support
82* finish complete netwm support 78* finish complete netwm support
83* different cursors for different parts of the screen
84* add a "taskbar" module 79* add a "taskbar" module
85* add cpu load module 80* add cpu load module
86* add a way to access "all" apps app dir 81* add a way to access "all" apps app dir
@@ -89,20 +84,13 @@ Some of the things (in very short form) that need to be done to E17...
89 new bars to be created or bars to be deleted 84 new bars to be created or bars to be deleted
90* ibar need to support label pop-ups 85* ibar need to support label pop-ups
91* ibar should support subdirs with pop-up icons... 86* ibar should support subdirs with pop-up icons...
92* borders need to be able to change border theme on the fly by menu or app
93 properties
94* add setup/install wizard to seed eap files etc. etc. 87* add setup/install wizard to seed eap files etc. etc.
95* support text and color classes 88* support text and color classes
96* add clientinfo pane/popdown for borders 89* add clientinfo pane/popdown for borders
97* make xrandr support get rotation and store it 90* make xrandr support get rotation and store it
98* gui config dialogs for all config 91* gui config dialogs for all config
99* "control panel" dialog need to be better to allow config dialogs to launch
100 from it
101* make it possible to disable border buttons/actions (tell theme what is 92* make it possible to disable border buttons/actions (tell theme what is
102 disabled) 93 disabled)
103* modules need config dialogs instead of long winded menus
104* remove module config menus (make them part of the module control panel etc.)
105* alt-middle should go into resize mode on modules. (right now you have to guess where the resize handle will appear and alt-click there, or go into full edit mode.
106]]] 94]]]
107 95
108[[[ 96[[[
@@ -110,25 +98,17 @@ Some of the things (in very short form) that need to be done to E17...
110 CLEANUPS 98 CLEANUPS
111------------------------------------------------------------------------------- 99-------------------------------------------------------------------------------
112 100
113* return from ipc if the command failed or not 101* EAP cache files can be hit and miss and have problems. move things to be
114* ipc should give more feedback wheter the options are accepted or not. 102 explicit reloads.
115* find all other instances of using e_error dialogs and use them only with low 103* need to match EAPI on all fn's as well as thier prototypes
116 level errors than need attention no matter what.
117* winlist should support place for window "screenshot" in list as well as 104* winlist should support place for window "screenshot" in list as well as
118 app icon 105 app icon
119* winlist should in theory allow horizontal list layout not just vertical (set
120 by the theme)
121* winlist could divide windows up into blocks - sub-lists within a container 106* winlist could divide windows up into blocks - sub-lists within a container
122 per desktop (with stick windows considered to live on the "current" desk 107 per desktop (with stick windows considered to live on the "current" desk
123 when winlist starts) 108 when winlist starts)
124* make it easy for modules to hook into ipc and extend it for themselves 109* make it easy for modules to hook into ipc and extend it for themselves
125* gadman needs some changes to virtualise the canvas/container the gadget 110* gadman needs some changes to virtualise the canvas/container the gadget
126 ends up in (eg in popups or border) 111 ends up in (eg in popups or border)
127* perhaps we should split focus and "selected" windows. selected window is
128 what ocused is now and focus is something only affectinbg keyboard input. if
129 the focus window becoems another managed window it becoems the selected
130 window - otherwise click to focus or pointer focus will chose the selected
131 window that may get the focus if it allows it...
132* module api needs to move label and icon to data file (.eap file?), not api 112* module api needs to move label and icon to data file (.eap file?), not api
133* ibar lamp needs short timer on mouse out for hide before hiding (and del 113* ibar lamp needs short timer on mouse out for hide before hiding (and del
134 the time on mouse in) 114 the time on mouse in)
@@ -141,9 +121,6 @@ Some of the things (in very short form) that need to be done to E17...
141------------------------------------------------------------------------------- 121-------------------------------------------------------------------------------
142 122
143* add key input focus control for desktop modules 123* add key input focus control for desktop modules
144* break out desks x/y size config so you can have a different desktop size
145 per zone - right now there is a signle global (use this later as the default
146 for new/unconfigured zones)
147* emit signal to submenu entries if they have a submenu shown for them or not 124* emit signal to submenu entries if they have a submenu shown for them or not
148* screensaver/lock module 125* screensaver/lock module
149* tip/hint/suggestion dialog 126* tip/hint/suggestion dialog
@@ -151,16 +128,13 @@ Some of the things (in very short form) that need to be done to E17...
151* add locale and encoding fields to eapp files (to launch eapp in that 128* add locale and encoding fields to eapp files (to launch eapp in that
152 locale+encoding) 129 locale+encoding)
153* add input method selector stuff to eapp - same as locale 130* add input method selector stuff to eapp - same as locale
154* "run command" typebuffer thing
155* setup configs for gnome and kde (as options) if they are installed (eg 131* setup configs for gnome and kde (as options) if they are installed (eg
156 run gnome-settings-daemon). 132 run gnome-settings-daemon).
157* check evas has eet support early on. 133* check evas has eet support early on.
134* check engine can work on a given screen before using it
158* pagers should be able to be configured to control more than the current zone 135* pagers should be able to be configured to control more than the current zone
159 (select which zone they control) 136 (select which zone they control)
160* non opaque move/resize 137* non opaque move/resize
161* add window tabs (multiple clients in 1 border)
162* add a button area expansion for borders ???
163* add template button for expanded buttons ???
164* maybe add systray module/support? 138* maybe add systray module/support?
165* add "osd" subsystem for things like volume controls on keybboards, etc. 139* add "osd" subsystem for things like volume controls on keybboards, etc.
166 that overlay the screen 140 that overlay the screen
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index 053d0d968..fbd5181b5 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -125,7 +125,8 @@ e_int_config_theme.h \
125e_int_config_menus.h \ 125e_int_config_menus.h \
126e_deskpreview.h \ 126e_deskpreview.h \
127e_exebuf.h \ 127e_exebuf.h \
128e_int_config_modules.h 128e_int_config_modules.h \
129e_exehist.h
129 130
130enlightenment_src = \ 131enlightenment_src = \
131e_user.c \ 132e_user.c \
@@ -232,6 +233,7 @@ e_int_config_menus.c \
232e_deskpreview.c \ 233e_deskpreview.c \
233e_exebuf.c \ 234e_exebuf.c \
234e_int_config_modules.c \ 235e_int_config_modules.c \
236e_exehist.c \
235$(ENLIGHTENMENTHEADERS) 237$(ENLIGHTENMENTHEADERS)
236 238
237enlightenment_SOURCES = \ 239enlightenment_SOURCES = \
diff --git a/src/bin/e.h b/src/bin/e.h
index 747c7e8c4..28875cf84 100644
--- a/src/bin/e.h
+++ b/src/bin/e.h
@@ -59,8 +59,13 @@
59# define EAPI __declspec(dllimport) 59# define EAPI __declspec(dllimport)
60# endif 60# endif
61#else 61#else
62# ifdef GCC_HASCLASSVISIBILITY 62# ifdef __GNUC__
63# define EAPI __attribute__ ((visibility("default"))) 63# if __GNUC__ >= 4
64# pragma GCC visibility push(hidden)
65# define EAPI __attribute__ ((visibility("default")))
66# else
67# define EAPI
68# endif
64# else 69# else
65# define EAPI 70# define EAPI
66# endif 71# endif
diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c
index c41301110..988651d83 100644
--- a/src/bin/e_actions.c
+++ b/src/bin/e_actions.c
@@ -1068,6 +1068,7 @@ ACT_FN_GO(exec)
1068 Ecore_Exe *exe; 1068 Ecore_Exe *exe;
1069 1069
1070 exe = ecore_exe_run(params, NULL); 1070 exe = ecore_exe_run(params, NULL);
1071 e_exehist_add("action/exec", params);
1071 if (exe) ecore_exe_free(exe); 1072 if (exe) ecore_exe_free(exe);
1072 } 1073 }
1073} 1074}
@@ -1100,7 +1101,10 @@ ACT_FN_GO(app)
1100 else if (!strcmp(p2, "exe:")) 1101 else if (!strcmp(p2, "exe:"))
1101 a = e_app_exe_find(p + 1); 1102 a = e_app_exe_find(p + 1);
1102 if (a) 1103 if (a)
1103 e_zone_app_exec(zone, a); 1104 {
1105 e_zone_app_exec(zone, a);
1106 e_exehist_add("action/app", a->exe);
1107 }
1104 } 1108 }
1105 } 1109 }
1106 } 1110 }
diff --git a/src/bin/e_border.c b/src/bin/e_border.c
index 77bb29f59..5bc829bbe 100644
--- a/src/bin/e_border.c
+++ b/src/bin/e_border.c
@@ -3682,6 +3682,7 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
3682 { 3682 {
3683 if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1; 3683 if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
3684 else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR) return 1; 3684 else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR) return 1;
3685 else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) return 1;
3685 } 3686 }
3686 else if (e->mode == ECORE_X_EVENT_MODE_GRAB) 3687 else if (e->mode == ECORE_X_EVENT_MODE_GRAB)
3687 { 3688 {
@@ -3689,12 +3690,14 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
3689 else if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1; 3690 else if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
3690 else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) return 1; 3691 else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) return 1;
3691 else if (e->detail == ECORE_X_EVENT_DETAIL_ANCESTOR) return 1; 3692 else if (e->detail == ECORE_X_EVENT_DETAIL_ANCESTOR) return 1;
3693 else if (e->detail == ECORE_X_EVENT_DETAIL_VIRTUAL) return 1;
3692 } 3694 }
3693 else if (e->mode == ECORE_X_EVENT_MODE_UNGRAB) 3695 else if (e->mode == ECORE_X_EVENT_MODE_UNGRAB)
3694 { 3696 {
3695 /* for firefox/thunderbird (xul) menu walking */ 3697 /* for firefox/thunderbird (xul) menu walking */
3696 /* NB: why did i disable this before? */ 3698 /* NB: why did i disable this before? */
3697 if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1; 3699 if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
3700 else if (e->detail == ECORE_X_EVENT_DETAIL_POINTER) return 1;
3698 } 3701 }
3699 else if (e->mode == ECORE_X_EVENT_MODE_WHILE_GRABBED) 3702 else if (e->mode == ECORE_X_EVENT_MODE_WHILE_GRABBED)
3700 { 3703 {
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index 370f09843..74ec12172 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -366,18 +366,18 @@ e_config_init(void)
366 E_CONFIG_VAL(D, T, input_method, STR); /**/ 366 E_CONFIG_VAL(D, T, input_method, STR); /**/
367 E_CONFIG_LIST(D, T, path_append_input_methods, _e_config_path_append_edd); /**/ 367 E_CONFIG_LIST(D, T, path_append_input_methods, _e_config_path_append_edd); /**/
368 E_CONFIG_LIST(D, T, path_append_messages, _e_config_path_append_edd); /**/ 368 E_CONFIG_LIST(D, T, path_append_messages, _e_config_path_append_edd); /**/
369 E_CONFIG_VAL(D, T, exebuf_max_exe_list, INT); /**/ 369 E_CONFIG_VAL(D, T, exebuf_max_exe_list, INT);
370 E_CONFIG_VAL(D, T, exebuf_max_eap_list, INT); /**/ 370 E_CONFIG_VAL(D, T, exebuf_max_eap_list, INT);
371 E_CONFIG_VAL(D, T, exebuf_scroll_animate, INT); /**/ 371 E_CONFIG_VAL(D, T, exebuf_scroll_animate, INT);
372 E_CONFIG_VAL(D, T, exebuf_scroll_speed, DOUBLE); /**/ 372 E_CONFIG_VAL(D, T, exebuf_scroll_speed, DOUBLE);
373 E_CONFIG_VAL(D, T, exebuf_pos_align_x, DOUBLE); /**/ 373 E_CONFIG_VAL(D, T, exebuf_pos_align_x, DOUBLE);
374 E_CONFIG_VAL(D, T, exebuf_pos_align_y, DOUBLE); /**/ 374 E_CONFIG_VAL(D, T, exebuf_pos_align_y, DOUBLE);
375 E_CONFIG_VAL(D, T, exebuf_pos_size_w, DOUBLE); /**/ 375 E_CONFIG_VAL(D, T, exebuf_pos_size_w, DOUBLE);
376 E_CONFIG_VAL(D, T, exebuf_pos_size_h, DOUBLE); /**/ 376 E_CONFIG_VAL(D, T, exebuf_pos_size_h, DOUBLE);
377 E_CONFIG_VAL(D, T, exebuf_pos_min_w, INT); /**/ 377 E_CONFIG_VAL(D, T, exebuf_pos_min_w, INT);
378 E_CONFIG_VAL(D, T, exebuf_pos_min_h, INT); /**/ 378 E_CONFIG_VAL(D, T, exebuf_pos_min_h, INT);
379 E_CONFIG_VAL(D, T, exebuf_pos_max_w, INT); /**/ 379 E_CONFIG_VAL(D, T, exebuf_pos_max_w, INT);
380 E_CONFIG_VAL(D, T, exebuf_pos_max_h, INT); /**/ 380 E_CONFIG_VAL(D, T, exebuf_pos_max_h, INT);
381 e_config = e_config_domain_load("e", _e_config_edd); 381 e_config = e_config_domain_load("e", _e_config_edd);
382 if (e_config) 382 if (e_config)
383 { 383 {
@@ -666,7 +666,7 @@ e_config_init(void)
666 eb->action = evas_stringshare_add("menu_show"); 666 eb->action = evas_stringshare_add("menu_show");
667 eb->params = evas_stringshare_add("favorites"); 667 eb->params = evas_stringshare_add("favorites");
668 e_config->mouse_bindings = evas_list_append(e_config->mouse_bindings, eb); 668 e_config->mouse_bindings = evas_list_append(e_config->mouse_bindings, eb);
669 669/*
670 eb = E_NEW(E_Config_Binding_Mouse, 1); 670 eb = E_NEW(E_Config_Binding_Mouse, 1);
671 eb->context = E_BINDING_CONTEXT_CONTAINER; 671 eb->context = E_BINDING_CONTEXT_CONTAINER;
672 eb->button = 1; 672 eb->button = 1;
@@ -675,6 +675,7 @@ e_config_init(void)
675 eb->action = evas_stringshare_add("edit_mode"); 675 eb->action = evas_stringshare_add("edit_mode");
676 eb->params = NULL; 676 eb->params = NULL;
677 e_config->mouse_bindings = evas_list_append(e_config->mouse_bindings, eb); 677 e_config->mouse_bindings = evas_list_append(e_config->mouse_bindings, eb);
678*/
678 } 679 }
679 { 680 {
680 E_Config_Binding_Key *eb; 681 E_Config_Binding_Key *eb;
@@ -1766,7 +1767,7 @@ e_config_domain_save(char *domain, E_Config_DD *edd, void *data)
1766 ef = eet_open(buf, EET_FILE_MODE_WRITE); 1767 ef = eet_open(buf, EET_FILE_MODE_WRITE);
1767 if (ef) 1768 if (ef)
1768 { 1769 {
1769 ok = eet_data_write(ef, edd, "config", data, 0); 1770 ok = eet_data_write(ef, edd, "config", data, 1);
1770 eet_close(ef); 1771 eet_close(ef);
1771 } 1772 }
1772 return ok; 1773 return ok;
diff --git a/src/bin/e_config_dialog.c b/src/bin/e_config_dialog.c
index f41c5eef3..4934fd336 100644
--- a/src/bin/e_config_dialog.c
+++ b/src/bin/e_config_dialog.c
@@ -120,9 +120,29 @@ _e_config_dialog_go(E_Config_Dialog *cfd, E_Config_Dialog_CFData_Type type)
120 e_dialog_button_disable_num_set(cfd->dia, 1, 1); 120 e_dialog_button_disable_num_set(cfd->dia, 1, 1);
121 } 121 }
122 e_dialog_button_add(cfd->dia, _("Close"), NULL, NULL, NULL); 122 e_dialog_button_add(cfd->dia, _("Close"), NULL, NULL, NULL);
123 e_win_centered_set(cfd->dia->win, 1); 123 if (!pdia)
124 e_dialog_show(cfd->dia); 124 {
125 e_win_centered_set(cfd->dia->win, 1);
126 e_dialog_show(cfd->dia);
127 }
128 else
129 {
130 int x, y;
131
132 e_dialog_show(cfd->dia);
133 x = pdia->win->border->x + ((pdia->win->w - cfd->dia->win->w) / 2);
134 y = pdia->win->border->y + ((pdia->win->h - cfd->dia->win->h) / 2);
135 if (x < 0) x = 0;
136 if (y < 0) y = 0;
137 if ((x + cfd->dia->win->w) > (pdia->win->container->w))
138 x = pdia->win->container->w - cfd->dia->win->w;
139 if ((y + cfd->dia->win->h) > (pdia->win->container->h))
140 x = pdia->win->container->h - cfd->dia->win->h;
141 e_win_move(cfd->dia->win, x, y);
142 e_win_placed_set(cfd->dia->win, 1);
143 }
125 cfd->view_type = type; 144 cfd->view_type = type;
145
126 if (pdia) 146 if (pdia)
127 { 147 {
128 e_object_del_attach_func_set(E_OBJECT(pdia), NULL); 148 e_object_del_attach_func_set(E_OBJECT(pdia), NULL);
@@ -169,11 +189,11 @@ _e_config_dialog_cb_apply(void *data, E_Dialog *dia)
169 ok = cfd->view.advanced.apply_cfdata(cfd, cfd->cfdata); 189 ok = cfd->view.advanced.apply_cfdata(cfd, cfd->cfdata);
170 if (ok) 190 if (ok)
171 { 191 {
172 _e_config_dialog_go(cfd, cfd->view_type); 192// FIXME: this is a nasty hack - from modules conf dialog patch i think.
173 /* 193// bad bad. make the modules dialog work WITHOUT this
194// _e_config_dialog_go(cfd, cfd->view_type);
174 e_dialog_button_disable_num_set(cfd->dia, 0, 1); 195 e_dialog_button_disable_num_set(cfd->dia, 0, 1);
175 e_dialog_button_disable_num_set(cfd->dia, 1, 1); 196 e_dialog_button_disable_num_set(cfd->dia, 1, 1);
176 */
177 } 197 }
178} 198}
179 199
@@ -202,13 +222,15 @@ _e_config_dialog_cb_changed(void *data, Evas_Object *obj)
202 222
203 cfd = data; 223 cfd = data;
204 224
205 if(cfd->view_dirty) 225// FIXME: this is a nasty hack - from modules conf dialog patch i think.
206 { 226// bad bad. make the modules dialog work WITHOUT this
207 _e_config_dialog_go(cfd, cfd->view_type); 227// if (cfd->view_dirty)
208 } 228// {
209 else if(!cfd->hide_buttons) 229// _e_config_dialog_go(cfd, cfd->view_type);
230// }
231// else if (!cfd->hide_buttons)
210 { 232 {
211 e_dialog_button_disable_num_set(cfd->dia, 0, 0); 233 e_dialog_button_disable_num_set(cfd->dia, 0, 0);
212 e_dialog_button_disable_num_set(cfd->dia, 1, 0); 234 e_dialog_button_disable_num_set(cfd->dia, 1, 0);
213 } 235 }
214} 236}
diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c
index c7267f279..5a9229ed4 100644
--- a/src/bin/e_configure.c
+++ b/src/bin/e_configure.c
@@ -19,7 +19,7 @@ e_configure_show(E_Container *con)
19{ 19{
20 E_Configure *eco; 20 E_Configure *eco;
21 E_Manager *man; 21 E_Manager *man;
22 Evas_Coord w, h, ew, eh; 22 Evas_Coord w, h, ew, eh, mw, mh;
23 23
24 if (!con) 24 if (!con)
25 { 25 {
@@ -55,6 +55,8 @@ e_configure_show(E_Container *con)
55 55
56 eco->ilist = e_widget_ilist_add(eco->evas, 48, 48, NULL); 56 eco->ilist = e_widget_ilist_add(eco->evas, 48, 48, NULL);
57 e_widget_ilist_selector_set(eco->ilist, 1); 57 e_widget_ilist_selector_set(eco->ilist, 1);
58 e_widget_min_size_get(eco->ilist, &mw, &mh);
59 edje_extern_object_min_size_set(eco->ilist, mw, mh);
58 edje_object_part_swallow(eco->edje, "item", eco->ilist); 60 edje_object_part_swallow(eco->edje, "item", eco->ilist);
59 edje_object_part_text_set(eco->edje, "title", _("Configuration Panel")); 61 edje_object_part_text_set(eco->edje, "title", _("Configuration Panel"));
60 62
@@ -71,7 +73,10 @@ e_configure_show(E_Container *con)
71 /* FIXME: we should have a way for modules to hook in here and add their 73 /* FIXME: we should have a way for modules to hook in here and add their
72 * own entries 74 * own entries
73 */ 75 */
76
74 eco->close = e_widget_button_add(eco->evas, _("Close"), NULL, _e_configure_cb_close, eco, NULL); 77 eco->close = e_widget_button_add(eco->evas, _("Close"), NULL, _e_configure_cb_close, eco, NULL);
78 e_widget_min_size_get(eco->close, &mw, &mh);
79 edje_extern_object_min_size_set(eco->close, mw, mh);
75 edje_object_part_swallow(eco->edje, "button", eco->close); 80 edje_object_part_swallow(eco->edje, "button", eco->close);
76 81
77 edje_object_size_min_calc(eco->edje, &ew, &eh); 82 edje_object_size_min_calc(eco->edje, &ew, &eh);
diff --git a/src/bin/e_dialog.h b/src/bin/e_dialog.h
index 2af707b04..d95a4df2a 100644
--- a/src/bin/e_dialog.h
+++ b/src/bin/e_dialog.h
@@ -7,10 +7,10 @@ typedef struct _E_Dialog E_Dialog;
7typedef struct _E_Dialog_Button E_Dialog_Button; 7typedef struct _E_Dialog_Button E_Dialog_Button;
8 8
9#else 9#else
10# ifndef E_DIALOG_H 10#ifndef E_DIALOG_H
11# define E_DIALOG_H 11#define E_DIALOG_H
12 12
13# define E_DIALOG_TYPE 0xE0b01012 13#define E_DIALOG_TYPE 0xE0b01012
14 14
15struct _E_Dialog 15struct _E_Dialog
16{ 16{
@@ -41,5 +41,5 @@ EAPI void e_dialog_content_set (E_Dialog *dia, Evas_Object *obj,
41EAPI void e_dialog_resizable_set (E_Dialog *dia, int resizable); 41EAPI void e_dialog_resizable_set (E_Dialog *dia, int resizable);
42EAPI void e_dialog_show (E_Dialog *dia); 42EAPI void e_dialog_show (E_Dialog *dia);
43 43
44# endif 44#endif
45#endif 45#endif
diff --git a/src/bin/e_exebuf.c b/src/bin/e_exebuf.c
index 048bc2e2e..b45b7cdbc 100644
--- a/src/bin/e_exebuf.c
+++ b/src/bin/e_exebuf.c
@@ -18,6 +18,8 @@ struct _E_Exebuf_Exe
18 18
19static void _e_exebuf_exe_free(E_Exebuf_Exe *exe); 19static void _e_exebuf_exe_free(E_Exebuf_Exe *exe);
20static void _e_exebuf_matches_clear(void); 20static void _e_exebuf_matches_clear(void);
21static int _e_exebuf_cb_sort_eap(void *data1, void *data2);
22static int _e_exebuf_cb_sort_exe(void *data1, void *data2);
21static void _e_exebuf_update(void); 23static void _e_exebuf_update(void);
22static void _e_exebuf_exec(void); 24static void _e_exebuf_exec(void);
23static void _e_exebuf_exe_sel(E_Exebuf_Exe *exe); 25static void _e_exebuf_exe_sel(E_Exebuf_Exe *exe);
@@ -306,12 +308,21 @@ _e_exebuf_exec(void)
306 if (exe_sel) 308 if (exe_sel)
307 { 309 {
308 if (exe_sel->app) 310 if (exe_sel->app)
309 e_zone_app_exec(exebuf->zone, exe_sel->app); 311 {
312 e_zone_app_exec(exebuf->zone, exe_sel->app);
313 e_exehist_add("exebuf", exe_sel->app->exe);
314 }
310 else 315 else
311 e_zone_exec(exebuf->zone, exe_sel->file); 316 {
317 e_zone_exec(exebuf->zone, exe_sel->file);
318 e_exehist_add("exebuf", exe_sel->file);
319 }
312 } 320 }
313 else 321 else
314 e_zone_exec(exebuf->zone, cmd_buf); 322 {
323 e_zone_exec(exebuf->zone, cmd_buf);
324 e_exehist_add("exebuf", cmd_buf);
325 }
315 326
316 e_exebuf_hide(); 327 e_exebuf_hide();
317} 328}
@@ -608,6 +619,32 @@ _e_exebuf_backspace(void)
608 } 619 }
609} 620}
610 621
622static int
623_e_exebuf_cb_sort_eap(void *data1, void *data2)
624{
625 E_App *a1, *a2;
626 double t1, t2;
627
628 a1 = data1;
629 a2 = data2;
630 t1 = e_exehist_newest_run_get(a1->exe);
631 t2 = e_exehist_newest_run_get(a2->exe);
632 return (int)(t2 - t1);
633}
634
635static int
636_e_exebuf_cb_sort_exe(void *data1, void *data2)
637{
638 char *e1, *e2;
639 double t1, t2;
640
641 e1 = data1;
642 e2 = data2;
643 t1 = e_exehist_newest_run_get(e1);
644 t2 = e_exehist_newest_run_get(e2);
645 return (int)(t2 - t1);
646}
647
611static void 648static void
612_e_exebuf_matches_update(void) 649_e_exebuf_matches_update(void)
613{ 650{
@@ -723,6 +760,8 @@ _e_exebuf_matches_update(void)
723 /* FIXME: sort eap matches with most recently selected matches at the 760 /* FIXME: sort eap matches with most recently selected matches at the
724 * start and then from shortest to longest string 761 * start and then from shortest to longest string
725 */ 762 */
763 eap_matches = evas_list_sort(eap_matches, evas_list_count(eap_matches), _e_exebuf_cb_sort_eap);
764
726 max = e_config->exebuf_max_eap_list; 765 max = e_config->exebuf_max_eap_list;
727 e_box_freeze(eap_list_object); 766 e_box_freeze(eap_list_object);
728 for (i = 0, l = eap_matches; l && (i < max); l = l->next, i++) 767 for (i = 0, l = eap_matches; l && (i < max); l = l->next, i++)
@@ -760,9 +799,11 @@ _e_exebuf_matches_update(void)
760 } 799 }
761 e_box_thaw(eap_list_object); 800 e_box_thaw(eap_list_object);
762 801
763 /* FIXME: sort eap matches with most recently selected matches at the 802 /* FIXME: sort exe matches with most recently selected matches at the
764 * start and then from shortest to longest string 803 * start and then from shortest to longest string
765 */ 804 */
805 exe_matches = evas_list_sort(exe_matches, evas_list_count(exe_matches), _e_exebuf_cb_sort_exe);
806
766 max = e_config->exebuf_max_exe_list; 807 max = e_config->exebuf_max_exe_list;
767 e_box_freeze(exe_list_object); 808 e_box_freeze(exe_list_object);
768 for (i = 0, l = exe_matches; l && (i < max); l = l->next, i++) 809 for (i = 0, l = exe_matches; l && (i < max); l = l->next, i++)
diff --git a/src/bin/e_exehist.c b/src/bin/e_exehist.c
new file mode 100644
index 000000000..06fcbaf94
--- /dev/null
+++ b/src/bin/e_exehist.c
@@ -0,0 +1,187 @@
1/*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4#include "e.h"
5
6/* currently default bind is alt+` buf alt+space has been suggested */
7
8/* local subsystem functions */
9typedef struct _E_Exehist E_Exehist;
10typedef struct _E_Exehist_Item E_Exehist_Item;
11
12struct _E_Exehist
13{
14 Evas_List *history;
15};
16
17struct _E_Exehist_Item
18{
19 char *exe;
20 char *launch_method;
21 double exetime;
22};
23
24static void _e_exehist_unload_queue(void);
25static void _e_exehist_load(void);
26static void _e_exehist_clear(void);
27static void _e_exehist_unload(void);
28static void _e_exehist_limit(void);
29static int _e_exehist_cb_unload(void *data);
30
31/* local subsystem globals */
32static E_Config_DD *_e_exehist_config_edd = NULL;
33static E_Config_DD *_e_exehist_config_item_edd = NULL;
34static E_Exehist *_e_exehist = NULL;
35static Ecore_Timer *_e_exehist_unload_timer = NULL;
36
37/* externally accessible functions */
38int
39e_exehist_init(void)
40{
41 _e_exehist_config_item_edd = E_CONFIG_DD_NEW("E_Exehist_Item", E_Exehist_Item);
42#undef T
43#undef D
44#define T E_Exehist_Item
45#define D _e_exehist_config_item_edd
46 E_CONFIG_VAL(D, T, exe, STR);
47 E_CONFIG_VAL(D, T, launch_method, STR);
48 E_CONFIG_VAL(D, T, exetime, DOUBLE);
49
50 _e_exehist_config_edd = E_CONFIG_DD_NEW("E_Exehist", E_Exehist);
51#undef T
52#undef D
53#define T E_Exehist
54#define D _e_exehist_config_edd
55 E_CONFIG_LIST(D, T, history, _e_exehist_config_item_edd);
56 return 1;
57}
58
59int
60e_exehist_shutdown(void)
61{
62 _e_exehist_unload();
63 E_CONFIG_DD_FREE(_e_exehist_config_item_edd);
64 E_CONFIG_DD_FREE(_e_exehist_config_edd);
65 return 1;
66}
67
68void
69e_exehist_add(const char *launch_method, const char *exe)
70{
71 E_Exehist_Item *ei;
72
73 _e_exehist_load();
74 if (!_e_exehist) return;
75 ei = E_NEW(E_Exehist_Item, 1);
76 if (!ei) return;
77 ei->launch_method = evas_stringshare_add(launch_method);
78 ei->exe = evas_stringshare_add(exe);
79 ei->exetime = ecore_time_get();
80 _e_exehist->history = evas_list_append(_e_exehist->history, ei);
81 _e_exehist_limit();
82 e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
83 _e_exehist_unload_queue();
84}
85
86void
87e_exehist_clear(void)
88{
89 _e_exehist_load();
90 if (!_e_exehist) return;
91 _e_exehist_clear();
92 e_config_domain_save("exehist", _e_exehist_config_edd, _e_exehist);
93 _e_exehist_unload_queue();
94}
95
96int
97e_exehist_popularity_get(const char *exe)
98{
99 Evas_List *l;
100 int count = 0;
101
102 _e_exehist_load();
103 if (!_e_exehist) return;
104 for (l = _e_exehist->history; l; l = l->next)
105 {
106 E_Exehist_Item *ei;
107
108 ei = l->data;
109 if ((ei->exe) && (!strcmp(exe, ei->exe))) count++;
110 }
111 return count;
112}
113
114double
115e_exehist_newest_run_get(const char *exe)
116{
117 Evas_List *l;
118
119 _e_exehist_load();
120 if (!_e_exehist) return;
121 for (l = evas_list_last(_e_exehist->history); l; l = l->prev)
122 {
123 E_Exehist_Item *ei;
124
125 ei = l->data;
126 if ((ei->exe) && (!strcmp(exe, ei->exe))) return ei->exetime;
127 }
128 return 0.0;
129}
130
131/* local subsystem functions */
132static void
133_e_exehist_unload_queue(void)
134{
135 if (_e_exehist_unload_timer) ecore_timer_del(_e_exehist_unload_timer);
136 _e_exehist_unload_timer = ecore_timer_add(2.0, _e_exehist_cb_unload, NULL);
137}
138
139static void
140_e_exehist_load(void)
141{
142 if (!_e_exehist)
143 _e_exehist = e_config_domain_load("exehist", _e_exehist_config_edd);
144 if (!_e_exehist)
145 _e_exehist = E_NEW(E_Exehist, 1);
146}
147
148static void
149_e_exehist_clear(void)
150{
151 if (_e_exehist)
152 {
153 while (_e_exehist->history)
154 {
155 E_Exehist_Item *ei;
156
157 ei = _e_exehist->history->data;
158 if (ei->exe) evas_stringshare_del(ei->exe);
159 if (ei->launch_method) evas_stringshare_del(ei->launch_method);
160 free(ei);
161 _e_exehist->history = evas_list_remove_list(_e_exehist->history, _e_exehist->history);
162 }
163 }
164}
165
166static void
167_e_exehist_unload(void)
168{
169 _e_exehist_clear();
170 E_FREE(_e_exehist);
171}
172
173static void
174_e_exehist_limit(void)
175{
176 /* go from first item in hist on and either delete all items before a
177 * specific timestamp, or if the list count > limit then delete items
178 */
179}
180
181static int
182_e_exehist_cb_unload(void *data)
183{
184 _e_exehist_unload();
185 _e_exehist_unload_timer = NULL;
186 return 0;
187}
diff --git a/src/bin/e_exehist.h b/src/bin/e_exehist.h
new file mode 100644
index 000000000..3559eb848
--- /dev/null
+++ b/src/bin/e_exehist.h
@@ -0,0 +1,22 @@
1/*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4#ifdef E_TYPEDEFS
5
6#else
7#ifndef E_EXEHIST_H
8#define E_EXEHIST_H
9
10EAPI int e_exehist_init(void);
11EAPI int e_exehist_shutdown(void);
12
13EAPI void e_exehist_add(const char *launch_method, const char *exe);
14EAPI void e_exehist_clear(void);
15EAPI int e_exehist_popularity_get(const char *exe);
16EAPI double e_exehist_newest_run_get(const char *exe);
17 /*
18EAPI double e_exehist_last_run_get(const char *exe);
19*/
20
21#endif
22#endif
diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h
index 13eb01505..c16c95d49 100644
--- a/src/bin/e_includes.h
+++ b/src/bin/e_includes.h
@@ -106,3 +106,4 @@
106#include "e_deskpreview.h" 106#include "e_deskpreview.h"
107#include "e_exebuf.h" 107#include "e_exebuf.h"
108#include "e_int_config_modules.h" 108#include "e_int_config_modules.h"
109#include "e_exehist.h"
diff --git a/src/bin/e_int_config_window_display.c b/src/bin/e_int_config_window_display.c
index 9edd2173e..707a73a14 100644
--- a/src/bin/e_int_config_window_display.c
+++ b/src/bin/e_int_config_window_display.c
@@ -63,7 +63,7 @@ _fill_data(CFData *cfdata)
63 cfdata->border_shade_transition = e_config->border_shade_transition; 63 cfdata->border_shade_transition = e_config->border_shade_transition;
64 cfdata->border_shade_speed = e_config->border_shade_speed; 64 cfdata->border_shade_speed = e_config->border_shade_speed;
65 if (cfdata->move_info_visible || 65 if (cfdata->move_info_visible ||
66 cfdata->resize_info_follows) cfdata->move_resize_info = 1; 66 cfdata->resize_info_visible) cfdata->move_resize_info = 1;
67 if (cfdata->border_shade_animate) cfdata->animate_shading = 1; 67 if (cfdata->border_shade_animate) cfdata->animate_shading = 1;
68 cfdata->placement = cfdata->window_placement_policy; 68 cfdata->placement = cfdata->window_placement_policy;
69} 69}
@@ -99,6 +99,11 @@ _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
99 e_config->move_info_visible = 1; 99 e_config->move_info_visible = 1;
100 e_config->resize_info_visible = 1; 100 e_config->resize_info_visible = 1;
101 } 101 }
102 else
103 {
104 e_config->move_info_visible = 0;
105 e_config->resize_info_visible = 0;
106 }
102 e_config->window_placement_policy = cfdata->placement; 107 e_config->window_placement_policy = cfdata->placement;
103 e_config->border_shade_animate = cfdata->animate_shading; 108 e_config->border_shade_animate = cfdata->animate_shading;
104 e_config_save_queue(); 109 e_config_save_queue();
diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c
index b1e804d8e..b4eed84b6 100644
--- a/src/bin/e_int_menus.c
+++ b/src/bin/e_int_menus.c
@@ -12,7 +12,7 @@ struct _Main_Data
12 E_Menu *apps; 12 E_Menu *apps;
13 E_Menu *desktops; 13 E_Menu *desktops;
14 E_Menu *clients; 14 E_Menu *clients;
15 //E_Menu *modules; 15 E_Menu *modules;
16 E_Menu *gadgets; 16 E_Menu *gadgets;
17 E_Menu *themes; 17 E_Menu *themes;
18 E_Menu *config; 18 E_Menu *config;
@@ -85,14 +85,13 @@ e_int_menus_main_new(void)
85 85
86 mi = e_menu_item_new(m); 86 mi = e_menu_item_new(m);
87 e_menu_item_separator_set(mi, 1); 87 e_menu_item_separator_set(mi, 1);
88 /* 88
89 subm = e_module_menu_new(); 89 subm = e_module_menu_new();
90 dat->modules = subm; 90 dat->modules = subm;
91 mi = e_menu_item_new(m); 91 mi = e_menu_item_new(m);
92 e_menu_item_label_set(mi, _("Modules")); 92 e_menu_item_label_set(mi, _("Modules"));
93 e_util_menu_item_edje_icon_set(mi, "enlightenment/modules"); 93 e_util_menu_item_edje_icon_set(mi, "enlightenment/modules");
94 e_menu_item_submenu_set(mi, subm); 94 e_menu_item_submenu_set(mi, subm);
95 */
96 95
97 subm = e_int_menus_desktops_new(); 96 subm = e_int_menus_desktops_new();
98 dat->desktops = subm; 97 dat->desktops = subm;
@@ -346,7 +345,7 @@ _e_int_menus_main_del_hook(void *obj)
346 if (dat) 345 if (dat)
347 { 346 {
348 e_object_del(E_OBJECT(dat->apps)); 347 e_object_del(E_OBJECT(dat->apps));
349/* e_object_del(E_OBJECT(dat->modules));*/ 348 e_object_del(E_OBJECT(dat->modules));
350 e_object_del(E_OBJECT(dat->desktops)); 349 e_object_del(E_OBJECT(dat->desktops));
351 e_object_del(E_OBJECT(dat->clients)); 350 e_object_del(E_OBJECT(dat->clients));
352 e_object_del(E_OBJECT(dat->gadgets)); 351 e_object_del(E_OBJECT(dat->gadgets));
@@ -513,6 +512,7 @@ _e_int_menus_apps_run(void *data, E_Menu *m, E_Menu_Item *mi)
513 512
514 a = data; 513 a = data;
515 e_zone_app_exec(m->zone, a); 514 e_zone_app_exec(m->zone, a);
515 e_exehist_add("menu/apps", a->exe);
516} 516}
517 517
518static void 518static void
diff --git a/src/bin/e_ipc_handlers.h b/src/bin/e_ipc_handlers.h
index 53f75abbf..1790822b5 100644
--- a/src/bin/e_ipc_handlers.h
+++ b/src/bin/e_ipc_handlers.h
@@ -29,7 +29,7 @@ if (e->data) { \
29 char *__str = NULL; \ 29 char *__str = NULL; \
30 if (e_ipc_codec_str_dec(e->data, e->size, &__str)) { 30 if (e_ipc_codec_str_dec(e->data, e->size, &__str)) {
31# define END_STRING(__str) \ 31# define END_STRING(__str) \
32 free(__str); \ 32 if (__str) free(__str); \
33 } \ 33 } \
34} \ 34} \
35break; 35break;
@@ -4426,7 +4426,12 @@ break;
4426 REQ_STRING(params[0], HDL); 4426 REQ_STRING(params[0], HDL);
4427#elif (TYPE == E_WM_IN) 4427#elif (TYPE == E_WM_IN)
4428 STRING(s, HDL); 4428 STRING(s, HDL);
4429 if (e_theme_transition_find(s)) 4429 if (!s)
4430 {
4431 if (e_config->transition_start) evas_stringshare_del(e_config->transition_start);
4432 e_config->transition_start = NULL;
4433 }
4434 if ((s) && (e_theme_transition_find(s)))
4430 { 4435 {
4431 if (e_config->transition_start) evas_stringshare_del(e_config->transition_start); 4436 if (e_config->transition_start) evas_stringshare_del(e_config->transition_start);
4432 e_config->transition_start = NULL; 4437 e_config->transition_start = NULL;
@@ -4471,13 +4476,18 @@ break;
4471 REQ_STRING(params[0], HDL); 4476 REQ_STRING(params[0], HDL);
4472#elif (TYPE == E_WM_IN) 4477#elif (TYPE == E_WM_IN)
4473 STRING(s, HDL); 4478 STRING(s, HDL);
4474 if (e_theme_transition_find(s)) 4479 if (!s)
4480 {
4481 if (e_config->transition_desk) evas_stringshare_del(e_config->transition_desk);
4482 e_config->transition_desk = NULL;
4483 }
4484 if ((s) && (e_theme_transition_find(s)))
4475 { 4485 {
4476 if (e_config->transition_desk) evas_stringshare_del(e_config->transition_desk); 4486 if (e_config->transition_desk) evas_stringshare_del(e_config->transition_desk);
4477 e_config->transition_desk = NULL; 4487 e_config->transition_desk = NULL;
4478 if (s) e_config->transition_desk = evas_stringshare_add(s); 4488 if (s) e_config->transition_desk = evas_stringshare_add(s);
4479 SAVE;
4480 } 4489 }
4490 SAVE;
4481 END_STRING(s); 4491 END_STRING(s);
4482#elif (TYPE == E_REMOTE_IN) 4492#elif (TYPE == E_REMOTE_IN)
4483#endif 4493#endif
@@ -4516,7 +4526,12 @@ break;
4516 REQ_STRING(params[0], HDL); 4526 REQ_STRING(params[0], HDL);
4517#elif (TYPE == E_WM_IN) 4527#elif (TYPE == E_WM_IN)
4518 STRING(s, HDL); 4528 STRING(s, HDL);
4519 if (e_theme_transition_find(s)) 4529 if (!s)
4530 {
4531 if (e_config->transition_change) evas_stringshare_del(e_config->transition_change);
4532 e_config->transition_change = NULL;
4533 }
4534 if ((s) && (e_theme_transition_find(s)))
4520 { 4535 {
4521 if (e_config->transition_change) evas_stringshare_del(e_config->transition_change); 4536 if (e_config->transition_change) evas_stringshare_del(e_config->transition_change);
4522 e_config->transition_change = NULL; 4537 e_config->transition_change = NULL;
diff --git a/src/bin/e_main.c b/src/bin/e_main.c
index f4a9f2e41..bc5345d45 100644
--- a/src/bin/e_main.c
+++ b/src/bin/e_main.c
@@ -767,6 +767,7 @@ _e_main_screens_init(void)
767 if (!e_desk_init()) return 0; 767 if (!e_desk_init()) return 0;
768 if (!e_gadman_init()) return 0; 768 if (!e_gadman_init()) return 0;
769 if (!e_menu_init()) return 0; 769 if (!e_menu_init()) return 0;
770 if (!e_exehist_init()) return 0;
770 771
771 num = 0; 772 num = 0;
772 roots = ecore_x_window_root_list(&num); 773 roots = ecore_x_window_root_list(&num);
@@ -824,6 +825,7 @@ _e_main_screens_shutdown(void)
824 e_win_shutdown(); 825 e_win_shutdown();
825 e_border_shutdown(); 826 e_border_shutdown();
826 e_focus_shutdown(); 827 e_focus_shutdown();
828 e_exehist_shutdown();
827 e_menu_shutdown(); 829 e_menu_shutdown();
828 e_gadman_shutdown(); 830 e_gadman_shutdown();
829 e_desk_shutdown(); 831 e_desk_shutdown();
diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c
index 7654ddeb7..c00142dbe 100644
--- a/src/bin/e_menu.c
+++ b/src/bin/e_menu.c
@@ -1428,6 +1428,7 @@ _e_menu_items_layout_update(E_Menu *m)
1428static void 1428static void
1429_e_menu_item_unrealize(E_Menu_Item *mi) 1429_e_menu_item_unrealize(E_Menu_Item *mi)
1430{ 1430{
1431 e_box_freeze(mi->container_object);
1431 if (mi->separator_object) evas_object_del(mi->separator_object); 1432 if (mi->separator_object) evas_object_del(mi->separator_object);
1432 mi->separator_object = NULL; 1433 mi->separator_object = NULL;
1433 if (mi->bg_object) evas_object_del(mi->bg_object); 1434 if (mi->bg_object) evas_object_del(mi->bg_object);
@@ -1454,9 +1455,11 @@ _e_menu_unrealize(E_Menu *m)
1454 Evas_List *l; 1455 Evas_List *l;
1455 1456
1456 if (!m->realized) return; 1457 if (!m->realized) return;
1458 evas_event_freeze(m->evas);
1457 e_container_shape_hide(m->shape); 1459 e_container_shape_hide(m->shape);
1458 e_object_del(E_OBJECT(m->shape)); 1460 e_object_del(E_OBJECT(m->shape));
1459 m->shape = NULL; 1461 m->shape = NULL;
1462 e_box_freeze(m->container_object);
1460 for (l = m->items; l; l = l->next) 1463 for (l = m->items; l; l = l->next)
1461 { 1464 {
1462 E_Menu_Item *mi; 1465 E_Menu_Item *mi;
@@ -2057,6 +2060,8 @@ _e_menu_item_ensure_onscreen(E_Menu_Item *mi)
2057 int x, y, w, h; 2060 int x, y, w, h;
2058 int dx, dy; 2061 int dx, dy;
2059 2062
2063 if (!mi->menu) return;
2064 if (!mi->menu->zone) return;
2060 x = mi->x + mi->menu->cur.x; 2065 x = mi->x + mi->menu->cur.x;
2061 y = mi->y + mi->menu->cur.y; 2066 y = mi->y + mi->menu->cur.y;
2062 w = mi->w; 2067 w = mi->w;
@@ -2065,10 +2070,12 @@ _e_menu_item_ensure_onscreen(E_Menu_Item *mi)
2065 dy = 0; 2070 dy = 0;
2066 if ((x + w) > (mi->menu->zone->x + mi->menu->zone->w)) 2071 if ((x + w) > (mi->menu->zone->x + mi->menu->zone->w))
2067 dx = (mi->menu->zone->x + mi->menu->zone->w) - (x + w); 2072 dx = (mi->menu->zone->x + mi->menu->zone->w) - (x + w);
2073 else if (x < mi->menu->zone->x)
2074 dx = mi->menu->zone->x - x;
2068 if ((y + h) > (mi->menu->zone->y + mi->menu->zone->h)) 2075 if ((y + h) > (mi->menu->zone->y + mi->menu->zone->h))
2069 dy = (mi->menu->zone->y + mi->menu->zone->h) - (y + h); 2076 dy = (mi->menu->zone->y + mi->menu->zone->h) - (y + h);
2070 if (x < 0) dx = x; 2077 else if (y < mi->menu->zone->y)
2071 if (y < 0) dy = y; 2078 dy = mi->menu->zone->y - y;
2072 if ((dx != 0) || (dy != 0)) 2079 if ((dx != 0) || (dy != 0))
2073 _e_menu_scroll_by(dx, dy); 2080 _e_menu_scroll_by(dx, dy);
2074} 2081}
diff --git a/src/bin/e_module.c b/src/bin/e_module.c
index 6b45a56fc..2deebcc2f 100644
--- a/src/bin/e_module.c
+++ b/src/bin/e_module.c
@@ -27,6 +27,7 @@ static void _e_module_free(E_Module *m);
27static E_Menu *_e_module_control_menu_new(E_Module *mod); 27static E_Menu *_e_module_control_menu_new(E_Module *mod);
28static void _e_module_menu_free(void *obj); 28static void _e_module_menu_free(void *obj);
29static void _e_module_control_menu_about(void *data, E_Menu *m, E_Menu_Item *mi); 29static void _e_module_control_menu_about(void *data, E_Menu *m, E_Menu_Item *mi);
30static void _e_module_control_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi);
30static void _e_module_control_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi); 31static void _e_module_control_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi);
31static void _e_module_dialog_disable_show(char *title, char *body, E_Module *m); 32static void _e_module_dialog_disable_show(char *title, char *body, E_Module *m);
32static void _e_module_cb_dialog_disable(void *data, E_Dialog *dia); 33static void _e_module_cb_dialog_disable(void *data, E_Dialog *dia);
@@ -378,7 +379,8 @@ e_module_menu_new(void)
378 379
379 mod = l->data; 380 mod = l->data;
380 mi = e_menu_item_new(m); 381 mi = e_menu_item_new(m);
381 if ((mod->api) && (mod->api->name)) e_menu_item_label_set(mi, mod->api->name); 382 if ((mod->api) && (mod->api->name))
383 e_menu_item_label_set(mi, mod->api->name);
382 else e_menu_item_label_set(mi, mod->name); 384 else e_menu_item_label_set(mi, mod->name);
383 if (mod->edje_icon_file) 385 if (mod->edje_icon_file)
384 { 386 {
@@ -483,14 +485,14 @@ _e_module_control_menu_new(E_Module *mod)
483 if (mod->enabled) e_menu_item_toggle_set(mi, 1); 485 if (mod->enabled) e_menu_item_toggle_set(mi, 1);
484 e_menu_item_callback_set(mi, _e_module_control_menu_enabled, mod); 486 e_menu_item_callback_set(mi, _e_module_control_menu_enabled, mod);
485 487
486 if (mod->config_menu) 488 if (mod->func.config)
487 { 489 {
488 mi = e_menu_item_new(m); 490 mi = e_menu_item_new(m);
489 e_menu_item_separator_set(mi, 1); 491 e_menu_item_separator_set(mi, 1);
490 492
491 mi = e_menu_item_new(m); 493 mi = e_menu_item_new(m);
492 e_menu_item_label_set(mi, _("Configuration")); 494 e_menu_item_label_set(mi, _("Configuration"));
493 e_menu_item_submenu_set(mi, mod->config_menu); 495 e_menu_item_callback_set(mi, _e_module_control_menu_configuration, mod);
494 } 496 }
495 return m; 497 return m;
496} 498}
@@ -522,6 +524,15 @@ _e_module_control_menu_about(void *data, E_Menu *m, E_Menu_Item *mi)
522} 524}
523 525
524static void 526static void
527_e_module_control_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
528{
529 E_Module *mod;
530
531 mod = data;
532 mod->func.config(mod);
533}
534
535static void
525_e_module_control_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi) 536_e_module_control_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi)
526{ 537{
527 E_Module *mod; 538 E_Module *mod;
diff --git a/src/bin/e_module.h b/src/bin/e_module.h
index c42213d37..f483ac713 100644
--- a/src/bin/e_module.h
+++ b/src/bin/e_module.h
@@ -30,7 +30,7 @@ struct _E_Module
30 int (*save) (E_Module *m); 30 int (*save) (E_Module *m);
31 int (*info) (E_Module *m); 31 int (*info) (E_Module *m);
32 int (*about) (E_Module *m); 32 int (*about) (E_Module *m);
33 int (*config) (E_Module *m); 33 int (*config) (E_Module *m);
34 } func; 34 } func;
35 35
36 unsigned char enabled : 1; 36 unsigned char enabled : 1;
diff --git a/src/bin/e_object.h b/src/bin/e_object.h
index 84f08a793..13b69d8af 100644
--- a/src/bin/e_object.h
+++ b/src/bin/e_object.h
@@ -30,18 +30,18 @@
30#define E_OBJECT_DEL_SET(x, del_func) e_object_del_func_set(E_OBJECT(x), E_OBJECT_CLEANUP_FUNC(del_func)) 30#define E_OBJECT_DEL_SET(x, del_func) e_object_del_func_set(E_OBJECT(x), E_OBJECT_CLEANUP_FUNC(del_func))
31 31
32#ifdef OBJECT_PARANOIA_CHECK 32#ifdef OBJECT_PARANOIA_CHECK
33# define E_OBJECT_CHECK(x) do {if (e_object_error(E_OBJECT(x))) return;} while (0) 33# define E_OBJECT_CHECK(x) do {if (e_object_error(E_OBJECT(x))) return;} while (0)
34# define E_OBJECT_CHECK_RETURN(x, ret) do {if (e_object_error(E_OBJECT(x))) return ret;} while (0) 34# define E_OBJECT_CHECK_RETURN(x, ret) do {if (e_object_error(E_OBJECT(x))) return ret;} while (0)
35# define E_OBJECT_TYPE_CHECK(x, tp) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0) 35# define E_OBJECT_TYPE_CHECK(x, tp) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0)
36# define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret) do {if ((E_OBJECT(x)->type) != tp) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0) 36# define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret) do {if ((E_OBJECT(x)->type) != tp) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0)
37# define E_OBJECT_IF_NOT_TYPE(x, tp) if (E_OBJECT(x)->type != (tp)) 37# define E_OBJECT_IF_NOT_TYPE(x, tp) if (E_OBJECT(x)->type != (tp))
38#else 38#else
39# ifdef OBJECT_CHECK 39# ifdef OBJECT_CHECK
40# define E_OBJECT_CHECK(x) do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return;} while (0) 40# define E_OBJECT_CHECK(x) do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return;} while (0)
41# define E_OBJECT_CHECK_RETURN(x, ret) do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return ret;} while (0) 41# define E_OBJECT_CHECK_RETURN(x, ret) do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return ret;} while (0)
42# define E_OBJECT_TYPE_CHECK(x, tp) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0) 42# define E_OBJECT_TYPE_CHECK(x, tp) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0)
43# define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0) 43# define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret) do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0)
44# define E_OBJECT_IF_NOT_TYPE(x, type) if (E_OBJECT(x)->type != (type)) 44# define E_OBJECT_IF_NOT_TYPE(x, type) if (E_OBJECT(x)->type != (type))
45# else 45# else
46# define E_OBJECT_CHECK(x) 46# define E_OBJECT_CHECK(x)
47# define E_OBJECT_CHECK_RETURN(x, ret) 47# define E_OBJECT_CHECK_RETURN(x, ret)
diff --git a/src/bin/e_winlist.c b/src/bin/e_winlist.c
index 42c2949fb..5ccc5b298 100644
--- a/src/bin/e_winlist.c
+++ b/src/bin/e_winlist.c
@@ -719,7 +719,8 @@ _e_winlist_cb_key_up(void *data, int type, void *event)
719 Ecore_X_Event_Key_Up *ev; 719 Ecore_X_Event_Key_Up *ev;
720 720
721 ev = event; 721 ev = event;
722 if (ev->win != input_window) return 1; 722 if (!winlist) return 1;
723// if (ev->win != input_window) return 1;
723 if (hold_mod) 724 if (hold_mod)
724 { 725 {
725 if ((hold_mod & ECORE_X_MODIFIER_SHIFT) && (!strcmp(ev->keysymbol, "Shift_L"))) hold_count--; 726 if ((hold_mod & ECORE_X_MODIFIER_SHIFT) && (!strcmp(ev->keysymbol, "Shift_L"))) hold_count--;
diff --git a/src/modules/battery/e_mod_main.c b/src/modules/battery/e_mod_main.c
index b94e160a1..a162a4541 100644
--- a/src/modules/battery/e_mod_main.c
+++ b/src/modules/battery/e_mod_main.c
@@ -925,26 +925,60 @@ _battery_linux_apm_check(Battery *ef)
925 return stat; 925 return stat;
926} 926}
927 927
928
929/* hack for pmu */
930
931/* This function converts a string to an integer. Additionally to
932 * atoi() it converts also hexadecimal values
933 */
934static int
935axtoi(char *arg)
936{
937 int n, val, pwr=1, m, rc = 0;
938 char hex[9], c;
939
940 for (n = 0, m = 0; n < strlen(arg); n++)
941 {
942 if (arg[n] != ' ')
943 {
944 hex[m++] = c = toupper(arg[n]);
945 if ((m == sizeof(hex)) || (c < '0') || (c > 'F'))
946 return 0; /* overflow or invalid */
947 }
948 }
949 hex[m] = '\0'; /* terminate string */
950
951 for (n = 0; n < m; n++)
952 {
953 c = hex[m-n-1];
954 if ((c >= 'A') && (c <= 'F'))
955 val = c -'A' + 10;
956 else
957 val = c - '0';
958 rc = rc + val * pwr;
959 pwr *= 16;
960 }
961 return rc;
962}
963
928static Status * 964static Status *
929_battery_linux_powerbook_check(Battery *ef) 965_battery_linux_powerbook_check(Battery *ef)
930{ 966{
931 Ecore_List *bats; 967 Ecore_List *bats;
932 char buf[4096], buf2[4096]; 968 char buf[4096], buf2[4096];
933 char *name; 969 char *name;
934 970 char *token;
935 FILE *f; 971 FILE *f;
936
937 int discharging = 0; 972 int discharging = 0;
938 int charging = 0; 973 int charging = 0;
939
940 int battery = 0; 974 int battery = 0;
941 int ac = 0; 975 int ac = 0;
942 int seconds = 0; 976 int seconds = 0;
943 int hours, minutes; 977 int hours, minutes;
944 978 int flags;
979 int voltage;
945 int charge; 980 int charge;
946 int max_charge; 981 int max_charge;
947
948 Status *stat; 982 Status *stat;
949 983
950 stat = E_NEW(Status, 1); 984 stat = E_NEW(Status, 1);
@@ -980,24 +1014,44 @@ _battery_linux_powerbook_check(Battery *ef)
980 int time = 0; 1014 int time = 0;
981 int current = 0; 1015 int current = 0;
982 1016
1017 while (fgets (buf,sizeof (buf), f))
1018 {
1019 if ((token = strtok (buf, ":\n")))
1020 {
1021 if (!strncmp ("flags", token, 5))
1022 flags = axtoi (strtok (0, ":\n"));
1023 else if (!strncmp ("charge", token, 6))
1024 charge = atoi(strtok(0, ":\n"));
1025 else if (!strncmp ("max_charge", token, 9))
1026 max_charge += atoi (strtok(0,":\n"));
1027 else if (!strncmp ("current", token, 7))
1028 current = atoi (strtok(0, ":\n"));
1029 else if (!strncmp ("voltage", token, 7))
1030 voltage = atoi (strtok(0,":\n"));
1031 else if (!strncmp ("time rem.", token, 8))
1032 time = atoi (strtok(0, ":\n"));
1033 else
1034 strtok (0,":\n");
1035 }
1036 }
983 /* Skip flag; */ 1037 /* Skip flag; */
984 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1038// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
985 /* Read charge */ 1039 /* Read charge */
986 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1040// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
987 tmp = _battery_int_get(buf2); 1041// tmp = _battery_int_get(buf2);
988 charge += tmp; 1042// charge += tmp;
989 /* Read max charge */ 1043 /* Read max charge */
990 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1044// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
991 tmp = _battery_int_get(buf2); 1045// tmp = _battery_int_get(buf2);
992 max_charge += tmp; 1046// max_charge += tmp;
993 /* Read current */ 1047 /* Read current */
994 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1048// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
995 current = _battery_int_get(buf2); 1049// current = _battery_int_get(buf2);
996 /* Skip voltage */ 1050 /* Skip voltage */
997 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1051// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
998 /* Get time remaining */ 1052 /* Get time remaining */
999 fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0; 1053// fgets(buf2, sizeof(buf2), f); buf2[sizeof(buf2) - 1] = 0;
1000 time = _battery_int_get(buf2); 1054// time = _battery_int_get(buf2);
1001 fclose(f); 1055 fclose(f);
1002 1056
1003 battery++; 1057 battery++;
@@ -1057,6 +1111,7 @@ _battery_linux_powerbook_check(Battery *ef)
1057 } 1111 }
1058 } 1112 }
1059 stat->level = (double)charge / (double)max_charge; 1113 stat->level = (double)charge / (double)max_charge;
1114 if (stat->level > 1.0) stat->level = 1.0;
1060 snprintf(buf, sizeof(buf), "%.0f%%", stat->level * 100.0); 1115 snprintf(buf, sizeof(buf), "%.0f%%", stat->level * 100.0);
1061 stat->reading = strdup(buf); 1116 stat->reading = strdup(buf);
1062 snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes); 1117 snprintf(buf, sizeof(buf), "%i:%02i", hours, minutes);
diff --git a/src/modules/battery/e_mod_main.h b/src/modules/battery/e_mod_main.h
index caf2be6a1..2052c0cae 100644
--- a/src/modules/battery/e_mod_main.h
+++ b/src/modules/battery/e_mod_main.h
@@ -85,14 +85,15 @@ struct _Status
85 char *time; 85 char *time;
86}; 86};
87 87
88extern E_Module_Api e_modapi; 88EAPI extern E_Module_Api e_modapi;
89 89
90EAPI void *e_modapi_init (E_Module *m); 90EAPI void *e_modapi_init (E_Module *m);
91EAPI int e_modapi_shutdown (E_Module *m); 91EAPI int e_modapi_shutdown (E_Module *m);
92EAPI int e_modapi_save (E_Module *m); 92EAPI int e_modapi_save (E_Module *m);
93EAPI int e_modapi_info (E_Module *m); 93EAPI int e_modapi_info (E_Module *m);
94EAPI int e_modapi_about (E_Module *m); 94EAPI int e_modapi_about (E_Module *m);
95EAPI int e_modapi_config (E_Module *m);
95 96
96EAPI void _battery_face_cb_config_updated(Battery *bat); 97void _battery_face_cb_config_updated(Battery *bat);
97 98
98#endif 99#endif
diff --git a/src/modules/clock/e_mod_main.h b/src/modules/clock/e_mod_main.h
index f1e0c03de..65765e538 100644
--- a/src/modules/clock/e_mod_main.h
+++ b/src/modules/clock/e_mod_main.h
@@ -44,14 +44,15 @@ struct _Clock_Face
44 E_Gadman_Client *gmc; 44 E_Gadman_Client *gmc;
45}; 45};
46 46
47extern E_Module_Api e_modapi; 47EAPI extern E_Module_Api e_modapi;
48 48
49EAPI void *e_modapi_init (E_Module *module); 49EAPI void *e_modapi_init (E_Module *module);
50EAPI int e_modapi_shutdown (E_Module *module); 50EAPI int e_modapi_shutdown (E_Module *module);
51EAPI int e_modapi_save (E_Module *module); 51EAPI int e_modapi_save (E_Module *module);
52EAPI int e_modapi_info (E_Module *module); 52EAPI int e_modapi_info (E_Module *module);
53EAPI int e_modapi_about (E_Module *module); 53EAPI int e_modapi_about (E_Module *module);
54EAPI int e_modapi_config (E_Module *module);
54 55
55EAPI void _clock_face_cb_config_updated(void *data); 56void _clock_face_cb_config_updated(void *data);
56 57
57#endif 58#endif
diff --git a/src/modules/cpufreq/e_mod_main.h b/src/modules/cpufreq/e_mod_main.h
index 1c71b9e45..57baf322e 100644
--- a/src/modules/cpufreq/e_mod_main.h
+++ b/src/modules/cpufreq/e_mod_main.h
@@ -64,12 +64,13 @@ struct _Cpufreq_Face
64 E_Gadman_Client *gmc; 64 E_Gadman_Client *gmc;
65}; 65};
66 66
67extern E_Module_Api e_modapi; 67EAPI extern E_Module_Api e_modapi;
68 68
69EAPI void *e_modapi_init (E_Module *module); 69EAPI void *e_modapi_init (E_Module *module);
70EAPI int e_modapi_shutdown (E_Module *module); 70EAPI int e_modapi_shutdown (E_Module *module);
71EAPI int e_modapi_save (E_Module *module); 71EAPI int e_modapi_save (E_Module *module);
72EAPI int e_modapi_info (E_Module *module); 72EAPI int e_modapi_info (E_Module *module);
73EAPI int e_modapi_about (E_Module *module); 73EAPI int e_modapi_about (E_Module *module);
74EAPI int e_modapi_config (E_Module *module);
74 75
75#endif 76#endif
diff --git a/src/modules/dropshadow/e_mod_main.h b/src/modules/dropshadow/e_mod_main.h
index 1328f890e..a30382718 100644
--- a/src/modules/dropshadow/e_mod_main.h
+++ b/src/modules/dropshadow/e_mod_main.h
@@ -97,14 +97,15 @@ struct _Tilebuf_Tile
97 int redraw : 1; 97 int redraw : 1;
98}; 98};
99 99
100extern E_Module_Api e_modapi; 100EAPI extern E_Module_Api e_modapi;
101 101
102EAPI void *e_modapi_init (E_Module *m); 102EAPI void *e_modapi_init (E_Module *m);
103EAPI int e_modapi_shutdown (E_Module *m); 103EAPI int e_modapi_shutdown (E_Module *m);
104EAPI int e_modapi_save (E_Module *m); 104EAPI int e_modapi_save (E_Module *m);
105EAPI int e_modapi_info (E_Module *m); 105EAPI int e_modapi_info (E_Module *m);
106EAPI int e_modapi_about (E_Module *m); 106EAPI int e_modapi_about (E_Module *m);
107EAPI int e_modapi_config (E_Module *m);
107 108
108EAPI void _dropshadow_cb_config_updated(void *data); 109void _dropshadow_cb_config_updated(void *data);
109 110
110#endif 111#endif
diff --git a/src/modules/gadget_test/e_mod_main.h b/src/modules/gadget_test/e_mod_main.h
index 6c3d89998..02ab36b14 100644
--- a/src/modules/gadget_test/e_mod_main.h
+++ b/src/modules/gadget_test/e_mod_main.h
@@ -6,12 +6,14 @@ struct _Test
6{ 6{
7 int val; 7 int val;
8}; 8};
9extern E_Module_Api e_modapi; 9
10EAPI extern E_Module_Api e_modapi;
10 11
11EAPI void *e_modapi_init (E_Module *m); 12EAPI void *e_modapi_init (E_Module *m);
12EAPI int e_modapi_shutdown (E_Module *m); 13EAPI int e_modapi_shutdown (E_Module *m);
13EAPI int e_modapi_save (E_Module *m); 14EAPI int e_modapi_save (E_Module *m);
14EAPI int e_modapi_info (E_Module *m); 15EAPI int e_modapi_info (E_Module *m);
15EAPI int e_modapi_about (E_Module *m); 16EAPI int e_modapi_about (E_Module *m);
17/*EAPI int e_modapi_config (E_Module *module);*/
16 18
17#endif 19#endif
diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c
index 7a7363943..66c76e5c7 100644
--- a/src/modules/ibar/e_mod_main.c
+++ b/src/modules/ibar/e_mod_main.c
@@ -1222,7 +1222,11 @@ _ibar_icon_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
1222 ic = data; 1222 ic = data;
1223 if (ev->button == 1) 1223 if (ev->button == 1)
1224 { 1224 {
1225 if (!drag) e_zone_app_exec(ic->ibb->gmc->zone, ic->app); 1225 if (!drag)
1226 {
1227 e_zone_app_exec(ic->ibb->gmc->zone, ic->app);
1228 e_exehist_add("ibar", ic->app->exe);
1229 }
1226 drag = 0; 1230 drag = 0;
1227 drag_start = 0; 1231 drag_start = 0;
1228 } 1232 }
diff --git a/src/modules/ibar/e_mod_main.h b/src/modules/ibar/e_mod_main.h
index 156fa637f..b9640294d 100644
--- a/src/modules/ibar/e_mod_main.h
+++ b/src/modules/ibar/e_mod_main.h
@@ -87,14 +87,15 @@ struct _IBar_Icon
87 unsigned char raise_on_hilight : 1; 87 unsigned char raise_on_hilight : 1;
88}; 88};
89 89
90extern E_Module_Api e_modapi; 90EAPI extern E_Module_Api e_modapi;
91 91
92EAPI void *e_modapi_init (E_Module *m); 92EAPI void *e_modapi_init (E_Module *m);
93EAPI int e_modapi_shutdown (E_Module *m); 93EAPI int e_modapi_shutdown (E_Module *m);
94EAPI int e_modapi_save (E_Module *m); 94EAPI int e_modapi_save (E_Module *m);
95EAPI int e_modapi_info (E_Module *m); 95EAPI int e_modapi_info (E_Module *m);
96EAPI int e_modapi_about (E_Module *m); 96EAPI int e_modapi_about (E_Module *m);
97/* EAPI int e_modapi_config (E_Module *m); */
97 98
98EAPI void _ibar_bar_cb_config_updated(void *data); 99void _ibar_bar_cb_config_updated(void *data);
99 100
100#endif 101#endif
diff --git a/src/modules/ibox/e_mod_main.h b/src/modules/ibox/e_mod_main.h
index 4ab748248..6e5ed5a5b 100644
--- a/src/modules/ibox/e_mod_main.h
+++ b/src/modules/ibox/e_mod_main.h
@@ -84,14 +84,15 @@ struct _IBox_Icon
84 unsigned char raise_on_hilight : 1; 84 unsigned char raise_on_hilight : 1;
85}; 85};
86 86
87extern E_Module_Api e_modapi; 87EAPI extern E_Module_Api e_modapi;
88 88
89EAPI void *e_modapi_init (E_Module *m); 89EAPI void *e_modapi_init (E_Module *m);
90EAPI int e_modapi_shutdown (E_Module *m); 90EAPI int e_modapi_shutdown (E_Module *m);
91EAPI int e_modapi_save (E_Module *m); 91EAPI int e_modapi_save (E_Module *m);
92EAPI int e_modapi_info (E_Module *m); 92EAPI int e_modapi_info (E_Module *m);
93EAPI int e_modapi_about (E_Module *m); 93EAPI int e_modapi_about (E_Module *m);
94EAPI int e_modapi_config (E_Module *m);
94 95
95EAPI void _ibox_box_cb_config_updated(void *data); 96void _ibox_box_cb_config_updated(void *data);
96 97
97#endif 98#endif
diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h
index 8221c7859..662b3b33d 100644
--- a/src/modules/pager/e_mod_main.h
+++ b/src/modules/pager/e_mod_main.h
@@ -139,14 +139,15 @@ struct _Pager_Popup
139 Ecore_Timer *timer; 139 Ecore_Timer *timer;
140}; 140};
141 141
142extern E_Module_Api e_modapi; 142EAPI extern E_Module_Api e_modapi;
143 143
144EAPI void *e_modapi_init (E_Module *module); 144EAPI void *e_modapi_init (E_Module *module);
145EAPI int e_modapi_shutdown (E_Module *module); 145EAPI int e_modapi_shutdown (E_Module *module);
146EAPI int e_modapi_save (E_Module *module); 146EAPI int e_modapi_save (E_Module *module);
147EAPI int e_modapi_info (E_Module *module); 147EAPI int e_modapi_info (E_Module *module);
148EAPI int e_modapi_about (E_Module *module); 148EAPI int e_modapi_about (E_Module *module);
149EAPI int e_modapi_config (E_Module *module);
149 150
150EAPI void _pager_cb_config_updated(void *data); 151void _pager_cb_config_updated(void *data);
151 152
152#endif 153#endif
diff --git a/src/modules/randr/e_mod_main.h b/src/modules/randr/e_mod_main.h
index e2a139cc7..5ec4cb310 100644
--- a/src/modules/randr/e_mod_main.h
+++ b/src/modules/randr/e_mod_main.h
@@ -43,12 +43,13 @@ struct _Randr_Resolution
43 Ecore_X_Screen_Size prev, next; 43 Ecore_X_Screen_Size prev, next;
44}; 44};
45 45
46extern E_Module_Api e_modapi; 46EAPI extern E_Module_Api e_modapi;
47 47
48EAPI void *e_modapi_init (E_Module *m); 48EAPI void *e_modapi_init (E_Module *m);
49EAPI int e_modapi_shutdown (E_Module *m); 49EAPI int e_modapi_shutdown (E_Module *m);
50EAPI int e_modapi_save (E_Module *m); 50EAPI int e_modapi_save (E_Module *m);
51EAPI int e_modapi_info (E_Module *m); 51EAPI int e_modapi_info (E_Module *m);
52EAPI int e_modapi_about (E_Module *m); 52EAPI int e_modapi_about (E_Module *m);
53/* EAPI int e_modapi_config (E_Module *module); */
53 54
54#endif 55#endif
diff --git a/src/modules/start/e_mod_main.h b/src/modules/start/e_mod_main.h
index 9f5b28c28..b4acd80bf 100644
--- a/src/modules/start/e_mod_main.h
+++ b/src/modules/start/e_mod_main.h
@@ -38,12 +38,13 @@ struct _Start_Face
38 E_Gadman_Client *gmc; 38 E_Gadman_Client *gmc;
39}; 39};
40 40
41extern E_Module_Api e_modapi; 41EAPI extern E_Module_Api e_modapi;
42 42
43EAPI void *e_modapi_init (E_Module *m); 43EAPI void *e_modapi_init (E_Module *m);
44EAPI int e_modapi_shutdown (E_Module *m); 44EAPI int e_modapi_shutdown (E_Module *m);
45EAPI int e_modapi_save (E_Module *m); 45EAPI int e_modapi_save (E_Module *m);
46EAPI int e_modapi_info (E_Module *m); 46EAPI int e_modapi_info (E_Module *m);
47EAPI int e_modapi_about (E_Module *m); 47EAPI int e_modapi_about (E_Module *m);
48/* EAPI int e_modapi_config (E_Module *module); */
48 49
49#endif 50#endif
diff --git a/src/modules/temperature/e_mod_main.h b/src/modules/temperature/e_mod_main.h
index e0fe083b8..fafb8ae5c 100644
--- a/src/modules/temperature/e_mod_main.h
+++ b/src/modules/temperature/e_mod_main.h
@@ -58,13 +58,15 @@ struct _Temperature_Face
58 E_Gadman_Client *gmc; 58 E_Gadman_Client *gmc;
59}; 59};
60 60
61extern E_Module_Api e_modapi; 61EAPI extern E_Module_Api e_modapi;
62 62
63EAPI void *e_modapi_init (E_Module *m); 63EAPI void *e_modapi_init (E_Module *m);
64EAPI int e_modapi_shutdown (E_Module *m); 64EAPI int e_modapi_shutdown (E_Module *m);
65EAPI int e_modapi_save (E_Module *m); 65EAPI int e_modapi_save (E_Module *m);
66EAPI int e_modapi_info (E_Module *m); 66EAPI int e_modapi_info (E_Module *m);
67EAPI int e_modapi_about (E_Module *m); 67EAPI int e_modapi_about (E_Module *m);
68EAPI int e_modapi_config (E_Module *m);
69
70void _temperature_face_cb_config_updated(Temperature *temp);
68 71
69EAPI void _temperature_face_cb_config_updated(Temperature *temp);
70#endif 72#endif