summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-03-18 18:22:44 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-03-18 18:22:44 -0400
commitfa0100b05ac41af9f577fc098e0bc023468bf6a6 (patch)
treef357a727cff279f7da360d6e68c0b5a025924ea0
-rw-r--r--Makefile_illume-bluetooth.mk18
-rw-r--r--Makefile_illume-home-toggle.mk18
-rw-r--r--Makefile_illume-home.mk23
-rw-r--r--Makefile_illume-indicator.mk29
-rw-r--r--Makefile_illume-kbd-toggle.mk18
-rw-r--r--Makefile_illume-keyboard.mk58
-rw-r--r--Makefile_illume-mode-toggle.mk18
-rw-r--r--Makefile_illume-softkey.mk25
-rw-r--r--Makefile_illume2.mk67
-rw-r--r--illume-bluetooth/e-module-illume-bluetooth.edjbin0 -> 24672 bytes
-rw-r--r--illume-bluetooth/e_mod_main.c199
-rw-r--r--illume-bluetooth/module.desktop.in14
-rw-r--r--illume-home-toggle/e-module-illume-home-toggle.edjbin0 -> 12571 bytes
-rw-r--r--illume-home-toggle/e_mod_main.c134
-rw-r--r--illume-home-toggle/module.desktop.in13
-rw-r--r--illume-home/e-module-illume-home.edjbin0 -> 43016 bytes
-rw-r--r--illume-home/e_busycover.c91
-rw-r--r--illume-home/e_busycover.h26
-rw-r--r--illume-home/e_mod_config.c211
-rw-r--r--illume-home/e_mod_config.h27
-rw-r--r--illume-home/e_mod_main.c753
-rw-r--r--illume-home/e_mod_main.h6
-rw-r--r--illume-home/module.desktop.in14
-rw-r--r--illume-indicator/.gitignore1
-rw-r--r--illume-indicator/e_mod_config.c51
-rw-r--r--illume-indicator/e_mod_config.h20
-rw-r--r--illume-indicator/e_mod_ind_win.c537
-rw-r--r--illume-indicator/e_mod_ind_win.h31
-rw-r--r--illume-indicator/e_mod_main.c105
-rw-r--r--illume-indicator/e_mod_main.h6
-rw-r--r--illume-indicator/e_mod_notify.c262
-rw-r--r--illume-indicator/e_mod_notify.h23
-rw-r--r--illume-indicator/module.desktop.in14
-rw-r--r--illume-kbd-toggle/e-module-illume-kbd-toggle.edjbin0 -> 14225 bytes
-rw-r--r--illume-kbd-toggle/e_mod_main.c232
-rw-r--r--illume-kbd-toggle/module.desktop.in15
-rw-r--r--illume-keyboard/.gitignore1
-rw-r--r--illume-keyboard/dicts/English_US.dic98342
-rw-r--r--illume-keyboard/dicts/English_US_Small.dic5001
-rw-r--r--illume-keyboard/e_kbd_buf.c567
-rw-r--r--illume-keyboard/e_kbd_buf.h73
-rw-r--r--illume-keyboard/e_kbd_dict.c864
-rw-r--r--illume-keyboard/e_kbd_dict.h61
-rw-r--r--illume-keyboard/e_kbd_int.c1868
-rw-r--r--illume-keyboard/e_kbd_int.h132
-rw-r--r--illume-keyboard/e_kbd_send.c38
-rw-r--r--illume-keyboard/e_kbd_send.h15
-rw-r--r--illume-keyboard/e_mod_config.c312
-rw-r--r--illume-keyboard/e_mod_config.h35
-rw-r--r--illume-keyboard/e_mod_main.c126
-rw-r--r--illume-keyboard/e_mod_main.h6
-rw-r--r--illume-keyboard/keyboards/Default.kbd143
-rw-r--r--illume-keyboard/keyboards/Numbers.kbd120
-rw-r--r--illume-keyboard/keyboards/Terminal.kbd244
-rw-r--r--illume-keyboard/keyboards/alpha.pngbin0 -> 1492 bytes
-rw-r--r--illume-keyboard/keyboards/backspace.pngbin0 -> 289 bytes
-rw-r--r--illume-keyboard/keyboards/down.pngbin0 -> 276 bytes
-rw-r--r--illume-keyboard/keyboards/enter.pngbin0 -> 286 bytes
-rw-r--r--illume-keyboard/keyboards/ignore_built_in_keyboards1
-rw-r--r--illume-keyboard/keyboards/left.pngbin0 -> 271 bytes
-rw-r--r--illume-keyboard/keyboards/numeric.pngbin0 -> 1550 bytes
-rw-r--r--illume-keyboard/keyboards/qwerty.pngbin0 -> 1716 bytes
-rw-r--r--illume-keyboard/keyboards/right.pngbin0 -> 274 bytes
-rw-r--r--illume-keyboard/keyboards/shift.pngbin0 -> 266 bytes
-rw-r--r--illume-keyboard/keyboards/tab.pngbin0 -> 306 bytes
-rw-r--r--illume-keyboard/keyboards/up.pngbin0 -> 262 bytes
-rw-r--r--illume-keyboard/module.desktop.in13
-rw-r--r--illume-mode-toggle/e-module-illume-mode-toggle.edjbin0 -> 12275 bytes
-rw-r--r--illume-mode-toggle/e_mod_main.c202
-rw-r--r--illume-mode-toggle/module.desktop.in12
-rw-r--r--illume-softkey/.gitignore1
-rw-r--r--illume-softkey/e_mod_config.c51
-rw-r--r--illume-softkey/e_mod_config.h20
-rw-r--r--illume-softkey/e_mod_main.c81
-rw-r--r--illume-softkey/e_mod_main.h6
-rw-r--r--illume-softkey/e_mod_sft_win.c462
-rw-r--r--illume-softkey/e_mod_sft_win.h23
-rw-r--r--illume-softkey/module.desktop.in11
-rw-r--r--illume2/.gitignore3
-rw-r--r--illume2/doc/Doxyfile1349
-rw-r--r--illume2/doc/e.css273
-rw-r--r--illume2/doc/foot.html18
-rw-r--r--illume2/doc/head.html69
-rw-r--r--illume2/doc/illume.dox.in88
-rw-r--r--illume2/doc/img/e.pngbin0 -> 30052 bytes
-rw-r--r--illume2/doc/img/edoxy.css486
-rw-r--r--illume2/doc/img/foot_bg.pngbin0 -> 173 bytes
-rw-r--r--illume2/doc/img/head_bg.pngbin0 -> 214 bytes
-rw-r--r--illume2/doc/img/header_menu_background.pngbin0 -> 192 bytes
-rw-r--r--illume2/doc/img/header_menu_background_last.pngbin0 -> 637 bytes
-rw-r--r--illume2/doc/img/header_menu_current_background.pngbin0 -> 1200 bytes
-rw-r--r--illume2/doc/img/header_menu_unselected_background.pngbin0 -> 1596 bytes
-rw-r--r--illume2/doc/img/logo.pngbin0 -> 3825 bytes
-rw-r--r--illume2/e_illume.c1008
-rw-r--r--illume2/e_illume.h379
-rw-r--r--illume2/e_illume_private.h24
-rw-r--r--illume2/e_mod_config.c259
-rw-r--r--illume2/e_mod_config_animation.c136
-rw-r--r--illume2/e_mod_config_policy.c172
-rw-r--r--illume2/e_mod_config_windows.c219
-rw-r--r--illume2/e_mod_kbd.c687
-rw-r--r--illume2/e_mod_kbd_device.c162
-rw-r--r--illume2/e_mod_main.c155
-rw-r--r--illume2/e_mod_main.h63
-rw-r--r--illume2/e_mod_policy.c536
-rw-r--r--illume2/e_mod_quickpanel.c636
-rw-r--r--illume2/e_mod_select_window.c244
-rw-r--r--illume2/keyboards/ignore_built_in_keyboards1
-rw-r--r--illume2/module.desktop.in12
-rw-r--r--illume2/policies/illume/illume.c60
-rw-r--r--illume2/policies/illume/illume.h9
-rw-r--r--illume2/policies/illume/policy.c1890
-rw-r--r--illume2/policies/illume/policy.h36
-rw-r--r--illume2/policies/tablet/policy.c1515
-rw-r--r--illume2/policies/tablet/policy.h37
-rw-r--r--illume2/policies/tablet/tablet.c60
-rw-r--r--illume2/policies/tablet/tablet.h9
117 files changed, 122485 insertions, 0 deletions
diff --git a/Makefile_illume-bluetooth.mk b/Makefile_illume-bluetooth.mk
new file mode 100644
index 0000000..a8672fd
--- /dev/null
+++ b/Makefile_illume-bluetooth.mk
@@ -0,0 +1,18 @@
1if USE_MODULE_ILLUME-BLUETOOTH
2illume_bluetoothdir = $(MDIR)/illume-bluetooth
3illume_bluetooth_DATA = src/modules/illume-bluetooth/e-module-illume-bluetooth.edj \
4src/modules/illume-bluetooth/module.desktop
5
6
7illume_bluetoothpkgdir = $(MDIR)/illume-bluetooth/$(MODULE_ARCH)
8illume_bluetoothpkg_LTLIBRARIES = src/modules/illume-bluetooth/module.la
9
10src_modules_illume_bluetooth_module_la_LIBADD = $(MOD_LIBS)
11src_modules_illume_bluetooth_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
12src_modules_illume_bluetooth_module_la_LDFLAGS = $(MOD_LDFLAGS)
13src_modules_illume_bluetooth_module_la_SOURCES = src/modules/illume-bluetooth/e_mod_main.c
14
15PHONIES += illume_bluetooth install-illume_bluetooth
16illume_bluetooth: $(illume_bluetoothpkg_LTLIBRARIES) $(illume_bluetooth_DATA)
17install-illume_bluetooth: install-illume_bluetoothDATA install-illume_bluetoothpkgLTLIBRARIES
18endif
diff --git a/Makefile_illume-home-toggle.mk b/Makefile_illume-home-toggle.mk
new file mode 100644
index 0000000..e37aea7
--- /dev/null
+++ b/Makefile_illume-home-toggle.mk
@@ -0,0 +1,18 @@
1if USE_MODULE_ILLUME-HOME-TOGGLE
2illume_home_toggledir = $(MDIR)/illume-home-toggle
3illume_home_toggle_DATA = src/modules/illume-home-toggle/e-module-illume-home-toggle.edj \
4 src/modules/illume-home-toggle/module.desktop
5
6
7illume_home_togglepkgdir = $(MDIR)/illume-home-toggle/$(MODULE_ARCH)
8illume_home_togglepkg_LTLIBRARIES = src/modules/illume-home-toggle/module.la
9
10src_modules_illume_home_toggle_module_la_LIBADD = $(MOD_LIBS)
11src_modules_illume_home_toggle_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
12src_modules_illume_home_toggle_module_la_LDFLAGS = $(MOD_LDFLAGS)
13src_modules_illume_home_toggle_module_la_SOURCES = src/modules/illume-home-toggle/e_mod_main.c
14
15PHONIES += illume_home_toggle install-illume_home_toggle
16illume_home_toggle: $(illume_home_togglepkg_LTLIBRARIES) $(illume_home_toggle_DATA)
17install-illume_home_toggle: install-illume_home_toggleDATA install-illume_home_togglepkgLTLIBRARIES
18endif
diff --git a/Makefile_illume-home.mk b/Makefile_illume-home.mk
new file mode 100644
index 0000000..08425df
--- /dev/null
+++ b/Makefile_illume-home.mk
@@ -0,0 +1,23 @@
1if USE_MODULE_ILLUME-HOME
2illume_homedir = $(MDIR)/illume-home
3illume_home_DATA = src/modules/illume-home/e-module-illume-home.edj \
4 src/modules/illume-home/module.desktop
5
6
7illume_homepkgdir = $(MDIR)/illume-home/$(MODULE_ARCH)
8illume_homepkg_LTLIBRARIES = src/modules/illume-home/module.la
9
10src_modules_illume_home_module_la_LIBADD = $(MOD_LIBS)
11src_modules_illume_home_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
12src_modules_illume_home_module_la_LDFLAGS = $(MOD_LDFLAGS)
13src_modules_illume_home_module_la_SOURCES = src/modules/illume-home/e_mod_main.c \
14src/modules/illume-home/e_mod_main.h \
15src/modules/illume-home/e_mod_config.c \
16src/modules/illume-home/e_mod_config.h \
17src/modules/illume-home/e_busycover.c \
18src/modules/illume-home/e_busycover.h
19
20PHONIES += illume_home install-illume_home
21illume_home: $(illume_homepkg_LTLIBRARIES) $(illume_home_DATA)
22install-illume_home: install-illume_homeDATA install-illume_homepkgLTLIBRARIES
23endif
diff --git a/Makefile_illume-indicator.mk b/Makefile_illume-indicator.mk
new file mode 100644
index 0000000..e7f5100
--- /dev/null
+++ b/Makefile_illume-indicator.mk
@@ -0,0 +1,29 @@
1if USE_MODULE_ILLUME-INDICATOR
2illume_indicatordir = $(MDIR)/illume-indicator
3illume_indicator_DATA = src/modules/illume-indicator/e-module-illume-indicator.edj \
4src/modules/illume-indicator/module.desktop
5 src/modules/illume-indicator/e-module-illume-indicator.edj
6
7illume_indicatorpkgdir = $(MDIR)/illume-indicator/$(MODULE_ARCH)
8illume_indicatorpkg_LTLIBRARIES = src/modules/illume-indicator/module.la
9
10src_modules_illume_indicator_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
11src_modules_illume_indicator_module_la_LDFLAGS = $(MOD_LDFLAGS)
12src_modules_illume_indicator_module_la_SOURCES = src/modules/illume-indicator/e_mod_main.c \
13 src/modules/illume-indicator/e_mod_main.h \
14 src/modules/illume-indicator/e_mod_config.c \
15 src/modules/illume-indicator/e_mod_config.h \
16 src/modules/illume-indicator/e_mod_ind_win.c \
17 src/modules/illume-indicator/e_mod_ind_win.h
18
19if HAVE_ENOTIFY
20src_modules_illume_indicator_module_la_SOURCES += src/modules/illume-indicator/e_mod_notify.c \
21 src/modules/illume-indicator/e_mod_notify.h
22endif
23
24src_modules_illume_indicator_module_la_LIBADD = $(MOD_LIBS) @ENOTIFY_LIBS@
25
26PHONIES += illume_indicator install-illume_indicator
27illume_indicator: $(illume_indicatorpkg_LTLIBRARIES) $(illume_indicator_DATA)
28install-illume_indicator: install-illume_indicatorDATA install-illume_indicatorpkgLTLIBRARIES
29endif
diff --git a/Makefile_illume-kbd-toggle.mk b/Makefile_illume-kbd-toggle.mk
new file mode 100644
index 0000000..09bcdf0
--- /dev/null
+++ b/Makefile_illume-kbd-toggle.mk
@@ -0,0 +1,18 @@
1if USE_MODULE_ILLUME-KBD-TOGGLE
2illume_kbd_toggledir = $(MDIR)/illume-kbd-toggle
3illume_kbd_toggle_DATA = src/modules/illume-kbd-toggle/e-module-illume-kbd-toggle.edj \
4 src/modules/illume-kbd-toggle/module.desktop
5
6
7illume_kbd_togglepkgdir = $(MDIR)/illume-kbd-toggle/$(MODULE_ARCH)
8illume_kbd_togglepkg_LTLIBRARIES = src/modules/illume-kbd-toggle/module.la
9
10src_modules_illume_kbd_toggle_module_la_LIBADD = $(MOD_LIBS)
11src_modules_illume_kbd_toggle_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
12src_modules_illume_kbd_toggle_module_la_LDFLAGS = $(MOD_LDFLAGS)
13src_modules_illume_kbd_toggle_module_la_SOURCES = src/modules/illume-kbd-toggle/e_mod_main.c
14
15PHONIES += illume_kbd_toggle install-illume_kbd_toggle
16illume_kbd_toggle: $(illume_kbd_togglepkg_LTLIBRARIES) $(illume_kbd_toggle_DATA)
17install-illume_kbd_toggle: install-illume_kbd_toggleDATA install-illume_kbd_togglepkgLTLIBRARIES
18endif
diff --git a/Makefile_illume-keyboard.mk b/Makefile_illume-keyboard.mk
new file mode 100644
index 0000000..8d80f8a
--- /dev/null
+++ b/Makefile_illume-keyboard.mk
@@ -0,0 +1,58 @@
1if USE_MODULE_ILLUME-KEYBOARD
2illume_keyboarddir = $(MDIR)/illume-keyboard
3illume_keyboard_DATA = src/modules/illume-keyboard/e-module-illume-keyboard.edj \
4 src/modules/illume-keyboard/module.desktop
5
6 src/modules/illume-keyboard/module.desktop.in
7
8
9# keyboards
10illumekeyboardsdir = $(MDIR)/illume-keyboard/keyboards
11illumekeyboards_DATA = src/modules/illume-keyboard/keyboards/ignore_built_in_keyboards \
12 src/modules/illume-keyboard/keyboards/Default.kbd \
13 src/modules/illume-keyboard/keyboards/alpha.png \
14 src/modules/illume-keyboard/keyboards/Numbers.kbd \
15 src/modules/illume-keyboard/keyboards/numeric.png \
16 src/modules/illume-keyboard/keyboards/Terminal.kbd \
17 src/modules/illume-keyboard/keyboards/qwerty.png \
18 src/modules/illume-keyboard/keyboards/up.png \
19 src/modules/illume-keyboard/keyboards/down.png \
20 src/modules/illume-keyboard/keyboards/left.png \
21 src/modules/illume-keyboard/keyboards/right.png \
22 src/modules/illume-keyboard/keyboards/shift.png \
23 src/modules/illume-keyboard/keyboards/tab.png \
24 src/modules/illume-keyboard/keyboards/enter.png \
25 src/modules/illume-keyboard/keyboards/backspace.png
26
27
28# dicts
29illumedictsdir = $(MDIR)/illume-keyboard/dicts
30illumedicts_DATA = src/modules/illume-keyboard/dicts/English_US.dic \
31 src/modules/illume-keyboard/dicts/English_US_Small.dic
32
33
34
35illume_keyboardpkgdir = $(MDIR)/illume-keyboard/$(MODULE_ARCH)
36illume_keyboardpkg_LTLIBRARIES = src/modules/illume-keyboard/module.la
37
38src_modules_illume_keyboard_module_la_LIBADD = $(MOD_LIBS)
39src_modules_illume_keyboard_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
40src_modules_illume_keyboard_module_la_LDFLAGS = $(MOD_LDFLAGS)
41src_modules_illume_keyboard_module_la_SOURCES = src/modules/illume-keyboard/e_mod_main.c \
42 src/modules/illume-keyboard/e_mod_main.h \
43 src/modules/illume-keyboard/e_kbd_int.c \
44 src/modules/illume-keyboard/e_kbd_int.h \
45 src/modules/illume-keyboard/e_kbd_dict.c \
46 src/modules/illume-keyboard/e_kbd_dict.h \
47 src/modules/illume-keyboard/e_kbd_buf.c \
48 src/modules/illume-keyboard/e_kbd_buf.h \
49 src/modules/illume-keyboard/e_kbd_send.c \
50 src/modules/illume-keyboard/e_kbd_send.h \
51 src/modules/illume-keyboard/e_mod_config.c \
52 src/modules/illume-keyboard/e_mod_config.h
53
54# TODO: incomplete
55PHONIES += illume_keyboard install-illume_keyboard
56illume_keyboard: $(illume_keyboardpkg_LTLIBRARIES) $(illume_keyboard_DATA)
57install-illume_keyboard: install-illume_keyboardDATA install-illume_keyboardpkgLTLIBRARIES
58endif
diff --git a/Makefile_illume-mode-toggle.mk b/Makefile_illume-mode-toggle.mk
new file mode 100644
index 0000000..616eb87
--- /dev/null
+++ b/Makefile_illume-mode-toggle.mk
@@ -0,0 +1,18 @@
1if USE_MODULE_ILLUME-MODE-TOGGLE
2illume_mode_toggledir = $(MDIR)/illume-mode-toggle
3illume_mode_toggle_DATA = src/modules/illume-mode-toggle/e-module-illume-mode-toggle.edj \
4 src/modules/illume-mode-toggle/module.desktop
5
6
7illume_mode_togglepkgdir = $(MDIR)/illume-mode-toggle/$(MODULE_ARCH)
8illume_mode_togglepkg_LTLIBRARIES = src/modules/illume-mode-toggle/module.la
9
10src_modules_illume_mode_toggle_module_la_LIBADD = $(MOD_LIBS)
11src_modules_illume_mode_toggle_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
12src_modules_illume_mode_toggle_module_la_LDFLAGS = $(MOD_LDFLAGS)
13src_modules_illume_mode_toggle_module_la_SOURCES = src/modules/illume-mode-toggle/e_mod_main.c
14
15PHONIES += illume_mode_toggle install-illume_mode_toggle
16illume_mode_toggle: $(illume_mode_togglepkg_LTLIBRARIES) $(illume_mode_toggle_DATA)
17install-illume_mode_toggle: install-illume_mode_toggleDATA install-illume_mode_togglepkgLTLIBRARIES
18endif
diff --git a/Makefile_illume-softkey.mk b/Makefile_illume-softkey.mk
new file mode 100644
index 0000000..ff8fe93
--- /dev/null
+++ b/Makefile_illume-softkey.mk
@@ -0,0 +1,25 @@
1if USE_MODULE_ILLUME-SOFTKEY
2illume_softkeydir = $(MDIR)/illume-softkey
3illume_softkey_DATA = src/modules/illume-softkey/e-module-illume-softkey.edj \
4 src/modules/illume-softkey/module.desktop
5
6 src/modules/illume-softkey/module.desktop.in
7
8
9illume_softkeypkgdir = $(MDIR)/illume-softkey/$(MODULE_ARCH)
10illume_softkeypkg_LTLIBRARIES = src/modules/illume-softkey/module.la
11
12src_modules_illume_softkey_module_la_LIBADD = $(MOD_LIBS)
13src_modules_illume_softkey_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
14src_modules_illume_softkey_module_la_LDFLAGS = $(MOD_LDFLAGS)
15src_modules_illume_softkey_module_la_SOURCES = src/modules/illume-softkey/e_mod_main.c \
16 src/modules/illume-softkey/e_mod_main.h \
17 src/modules/illume-softkey/e_mod_sft_win.c \
18 src/modules/illume-softkey/e_mod_sft_win.h \
19 src/modules/illume-softkey/e_mod_config.c \
20 src/modules/illume-softkey/e_mod_config.h
21
22PHONIES += illume_softkey install-illume_softkey
23illume_softkey: $(illume_softkeypkg_LTLIBRARIES) $(illume_softkey_DATA)
24install-illume_softkey: install-illume_softkeyDATA install-illume_softkeypkgLTLIBRARIES
25endif
diff --git a/Makefile_illume2.mk b/Makefile_illume2.mk
new file mode 100644
index 0000000..7408b9a
--- /dev/null
+++ b/Makefile_illume2.mk
@@ -0,0 +1,67 @@
1EXTRA_DIST += src/modules/illume2/module.desktop.in \
2src/modules/illume2/e-module-illume2.edj
3if USE_MODULE_ILLUME2
4illume2dir = $(MDIR)/illume2
5illume2_DATA = src/modules/illume2/e-module-illume2.edj \
6 src/modules/illume2/module.desktop
7
8 src/modules/illume2/module.desktop.in
9
10# keyboards
11illume2keyboardsdir = $(MDIR)/illume2/keyboards
12illume2keyboards_DATA = src/modules/illume2/keyboards/ignore_built_in_keyboards
13
14# policies
15## illume
16illume2policyillumedir = $(MDIR)/illume2/policies
17illume2policyillume_LTLIBRARIES = src/modules/illume2/policies/illume/illume.la
18ILLUME2POLICYCPPFLAGS = $(MOD_CPPFLAGS) -I$(top_srcdir)/src/modules/illume2
19
20src_modules_illume2_policies_illume_illume_la_CPPFLAGS = $(ILLUME2POLICYCPPFLAGS)
21src_modules_illume2_policies_illume_illume_la_LIBADD = $(MOD_LIBS)
22src_modules_illume2_policies_illume_illume_la_LDFLAGS = $(MOD_LDFLAGS)
23src_modules_illume2_policies_illume_illume_la_SOURCES = src/modules/illume2/policies/illume/policy.c \
24 src/modules/illume2/policies/illume/policy.h \
25 src/modules/illume2/policies/illume/illume.c \
26 src/modules/illume2/policies/illume/illume.h
27src_modules_illume2_policies_illume_illume_la_LIBTOOLFLAGS = --tag=disable-static
28
29## tablet
30src_modules_illume2policytabletdir = $(MDIR)/illume2/policies
31src_modules_illume2policytablet_LTLIBRARIES = src/modules/illume2/policies/tablet/tablet.la
32
33src_modules_illume2_policies_tablet_tablet_la_CPPFLAGS = $(ILLUME2POLICYCPPFLAGS)
34src_modules_illume2_policies_tablet_tablet_la_LIBADD = $(MOD_LIBS)
35src_modules_illume2_policies_tablet_tablet_la_LDFLAGS = $(MOD_LDFLAGS)
36src_modules_illume2_policies_tablet_tablet_la_SOURCES = src/modules/illume2/policies/tablet/policy.c \
37 src/modules/illume2/policies/tablet/policy.h \
38 src/modules/illume2/policies/tablet/tablet.c \
39 src/modules/illume2/policies/tablet/tablet.h
40src_modules_illume2_policies_tablet_tablet_la_LIBTOOLFLAGS = --tag=disable-static
41
42src_modules_illume2pkgdir = $(MDIR)/illume2/$(MODULE_ARCH)
43src_modules_illume2pkg_LTLIBRARIES = src/modules/illume2/module.la
44
45src_modules_illume2_module_la_LIBADD = $(MOD_LIBS)
46src_modules_illume2_module_la_CPPFLAGS = $(MOD_CPPFLAGS)
47src_modules_illume2_module_la_LDFLAGS = $(MOD_LDFLAGS)
48src_modules_illume2_module_la_SOURCES = src/modules/illume2/e_mod_main.c \
49 src/modules/illume2/e_mod_main.h \
50 src/modules/illume2/e_illume.h \
51 src/modules/illume2/e_illume.c \
52 src/modules/illume2/e_illume_private.h \
53 src/modules/illume2/e_mod_config_policy.c \
54 src/modules/illume2/e_mod_select_window.c \
55 src/modules/illume2/e_mod_config_windows.c \
56 src/modules/illume2/e_mod_config_animation.c \
57 src/modules/illume2/e_mod_quickpanel.c \
58 src/modules/illume2/e_mod_kbd_device.c \
59 src/modules/illume2/e_mod_kbd.c \
60 src/modules/illume2/e_mod_policy.c \
61 src/modules/illume2/e_mod_config.c
62
63# TODO: incomplete
64PHONIES += illume2 install-illume2
65illume2: $(illume2pkg_LTLIBRARIES) $(illume2_DATA)
66install-illume2: install-illume2DATA install-illume2pkgLTLIBRARIES
67endif
diff --git a/illume-bluetooth/e-module-illume-bluetooth.edj b/illume-bluetooth/e-module-illume-bluetooth.edj
new file mode 100644
index 0000000..f305880
--- /dev/null
+++ b/illume-bluetooth/e-module-illume-bluetooth.edj
Binary files differ
diff --git a/illume-bluetooth/e_mod_main.c b/illume-bluetooth/e_mod_main.c
new file mode 100644
index 0000000..f493afe
--- /dev/null
+++ b/illume-bluetooth/e_mod_main.c
@@ -0,0 +1,199 @@
1#include "e.h"
2
3typedef struct _Instance Instance;
4struct _Instance
5{
6 E_Gadcon_Client *gcc;
7 Evas_Object *obj;
8 Ecore_Poller *poller;
9 int on;
10};
11
12/* local function prototypes */
13static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
14static void _gc_shutdown(E_Gadcon_Client *gcc);
15static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
16static const char *_gc_label(const E_Gadcon_Client_Class *cc);
17static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *cc, Evas *evas);
18static const char *_gc_id_new(const E_Gadcon_Client_Class *cc);
19static Eina_Bool _cb_poll(void *data);
20static int _get_interface_class(int iclass);
21
22/* local variables */
23static Eina_List *instances = NULL;
24static const char *_bt_mod_dir = NULL;
25
26static const E_Gadcon_Client_Class _gc_class =
27{
28 GADCON_CLIENT_CLASS_VERSION, "illume-bluetooth",
29 { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new,
30 NULL, e_gadcon_site_is_not_toolbar },
31 E_GADCON_CLIENT_STYLE_PLAIN
32};
33
34/* local function prototypes */
35static E_Gadcon_Client *
36_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
37{
38 Instance *inst;
39 char buff[PATH_MAX];
40
41 inst = E_NEW(Instance, 1);
42
43 inst->obj = edje_object_add(gc->evas);
44 if (!e_theme_edje_object_set(inst->obj, "base/theme/modules/illume-bluetooth",
45 "modules/illume-bluetooth/main"))
46 {
47 snprintf(buff, sizeof(buff), "%s/e-module-illume-bluetooth.edj",
48 _bt_mod_dir);
49 edje_object_file_set(inst->obj, buff, "modules/illume-bluetooth/main");
50 }
51 evas_object_show(inst->obj);
52
53 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->obj);
54 inst->gcc->data = inst;
55
56 inst->on = -1;
57 inst->poller = ecore_poller_add(ECORE_POLLER_CORE, 16, _cb_poll, inst);
58 return inst->gcc;
59}
60
61static void
62_gc_shutdown(E_Gadcon_Client *gcc)
63{
64 Instance *inst;
65
66 if (!(inst = gcc->data)) return;
67 instances = eina_list_remove(instances, inst);
68 if (inst->poller) ecore_poller_del(inst->poller);
69 if (inst->obj) evas_object_del(inst->obj);
70 E_FREE(inst);
71}
72
73static void
74_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED)
75{
76 Instance *inst;
77 int mw, mh, xw, xh;
78
79 inst = gcc->data;
80 edje_object_size_min_get(inst->obj, &mw, &mh);
81 edje_object_size_max_get(inst->obj, &xw, &xh);
82 if ((mw < 1) || (mh < 1))
83 edje_object_size_min_calc(inst->obj, &mw, &mh);
84 if (mw < 4) mw = 4;
85 if (mh < 4) mh = 4;
86 if ((xw > 0) && (xh > 0))
87 e_gadcon_client_aspect_set(gcc, xw, xh);
88 e_gadcon_client_min_size_set(gcc, mw, mh);
89}
90
91static const char *
92_gc_label(const E_Gadcon_Client_Class *cc EINA_UNUSED)
93{
94 return _("Illume Bluetooth");
95}
96
97static Evas_Object *
98_gc_icon(const E_Gadcon_Client_Class *cc EINA_UNUSED, Evas *evas)
99{
100 Evas_Object *o;
101 char buff[PATH_MAX];
102
103 snprintf(buff, sizeof(buff), "%s/e-module-illume-bluetooth.edj",
104 _bt_mod_dir);
105 o = edje_object_add(evas);
106 edje_object_file_set(o, buff, "icon");
107 return o;
108}
109
110static const char *
111_gc_id_new(const E_Gadcon_Client_Class *cc EINA_UNUSED)
112{
113 static char buff[32];
114
115 snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name,
116 eina_list_count(instances));
117 return buff;
118}
119
120static Eina_Bool
121_cb_poll(void *data)
122{
123 Instance *inst;
124 int pon;
125
126 inst = data;
127 pon = inst->on;
128 inst->on = _get_interface_class(0xe0);
129 if (inst->on != pon)
130 {
131 if (inst->on)
132 edje_object_signal_emit(inst->obj, "e,state,active", "e");
133 else
134 edje_object_signal_emit(inst->obj, "e,state,passive", "e");
135 }
136 return ECORE_CALLBACK_RENEW;
137}
138
139static int
140_get_interface_class(int iclass)
141{
142 Eina_List *devs;
143 char *name;
144
145 devs = ecore_file_ls("/sys/bus/usb/devices");
146 EINA_LIST_FREE(devs, name)
147 {
148 char buf[PATH_MAX];
149 FILE *f;
150
151 snprintf(buf, sizeof(buf), "%s/%s/%s",
152 "/sys/bus/usb/devices", name, "bInterfaceClass");
153 f = fopen(buf, "r");
154 if (f)
155 {
156 if (fgets(buf, sizeof(buf), f))
157 {
158 int id = -1;
159
160 sscanf(buf, "%x", &id);
161 if (iclass == id)
162 {
163 EINA_LIST_FREE(devs, name)
164 free(name);
165 fclose(f);
166 return 1;
167 }
168 }
169 fclose(f);
170 }
171 free(name);
172 }
173 return 0;
174}
175
176EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Bluetooth" };
177
178EAPI void *
179e_modapi_init(E_Module *m)
180{
181 _bt_mod_dir = eina_stringshare_add(m->dir);
182 e_gadcon_provider_register(&_gc_class);
183 return m;
184}
185
186EAPI int
187e_modapi_shutdown(E_Module *m EINA_UNUSED)
188{
189 e_gadcon_provider_unregister(&_gc_class);
190 if (_bt_mod_dir) eina_stringshare_del(_bt_mod_dir);
191 _bt_mod_dir = NULL;
192 return 1;
193}
194
195EAPI int
196e_modapi_save(E_Module *m EINA_UNUSED)
197{
198 return 1;
199}
diff --git a/illume-bluetooth/module.desktop.in b/illume-bluetooth/module.desktop.in
new file mode 100644
index 0000000..ba5af83
--- /dev/null
+++ b/illume-bluetooth/module.desktop.in
@@ -0,0 +1,14 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Illume-Bluetooth
5Name[ca]=Illume-Bluetooth
6Name[de]=Illume-Bluetooth
7Name[eo]=Bludento Illume
8Name[fr]=Bluetooth Illume
9Name[gl]=Illume-Bluetooth
10Name[ms]=Illume-Bluetooth
11Name[sr]=Блутут одсјај
12Name[tr]=Illume-Bluetooth
13Icon=e-module-illume-bluetooth
14X-Enlightenment-ModuleType=mobile
diff --git a/illume-home-toggle/e-module-illume-home-toggle.edj b/illume-home-toggle/e-module-illume-home-toggle.edj
new file mode 100644
index 0000000..3d7d9b0
--- /dev/null
+++ b/illume-home-toggle/e-module-illume-home-toggle.edj
Binary files differ
diff --git a/illume-home-toggle/e_mod_main.c b/illume-home-toggle/e_mod_main.c
new file mode 100644
index 0000000..89e9c49
--- /dev/null
+++ b/illume-home-toggle/e_mod_main.c
@@ -0,0 +1,134 @@
1#include "e.h"
2
3typedef struct _Instance Instance;
4struct _Instance
5{
6 E_Gadcon_Client *gcc;
7 Evas_Object *o_toggle;
8};
9
10/* local function prototypes */
11static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
12static void _gc_shutdown(E_Gadcon_Client *gcc);
13static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
14static const char *_gc_label(const E_Gadcon_Client_Class *cc);
15static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *cc, Evas *evas);
16static const char *_gc_id_new(const E_Gadcon_Client_Class *cc);
17static void _cb_action_home(void *data, Evas_Object *obj, const char *emission, const char *source);
18
19/* local variables */
20static Eina_List *instances = NULL;
21static const char *mod_dir = NULL;
22
23static const E_Gadcon_Client_Class _gc_class =
24{
25 GADCON_CLIENT_CLASS_VERSION, "illume-home-toggle",
26 { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
27 e_gadcon_site_is_not_toolbar
28 }, E_GADCON_CLIENT_STYLE_PLAIN
29};
30
31/* public functions */
32EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Home Toggle" };
33
34EAPI void *
35e_modapi_init(E_Module *m)
36{
37 mod_dir = eina_stringshare_add(m->dir);
38 e_gadcon_provider_register(&_gc_class);
39 return m;
40}
41
42EAPI int
43e_modapi_shutdown(E_Module *m EINA_UNUSED)
44{
45 e_gadcon_provider_unregister(&_gc_class);
46 if (mod_dir) eina_stringshare_del(mod_dir);
47 mod_dir = NULL;
48 return 1;
49}
50
51EAPI int
52e_modapi_save(E_Module *m EINA_UNUSED)
53{
54 return 1;
55}
56
57/* local functions */
58static E_Gadcon_Client *
59_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
60{
61 Instance *inst;
62
63 inst = E_NEW(Instance, 1);
64 inst->o_toggle = edje_object_add(gc->evas);
65 e_theme_edje_object_set(inst->o_toggle,
66 "base/theme/modules/illume_home_toggle",
67 "e/modules/illume_home_toggle/main");
68
69 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_toggle);
70 inst->gcc->data = inst;
71
72 edje_object_signal_callback_add(inst->o_toggle, "e,action,home", "",
73 _cb_action_home, inst);
74
75 instances = eina_list_append(instances, inst);
76 return inst->gcc;
77}
78
79static void
80_gc_shutdown(E_Gadcon_Client *gcc)
81{
82 Instance *inst;
83
84 if (!(inst = gcc->data)) return;
85 instances = eina_list_remove(instances, inst);
86 if (inst->o_toggle) evas_object_del(inst->o_toggle);
87 E_FREE(inst);
88}
89
90static void
91_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED)
92{
93 e_gadcon_client_aspect_set(gcc, 16, 16);
94 e_gadcon_client_min_size_set(gcc, 16, 16);
95}
96
97static const char *
98_gc_label(const E_Gadcon_Client_Class *cc EINA_UNUSED)
99{
100 return _("Illume-Home-Toggle");
101}
102
103static Evas_Object *
104_gc_icon(const E_Gadcon_Client_Class *cc EINA_UNUSED, Evas *evas)
105{
106 Evas_Object *o;
107 char buff[PATH_MAX];
108
109 snprintf(buff, sizeof(buff), "%s/e-module-illume-home-toggle.edj", mod_dir);
110 o = edje_object_add(evas);
111 edje_object_file_set(o, buff, "icon");
112 return o;
113}
114
115static const char *
116_gc_id_new(const E_Gadcon_Client_Class *cc EINA_UNUSED)
117{
118 static char buff[32];
119
120 snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name,
121 eina_list_count(instances));
122 return buff;
123}
124
125static void
126_cb_action_home(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
127{
128 Instance *inst;
129 E_Zone *zone;
130
131 if (!(inst = data)) return;
132 zone = inst->gcc->gadcon->zone;
133 ecore_x_e_illume_focus_home_send(zone->black_win);
134}
diff --git a/illume-home-toggle/module.desktop.in b/illume-home-toggle/module.desktop.in
new file mode 100644
index 0000000..0826b4b
--- /dev/null
+++ b/illume-home-toggle/module.desktop.in
@@ -0,0 +1,13 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Illume-Home-Toggle
5Name[ca]=Illume-Home-Toggle
6Name[de]=Illume-Startumschalter
7Name[el]=Illume-Home-Toggle
8Name[eo]=Baskulilo de hejmo Illume
9Name[ms]=Illume-Home-Toggle
10Name[sr]=Прекидач личног одсјаја
11Name[tr]=Illume-Ev-Değiştirici
12Icon=e-module-illume-home-toggle
13X-Enlightenment-ModuleType=mobile
diff --git a/illume-home/e-module-illume-home.edj b/illume-home/e-module-illume-home.edj
new file mode 100644
index 0000000..a225e59
--- /dev/null
+++ b/illume-home/e-module-illume-home.edj
Binary files differ
diff --git a/illume-home/e_busycover.c b/illume-home/e_busycover.c
new file mode 100644
index 0000000..8887016
--- /dev/null
+++ b/illume-home/e_busycover.c
@@ -0,0 +1,91 @@
1#include "e.h"
2#include "e_busycover.h"
3#include "e_mod_config.h"
4
5/* local function prototypes */
6static void _e_busycover_cb_free(E_Busycover *cover);
7
8EAPI E_Busycover *
9e_busycover_new(E_Win *win)
10{
11 E_Busycover *cover;
12 char buff[PATH_MAX];
13
14 cover = E_OBJECT_ALLOC(E_Busycover, E_BUSYCOVER_TYPE, _e_busycover_cb_free);
15 if (!cover) return NULL;
16 snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
17 il_home_cfg->mod_dir);
18
19 cover->o_base = edje_object_add(evas_object_evas_get(win));
20 if (!e_theme_edje_object_set(cover->o_base,
21 "base/theme/modules/illume-home",
22 "modules/illume-home/busycover"))
23 edje_object_file_set(cover->o_base, buff, "modules/illume-home/busycover");
24 edje_object_part_text_set(cover->o_base, "e.text.title", _("LOADING"));
25 evas_object_move(cover->o_base, win->x, win->y);
26 evas_object_resize(cover->o_base, win->w, win->h);
27 evas_object_layer_set(cover->o_base, 999);
28 return cover;
29}
30
31EAPI E_Busycover_Handle *
32e_busycover_push(E_Busycover *cover, const char *msg, const char *icon)
33{
34 E_Busycover_Handle *handle;
35
36 E_OBJECT_CHECK(cover);
37 E_OBJECT_TYPE_CHECK_RETURN(cover, E_BUSYCOVER_TYPE, NULL);
38
39 handle = E_NEW(E_Busycover_Handle, 1);
40 handle->cover = cover;
41 if (msg) handle->msg = eina_stringshare_add(msg);
42 if (icon) handle->icon = eina_stringshare_add(icon);
43 cover->handles = eina_list_append(cover->handles, handle);
44 edje_object_part_text_set(cover->o_base, "e.text.title", msg);
45 evas_object_show(cover->o_base);
46 return handle;
47}
48
49EAPI void
50e_busycover_pop(E_Busycover *cover, E_Busycover_Handle *handle)
51{
52 E_OBJECT_CHECK(cover);
53 E_OBJECT_TYPE_CHECK(cover, E_BUSYCOVER_TYPE);
54 if (!eina_list_data_find(cover->handles, handle)) return;
55 cover->handles = eina_list_remove(cover->handles, handle);
56 if (handle->msg) eina_stringshare_del(handle->msg);
57 if (handle->icon) eina_stringshare_del(handle->icon);
58 E_FREE(handle);
59 if (cover->handles)
60 {
61 handle = cover->handles->data;
62 edje_object_part_text_set(cover->o_base, "e.text.title", handle->msg);
63 }
64 else
65 evas_object_hide(cover->o_base);
66}
67
68EAPI void
69e_busycover_resize(E_Busycover *cover, int w, int h)
70{
71 E_OBJECT_CHECK(cover);
72 E_OBJECT_TYPE_CHECK(cover, E_BUSYCOVER_TYPE);
73 evas_object_resize(cover->o_base, w, h);
74}
75
76/* local function prototypes */
77static void
78_e_busycover_cb_free(E_Busycover *cover)
79{
80 E_Busycover_Handle *handle;
81
82 EINA_LIST_FREE(cover->handles, handle)
83 {
84 if (handle->msg) eina_stringshare_del(handle->msg);
85 if (handle->icon) eina_stringshare_del(handle->icon);
86 E_FREE(handle);
87 }
88
89 if (cover->o_base) evas_object_del(cover->o_base);
90 E_FREE(cover);
91}
diff --git a/illume-home/e_busycover.h b/illume-home/e_busycover.h
new file mode 100644
index 0000000..35e0849
--- /dev/null
+++ b/illume-home/e_busycover.h
@@ -0,0 +1,26 @@
1#ifndef E_BUSYCOVER_H
2# define E_BUSYCOVER_H
3
4# define E_BUSYCOVER_TYPE 0xE1b0782
5
6typedef struct _E_Busycover E_Busycover;
7typedef struct _E_Busycover_Handle E_Busycover_Handle;
8
9struct _E_Busycover
10{
11 E_Object e_obj_inherit;
12 Evas_Object *o_base;
13 Eina_List *handles;
14};
15struct _E_Busycover_Handle
16{
17 E_Busycover *cover;
18 const char *msg, *icon;
19};
20
21EAPI E_Busycover *e_busycover_new(E_Win *win);
22EAPI E_Busycover_Handle *e_busycover_push(E_Busycover *cover, const char *msg, const char *icon);
23EAPI void e_busycover_pop(E_Busycover *cover, E_Busycover_Handle *handle);
24EAPI void e_busycover_resize(E_Busycover *cover, int w, int h);
25
26#endif
diff --git a/illume-home/e_mod_config.c b/illume-home/e_mod_config.c
new file mode 100644
index 0000000..2d5ad47
--- /dev/null
+++ b/illume-home/e_mod_config.c
@@ -0,0 +1,211 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_config.h"
4
5/* local function prototypes */
6static void *_il_home_config_create(E_Config_Dialog *cfd);
7static void _il_home_config_free(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8static Evas_Object *_il_home_config_ui(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
9static void _il_home_config_changed(void *data, Evas_Object *obj, void *event);
10static void _il_home_config_slider_changed(void *data, Evas_Object *obj);
11static void _il_home_config_click_changed(void *data, Evas_Object *obj, void *event);
12static Eina_Bool _il_home_config_change_timeout(void *data);
13
14/* local variables */
15EAPI Il_Home_Config *il_home_cfg = NULL;
16static E_Config_DD *conf_edd = NULL;
17Ecore_Timer *_il_home_config_change_timer = NULL;
18Evas_Object *delay_label, *delay_slider;
19
20/* public functions */
21int
22il_home_config_init(E_Module *m)
23{
24 char buff[PATH_MAX];
25
26 conf_edd = E_CONFIG_DD_NEW("Illume-Home_Cfg", Il_Home_Config);
27 #undef T
28 #undef D
29 #define T Il_Home_Config
30 #define D conf_edd
31 E_CONFIG_VAL(D, T, version, INT);
32 E_CONFIG_VAL(D, T, icon_size, INT);
33 E_CONFIG_VAL(D, T, single_click, INT);
34 E_CONFIG_VAL(D, T, single_click_delay, INT);
35
36 il_home_cfg = e_config_domain_load("module.illume-home", conf_edd);
37 if ((il_home_cfg) &&
38 ((il_home_cfg->version >> 16) < IL_CONFIG_MAJ))
39 {
40 E_FREE(il_home_cfg);
41 il_home_cfg = NULL;
42 }
43 if (!il_home_cfg)
44 {
45 il_home_cfg = E_NEW(Il_Home_Config, 1);
46 il_home_cfg->version = 0;
47 il_home_cfg->icon_size = 120;
48 il_home_cfg->single_click = 1;
49 il_home_cfg->single_click_delay = 50;
50 }
51 if (il_home_cfg)
52 {
53 /* Add new config variables here */
54 /* if ((il_home_cfg->version & 0xffff) < 1) */
55 il_home_cfg->version = (IL_CONFIG_MAJ << 16) | IL_CONFIG_MIN;
56 }
57
58 il_home_cfg->mod_dir = eina_stringshare_add(m->dir);
59
60 snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
61 il_home_cfg->mod_dir);
62
63 e_configure_registry_category_add("illume", 0, _("Illume"), NULL,
64 "enlightenment/display");
65 e_configure_registry_generic_item_add("illume/home", 0, _("Home"),
66 buff, "icon", il_home_config_show);
67 return 1;
68}
69
70int
71il_home_config_shutdown(void)
72{
73 il_home_cfg->cfd = NULL;
74
75 e_configure_registry_item_del("illume/home");
76 e_configure_registry_category_del("illume");
77
78 if (il_home_cfg->mod_dir) eina_stringshare_del(il_home_cfg->mod_dir);
79
80 E_FREE(il_home_cfg);
81 il_home_cfg = NULL;
82
83 E_CONFIG_DD_FREE(conf_edd);
84 return 1;
85}
86
87int
88il_home_config_save(void)
89{
90 e_config_domain_save("module.illume-home", conf_edd, il_home_cfg);
91 return 1;
92}
93
94void
95il_home_config_show(E_Comp *comp, const char *params EINA_UNUSED)
96{
97 E_Config_Dialog *cfd;
98 E_Config_Dialog_View *v = NULL;
99
100 if (e_config_dialog_find("E", "_config_illume_home_settings")) return;
101
102 v = E_NEW(E_Config_Dialog_View, 1);
103 v->create_cfdata = _il_home_config_create;
104 v->free_cfdata = _il_home_config_free;
105 v->basic.create_widgets = _il_home_config_ui;
106 v->basic_only = 1;
107 v->normal_win = 1;
108 v->scroll = 1;
109
110 cfd = e_config_dialog_new(NULL, _("Home Settings"), "E",
111 "_config_illume_home_settings",
112 "enlightenment/launcher_settings", 0, v, NULL);
113 il_home_cfg->cfd = cfd;
114}
115
116/* local functions */
117static void *
118_il_home_config_create(E_Config_Dialog *cfd EINA_UNUSED)
119{
120 return NULL;
121}
122
123static void
124_il_home_config_free(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata EINA_UNUSED)
125{
126 il_home_cfg->cfd = NULL;
127 il_home_win_cfg_update();
128}
129
130static Evas_Object *
131_il_home_config_ui(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data *cfdata EINA_UNUSED)
132{
133 Evas_Object *list, *of, *o;
134 E_Radio_Group *rg;
135
136 list = e_widget_list_add(evas, 0, 0);
137
138 of = e_widget_framelist_add(evas, _("Icon Size"), 0);
139 rg = e_widget_radio_group_new(&(il_home_cfg->icon_size));
140 o = e_widget_radio_add(evas, _("Small"), 60, rg);
141 e_widget_framelist_object_append(of, o);
142 evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
143 o = e_widget_radio_add(evas, _("Medium"), 80, rg);
144 e_widget_framelist_object_append(of, o);
145 evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
146 o = e_widget_radio_add(evas, _("Large"), 120, rg);
147 e_widget_framelist_object_append(of, o);
148 evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
149 o = e_widget_radio_add(evas, _("Very Large"), 160, rg);
150 e_widget_framelist_object_append(of, o);
151 evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
152 o = e_widget_radio_add(evas, _("Massive"), 240, rg);
153 e_widget_framelist_object_append(of, o);
154 evas_object_smart_callback_add(o, "changed", _il_home_config_changed, NULL);
155 e_widget_list_object_append(list, of, 1, 0, 0.0);
156
157 of = e_widget_framelist_add(evas, _("Launch Action"), 0);
158 o = e_widget_check_add(evas, _("Single press"),
159 &(il_home_cfg->single_click));
160 e_widget_framelist_object_append(of, o);
161 evas_object_smart_callback_add(o, "changed",
162 _il_home_config_click_changed, NULL);
163 o = e_widget_label_add(evas, _("Press Delay"));
164 delay_label = o;
165 e_widget_disabled_set(o, !(il_home_cfg->single_click));
166 e_widget_framelist_object_append(of, o);
167 o = e_widget_slider_add(evas, 1, 0, "%1.0f ms", 0, 350, 1, 0, NULL,
168 &(il_home_cfg->single_click_delay), 150);
169 delay_slider = o;
170 e_widget_on_change_hook_set(o, _il_home_config_slider_changed, NULL);
171 e_widget_disabled_set(o, !(il_home_cfg->single_click));
172 e_widget_framelist_object_append(of, o);
173 e_widget_list_object_append(list, of, 1, 0, 0.0);
174
175 return list;
176}
177
178static void
179_il_home_config_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
180{
181 if (_il_home_config_change_timer)
182 ecore_timer_del(_il_home_config_change_timer);
183 _il_home_config_change_timer =
184 ecore_timer_add(0.5, _il_home_config_change_timeout, data);
185}
186
187static void
188_il_home_config_slider_changed(void *data, Evas_Object *obj EINA_UNUSED)
189{
190 if (_il_home_config_change_timer)
191 ecore_timer_del(_il_home_config_change_timer);
192 _il_home_config_change_timer =
193 ecore_timer_add(0.5, _il_home_config_change_timeout, data);
194}
195
196static void
197_il_home_config_click_changed(void *data, Evas_Object *obj, void *event)
198{
199 e_widget_disabled_set(delay_label, !il_home_cfg->single_click);
200 e_widget_disabled_set(delay_slider, !il_home_cfg->single_click);
201 _il_home_config_changed(data, obj, event);
202}
203
204static Eina_Bool
205_il_home_config_change_timeout(void *data EINA_UNUSED)
206{
207 il_home_win_cfg_update();
208 e_config_save_queue();
209 _il_home_config_change_timer = NULL;
210 return ECORE_CALLBACK_CANCEL;
211}
diff --git a/illume-home/e_mod_config.h b/illume-home/e_mod_config.h
new file mode 100644
index 0000000..5e9eef1
--- /dev/null
+++ b/illume-home/e_mod_config.h
@@ -0,0 +1,27 @@
1#ifndef E_MOD_CONFIG_H
2#define E_MOD_CONFIG_H
3
4#define IL_CONFIG_MIN 0
5#define IL_CONFIG_MAJ 0
6
7typedef struct _Il_Home_Config Il_Home_Config;
8
9struct _Il_Home_Config
10{
11 int version;
12 int mode, icon_size;
13 int single_click, single_click_delay;
14
15 // Not User Configurable. Placeholders
16 const char *mod_dir;
17 E_Config_Dialog *cfd;
18};
19
20int il_home_config_init(E_Module *m);
21int il_home_config_shutdown(void);
22int il_home_config_save(void);
23void il_home_config_show(E_Comp *comp, const char *params);
24
25extern EAPI Il_Home_Config *il_home_cfg;
26
27#endif
diff --git a/illume-home/e_mod_main.c b/illume-home/e_mod_main.c
new file mode 100644
index 0000000..c04af8d
--- /dev/null
+++ b/illume-home/e_mod_main.c
@@ -0,0 +1,753 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_config.h"
4#include "e_busycover.h"
5
6#define IL_HOME_WIN_TYPE 0xE0b0102f
7
8/* local structures */
9typedef struct _Il_Home_Win Il_Home_Win;
10typedef struct _Il_Home_Exec Il_Home_Exec;
11
12struct _Il_Home_Win
13{
14 E_Object e_obj_inherit;
15
16 E_Win *win;
17 Evas_Object *o_bg, *o_sf, *o_fm, *o_cover;
18 E_Busycover *cover;
19 E_Zone *zone;
20};
21
22struct _Il_Home_Exec
23{
24 E_Busycover *cover;
25 Efreet_Desktop *desktop;
26 Ecore_Exe *exec;
27 E_Client *client;
28 E_Zone *zone;
29 Ecore_Timer *timeout;
30 int startup_id;
31 pid_t pid;
32 void *handle;
33};
34
35/* local function prototypes */
36static void _il_home_apps_populate(void);
37static void _il_home_apps_unpopulate(void);
38static void _il_home_desks_populate(void);
39static void _il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop);
40static E_Client *_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop);
41static void _il_home_win_new(E_Zone *zone);
42static void _il_home_win_cb_free(Il_Home_Win *hwin);
43static void _il_home_win_cb_resize(E_Win *win);
44static void _il_home_fmc_set(Evas_Object *obj);
45static Eina_Bool _il_home_update_deferred(void *data EINA_UNUSED);
46static void _il_home_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
47static void _il_home_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
48static void _il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y);
49static void _il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
50static void _il_home_cb_selected(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED);
51static Eina_Bool _il_home_desktop_cache_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
52static Eina_Bool _il_home_cb_border_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
53static Eina_Bool _il_home_cb_border_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
54static Eina_Bool _il_home_cb_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
55static Eina_Bool _il_home_cb_exe_timeout(void *data);
56static Eina_Bool _il_home_cb_client_message(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
57static Eina_Bool _il_home_cb_prop_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
58static Eina_Bool _il_home_cb_bg_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
59
60/* local variables */
61static Eina_List *hwins = NULL;
62static Eina_List *hdls = NULL;
63static Eina_List *desks = NULL;
64static Eina_List *exes = NULL;
65static Ecore_Timer *defer = NULL;
66
67/* public functions */
68EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Home" };
69
70EAPI void *
71e_modapi_init(E_Module *m)
72{
73 const Eina_List *l;
74 E_Comp *comp;
75
76 if (!il_home_config_init(m)) return NULL;
77
78 _il_home_apps_unpopulate();
79 _il_home_apps_populate();
80
81 hdls =
82 eina_list_append(hdls,
83 ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE,
84 _il_home_desktop_cache_update,
85 NULL));
86
87 hdls =
88 eina_list_append(hdls,
89 ecore_event_handler_add(E_EVENT_CLIENT_ADD,
90 _il_home_cb_border_add, NULL));
91 hdls =
92 eina_list_append(hdls,
93 ecore_event_handler_add(E_EVENT_CLIENT_REMOVE,
94 _il_home_cb_border_del, NULL));
95 hdls =
96 eina_list_append(hdls,
97 ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
98 _il_home_cb_exe_del, NULL));
99 hdls =
100 eina_list_append(hdls,
101 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
102 _il_home_cb_client_message,
103 NULL));
104 hdls =
105 eina_list_append(hdls,
106 ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY,
107 _il_home_cb_prop_change,
108 NULL));
109 hdls =
110 eina_list_append(hdls,
111 ecore_event_handler_add(E_EVENT_BG_UPDATE,
112 _il_home_cb_bg_change, NULL));
113
114 EINA_LIST_FOREACH(e_comp_list(), l, comp)
115 {
116 E_Zone *zone;
117 Eina_List *zl;
118
119 EINA_LIST_FOREACH(comp->zones, zl, zone)
120 {
121 Ecore_X_Illume_Mode mode;
122
123 mode = ecore_x_e_illume_mode_get(zone->black_win);
124 _il_home_win_new(zone);
125 if (mode > ECORE_X_ILLUME_MODE_SINGLE)
126 _il_home_win_new(zone);
127 }
128 }
129
130 return m;
131}
132
133EAPI int
134e_modapi_shutdown(E_Module *m EINA_UNUSED)
135{
136 Ecore_Event_Handler *hdl;
137 Il_Home_Win *hwin;
138 Il_Home_Exec *exe;
139
140 EINA_LIST_FREE(hwins, hwin)
141 e_object_del(E_OBJECT(hwin));
142
143 EINA_LIST_FREE(exes, exe)
144 {
145 if (exe->exec)
146 {
147 ecore_exe_terminate(exe->exec);
148 ecore_exe_free(exe->exec);
149 }
150 if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
151 if (exe->timeout) ecore_timer_del(exe->timeout);
152 if (exe->desktop) efreet_desktop_free(exe->desktop);
153 E_FREE(exe);
154 }
155
156 EINA_LIST_FREE(hdls, hdl)
157 ecore_event_handler_del(hdl);
158
159 _il_home_apps_unpopulate();
160
161 il_home_config_shutdown();
162 return 1;
163}
164
165EAPI int
166e_modapi_save(E_Module *m EINA_UNUSED)
167{
168 return il_home_config_save();
169}
170
171void
172il_home_win_cfg_update(void)
173{
174 _il_home_apps_unpopulate();
175 _il_home_apps_populate();
176}
177
178/* local function prototypes */
179static void
180_il_home_apps_populate(void)
181{
182 Il_Home_Win *hwin;
183 Eina_List *l;
184 char buff[PATH_MAX];
185
186 e_user_dir_concat_static(buff, "appshadow");
187 ecore_file_mkpath(buff);
188
189 _il_home_desks_populate();
190
191 EINA_LIST_FOREACH(hwins, l, hwin)
192 {
193 _il_home_fmc_set(hwin->o_fm);
194 e_fm2_path_set(hwin->o_fm, NULL, buff);
195 }
196}
197
198static void
199_il_home_apps_unpopulate(void)
200{
201 Efreet_Desktop *desktop;
202 Eina_List *files;
203 char buff[PATH_MAX], *file;
204 size_t len;
205
206 EINA_LIST_FREE(desks, desktop)
207 efreet_desktop_free(desktop);
208
209 len = e_user_dir_concat_static(buff, "appshadow");
210 if ((len + 2) >= sizeof(buff)) return;
211
212 files = ecore_file_ls(buff);
213 buff[len] = '/';
214 len++;
215
216 EINA_LIST_FREE(files, file)
217 {
218 if (eina_strlcpy(buff + len, file, sizeof(buff) - len) >= sizeof(buff) - len)
219 continue;
220 ecore_file_unlink(buff);
221 free(file);
222 }
223}
224
225static void
226_il_home_desks_populate(void)
227{
228 Efreet_Menu *menu, *entry;
229 Eina_List *ml, *settings, *sys, *kbd;
230 Efreet_Desktop *desktop;
231 int num = 0;
232
233 if (!(menu = efreet_menu_get())) return;
234
235 settings = efreet_util_desktop_category_list("Settings");
236 sys = efreet_util_desktop_category_list("System");
237 kbd = efreet_util_desktop_category_list("Keyboard");
238
239 EINA_LIST_FOREACH(menu->entries, ml, entry)
240 {
241 Eina_List *sl;
242 Efreet_Menu *sm;
243
244 if (entry->type != EFREET_MENU_ENTRY_MENU) continue;
245 EINA_LIST_FOREACH(entry->entries, sl, sm)
246 {
247 char buff[PATH_MAX];
248
249 if (sm->type != EFREET_MENU_ENTRY_DESKTOP) continue;
250 if (!(desktop = sm->desktop)) continue;
251 if ((settings) && (sys) &&
252 (eina_list_data_find(settings, desktop)) &&
253 (eina_list_data_find(sys, desktop))) continue;
254 if ((kbd) && (eina_list_data_find(kbd, desktop)))
255 continue;
256 efreet_desktop_ref(desktop);
257 desks = eina_list_append(desks, desktop);
258 e_user_dir_snprintf(buff, sizeof(buff),
259 "appshadow/%04x.desktop", num);
260 ecore_file_symlink(desktop->orig_path, buff);
261 num++;
262 }
263 }
264
265 efreet_menu_free(menu);
266
267 EINA_LIST_FREE(settings, desktop)
268 efreet_desktop_free(desktop);
269 EINA_LIST_FREE(sys, desktop)
270 efreet_desktop_free(desktop);
271 EINA_LIST_FREE(kbd, desktop)
272 efreet_desktop_free(desktop);
273}
274
275static void
276_il_home_desktop_run(Il_Home_Win *hwin, Efreet_Desktop *desktop)
277{
278 E_Exec_Instance *eins;
279 Il_Home_Exec *exec;
280 Eina_List *l;
281 E_Client *ec;
282 char buff[4096];
283
284 if ((!hwin) || (!desktop) || (!desktop->exec)) return;
285 EINA_LIST_FOREACH(exes, l, exec)
286 {
287 if (exec->desktop != desktop) continue;
288 if ((exec->client) && (exec->client->zone == hwin->zone))
289 {
290 e_client_uniconify(exec->client);
291 evas_object_raise(exec->client->frame);
292 evas_object_focus_set(exec->client->frame, 1);
293 return;
294 }
295 }
296 if ((ec = _il_home_desktop_find_border(hwin->zone, desktop)))
297 {
298 e_client_uniconify(ec);
299 evas_object_raise(ec->frame);
300 evas_object_focus_set(ec->frame, 1);
301 return;
302 }
303
304 exec = E_NEW(Il_Home_Exec, 1);
305 if (!exec) return;
306 exec->cover = hwin->cover;
307 eins = e_exec(hwin->zone, desktop, NULL, NULL, "illume-home");
308 exec->desktop = desktop;
309 exec->zone = hwin->zone;
310 if (eins)
311 {
312 exec->exec = eins->exe;
313 exec->startup_id = eins->startup_id;
314 if (eins->exe)
315 exec->pid = ecore_exe_pid_get(eins->exe);
316 }
317 exec->timeout = ecore_timer_add(2.0, _il_home_cb_exe_timeout, exec);
318 snprintf(buff, sizeof(buff), "Starting %s", desktop->name);
319 exec->handle = e_busycover_push(hwin->cover, buff, NULL);
320 exes = eina_list_append(exes, exec);
321}
322
323static E_Client *
324_il_home_desktop_find_border(E_Zone *zone, Efreet_Desktop *desktop)
325{
326 Eina_List *l;
327 E_Client *ec;
328 char *exe = NULL, *p;
329
330 if (!desktop) return NULL;
331 if (!desktop->exec) return NULL;
332 p = strchr(desktop->exec, ' ');
333 if (!p)
334 exe = strdup(desktop->exec);
335 else
336 {
337 size_t s = p - desktop->exec + 1;
338 exe = calloc(1, s);
339 if (exe) eina_strlcpy(exe, desktop->exec, s);
340 }
341 if (exe)
342 {
343 p = strrchr(exe, '/');
344 if (p) strcpy(exe, p + 1);
345 }
346
347 EINA_LIST_FOREACH(e_comp->clients, l, ec)
348 {
349 if (e_client_util_ignored_get(ec)) continue;
350 if (ec->zone != zone) continue;
351 if (e_exec_startup_id_pid_find(ec->netwm.pid,
352 ec->netwm.startup_id) == desktop)
353 {
354 free(exe);
355 return ec;
356 }
357 if (exe)
358 {
359 if (ec->icccm.command.argv)
360 {
361 char *pp;
362
363 pp = strrchr(ec->icccm.command.argv[0], '/');
364 if (!pp) pp = ec->icccm.command.argv[0];
365 if (!strcmp(exe, pp))
366 {
367 free(exe);
368 return ec;
369 }
370 }
371 if ((ec->icccm.name) &&
372 (!strcasecmp(ec->icccm.name, exe)))
373 {
374 free(exe);
375 return ec;
376 }
377 }
378 }
379 free(exe);
380 return NULL;
381}
382
383static void
384_il_home_win_new(E_Zone *zone)
385{
386 Il_Home_Win *hwin;
387 Evas *evas;
388 E_Desk *desk;
389 char buff[PATH_MAX];
390 const char *bgfile;
391
392 hwin = E_OBJECT_ALLOC(Il_Home_Win, IL_HOME_WIN_TYPE, _il_home_win_cb_free);
393 if (!hwin) return;
394
395 hwin->zone = zone;
396 hwin->win = e_win_new(e_comp);
397 if (!hwin->win)
398 {
399 e_object_del(E_OBJECT(hwin));
400 return;
401 }
402 hwin->win->data = hwin;
403 e_win_title_set(hwin->win, _("Illume Home"));
404 e_win_name_class_set(hwin->win, "Illume-Home", "Illume-Home");
405 evas_object_resize_callback_set(hwin->win, _il_home_win_cb_resize);
406 e_win_no_remember_set(hwin->win, EINA_TRUE);
407
408 snprintf(buff, sizeof(buff), "%s/e-module-illume-home.edj",
409 il_home_cfg->mod_dir);
410
411 evas = evas_object_evas_get(hwin->win);
412
413 desk = e_desk_current_get(zone);
414 if (desk)
415 bgfile = e_bg_file_get(e_comp->num, zone->num, desk->x, desk->y);
416 else
417 bgfile = e_bg_file_get(e_comp->num, zone->num, -1, -1);
418
419 hwin->o_bg = edje_object_add(evas);
420 edje_object_file_set(hwin->o_bg, bgfile, "e/desktop/background");
421 eina_stringshare_del(bgfile);
422 evas_object_move(hwin->o_bg, 0, 0);
423 evas_object_show(hwin->o_bg);
424
425 hwin->o_sf = e_scrollframe_add(evas);
426 e_scrollframe_single_dir_set(hwin->o_sf, EINA_TRUE);
427 e_scrollframe_custom_edje_file_set(hwin->o_sf, buff,
428 "modules/illume-home/launcher/scrollview");
429 evas_object_move(hwin->o_sf, 0, 0);
430 evas_object_show(hwin->o_sf);
431
432 hwin->o_fm = e_fm2_add(evas);
433 _il_home_fmc_set(hwin->o_fm);
434 evas_object_show(hwin->o_fm);
435 e_user_dir_concat_static(buff, "appshadow");
436 e_fm2_path_set(hwin->o_fm, NULL, buff);
437 e_fm2_window_object_set(hwin->o_fm, E_OBJECT(hwin->win));
438 e_scrollframe_extern_pan_set(hwin->o_sf, hwin->o_fm,
439 _il_home_pan_set,
440 _il_home_pan_get,
441 _il_home_pan_max_get,
442 _il_home_pan_child_size_get);
443 evas_object_propagate_events_set(hwin->o_fm, 0);
444 evas_object_smart_callback_add(hwin->o_fm, "selected",
445 _il_home_cb_selected, hwin);
446
447 hwin->cover = e_busycover_new(hwin->win);
448
449 evas_object_geometry_set(hwin->win, zone->x, zone->y, zone->w, (zone->h / 2));
450 evas_object_show(hwin->win);
451 e_client_zone_set(hwin->win->client, zone);
452 if (hwin->win->evas_win)
453 e_drop_xdnd_register_set(hwin->win->evas_win, EINA_TRUE);
454
455 hwins = eina_list_append(hwins, hwin);
456}
457
458static void
459_il_home_win_cb_free(Il_Home_Win *hwin)
460{
461 if (hwin->win->evas_win) e_drop_xdnd_register_set(hwin->win->evas_win, 0);
462 if (hwin->cover) e_object_del(E_OBJECT(hwin->cover));
463 if (hwin->o_bg) evas_object_del(hwin->o_bg);
464 if (hwin->o_sf) evas_object_del(hwin->o_sf);
465 if (hwin->o_fm) evas_object_del(hwin->o_fm);
466 if (hwin->win) e_object_del(E_OBJECT(hwin->win));
467 E_FREE(hwin);
468}
469
470static void
471_il_home_win_cb_resize(E_Win *win)
472{
473 Il_Home_Win *hwin;
474
475 if (!(hwin = win->data)) return;
476 if (hwin->o_bg) evas_object_resize(hwin->o_bg, win->w, win->h);
477 if (hwin->o_sf) evas_object_resize(hwin->o_sf, win->w, win->h);
478 if (hwin->cover) e_busycover_resize(hwin->cover, win->w, win->h);
479}
480
481static void
482_il_home_fmc_set(Evas_Object *obj)
483{
484 E_Fm2_Config fmc;
485
486 if (!obj) return;
487 memset(&fmc, 0, sizeof(E_Fm2_Config));
488 fmc.view.mode = E_FM2_VIEW_MODE_GRID_ICONS;
489 fmc.view.open_dirs_in_place = 1;
490 fmc.view.selector = 0;
491 fmc.view.single_click = il_home_cfg->single_click;
492 fmc.view.single_click_delay = il_home_cfg->single_click_delay;
493 fmc.view.no_subdir_jump = 1;
494 fmc.icon.extension.show = 0;
495 fmc.icon.icon.w = il_home_cfg->icon_size * e_scale / 2.0;
496 fmc.icon.icon.h = il_home_cfg->icon_size * e_scale / 2.0;
497 fmc.icon.fixed.w = il_home_cfg->icon_size * e_scale / 2.0;
498 fmc.icon.fixed.h = il_home_cfg->icon_size * e_scale / 2.0;
499 fmc.list.sort.no_case = 0;
500 fmc.list.sort.dirs.first = 1;
501 fmc.list.sort.dirs.last = 0;
502 fmc.selection.single = 1;
503 fmc.selection.windows_modifiers = 0;
504 e_fm2_config_set(obj, &fmc);
505}
506
507static Eina_Bool
508_il_home_update_deferred(void *data EINA_UNUSED)
509{
510 _il_home_apps_unpopulate();
511 _il_home_apps_populate();
512 defer = NULL;
513 return ECORE_CALLBACK_CANCEL;
514}
515
516static void
517_il_home_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
518{
519 e_fm2_pan_set(obj, x, y);
520}
521
522static void
523_il_home_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
524{
525 e_fm2_pan_get(obj, x, y);
526}
527
528static void
529_il_home_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)
530{
531 e_fm2_pan_max_get(obj, x, y);
532}
533
534static void
535_il_home_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
536{
537 e_fm2_pan_child_size_get(obj, w, h);
538}
539
540static void
541_il_home_cb_selected(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
542{
543 Il_Home_Win *hwin;
544 Eina_List *selected;
545 E_Fm2_Icon_Info *ici;
546
547 if (!(hwin = data)) return;
548 if (!(selected = e_fm2_selected_list_get(hwin->o_fm))) return;
549 EINA_LIST_FREE(selected, ici)
550 {
551 Efreet_Desktop *desktop;
552
553 if ((!ici) || (!ici->real_link)) continue;
554 if (!(desktop = efreet_desktop_get(ici->real_link))) continue;
555 _il_home_desktop_run(hwin, desktop);
556 }
557}
558
559static Eina_Bool
560_il_home_desktop_cache_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
561{
562 if (defer) ecore_timer_del(defer);
563 defer = ecore_timer_add(0.5, _il_home_update_deferred, NULL);
564 return ECORE_CALLBACK_PASS_ON;
565}
566
567static Eina_Bool
568_il_home_cb_border_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
569{
570 E_Event_Client *ev;
571 Il_Home_Exec *exe;
572 Eina_List *l;
573
574 ev = event;
575 EINA_LIST_FOREACH(exes, l, exe)
576 {
577 if (!exe->client)
578 {
579 if ((exe->startup_id == ev->ec->netwm.startup_id) ||
580 (exe->pid == ev->ec->netwm.pid))
581 {
582 exe->client = ev->ec;
583 }
584 }
585 if (!exe->client) continue;
586 if (exe->client->zone != exe->zone)
587 {
588 exe->client->zone = exe->zone;
589 exe->client->x = exe->zone->x;
590 exe->client->y = exe->zone->y;
591 exe->client->changes.pos = 1;
592 EC_CHANGED(exe->client);
593 }
594 if (exe->handle)
595 {
596 e_busycover_pop(exe->cover, exe->handle);
597 exe->handle = NULL;
598 }
599 if (exe->timeout) ecore_timer_del(exe->timeout);
600 exe->timeout = NULL;
601 }
602 return ECORE_CALLBACK_PASS_ON;
603}
604
605static Eina_Bool
606_il_home_cb_border_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
607{
608 E_Event_Client *ev;
609 Il_Home_Exec *exe;
610 Eina_List *l;
611
612 ev = event;
613 EINA_LIST_FOREACH(exes, l, exe)
614 {
615 if (exe->client == ev->ec)
616 {
617 exe->exec = NULL;
618 if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
619 exe->handle = NULL;
620 exe->client = NULL;
621 exes = eina_list_remove(exes, exe);
622 E_FREE(exe);
623 break;
624 }
625 }
626 return ECORE_CALLBACK_PASS_ON;
627}
628
629static Eina_Bool
630_il_home_cb_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
631{
632 Il_Home_Exec *exe;
633 Ecore_Exe_Event_Del *ev;
634 Eina_List *l;
635
636 ev = event;
637 EINA_LIST_FOREACH(exes, l, exe)
638 {
639 if (exe->pid == ev->pid)
640 {
641 if (exe->handle)
642 {
643 e_busycover_pop(exe->cover, exe->handle);
644 exe->handle = NULL;
645 }
646 exes = eina_list_remove_list(exes, l);
647 if (exe->timeout) ecore_timer_del(exe->timeout);
648 if (exe->desktop) efreet_desktop_free(exe->desktop);
649 E_FREE(exe);
650 break;
651 }
652 }
653 return ECORE_CALLBACK_PASS_ON;
654}
655
656static Eina_Bool
657_il_home_cb_exe_timeout(void *data)
658{
659 Il_Home_Exec *exe;
660
661 if (!(exe = data)) return ECORE_CALLBACK_CANCEL;
662 if (exe->handle) e_busycover_pop(exe->cover, exe->handle);
663 exe->handle = NULL;
664 if (!exe->client)
665 {
666 exes = eina_list_remove(exes, exe);
667 if (exe->desktop) efreet_desktop_free(exe->desktop);
668 E_FREE(exe);
669 return ECORE_CALLBACK_CANCEL;
670 }
671 exe->timeout = NULL;
672 return ECORE_CALLBACK_CANCEL;
673}
674
675static Eina_Bool
676_il_home_cb_client_message(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
677{
678 Ecore_X_Event_Client_Message *ev;
679
680 ev = event;
681 if (ev->message_type == ECORE_X_ATOM_E_ILLUME_HOME_NEW)
682 {
683 E_Zone *zone;
684
685 zone = e_util_zone_window_find(ev->win);
686 if (zone->black_win != ev->win) return ECORE_CALLBACK_PASS_ON;
687 _il_home_win_new(zone);
688 }
689 else if (ev->message_type == ECORE_X_ATOM_E_ILLUME_HOME_DEL)
690 {
691 E_Client *ec;
692 Eina_List *l;
693 Il_Home_Win *hwin;
694
695 if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->win))) return ECORE_CALLBACK_PASS_ON;
696 EINA_LIST_FOREACH(hwins, l, hwin)
697 {
698 if (hwin->win->client == ec)
699 {
700 hwins = eina_list_remove_list(hwins, hwins);
701 e_object_del(E_OBJECT(hwin));
702 break;
703 }
704 }
705 }
706 return ECORE_CALLBACK_PASS_ON;
707}
708
709static Eina_Bool
710_il_home_cb_prop_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
711{
712 Ecore_X_Event_Window_Property *ev;
713 Il_Home_Win *hwin;
714 Eina_List *l;
715
716 ev = event;
717 if (ev->atom != ATM_ENLIGHTENMENT_SCALE) return ECORE_CALLBACK_PASS_ON;
718 EINA_LIST_FOREACH(hwins, l, hwin)
719 if (hwin->o_fm)
720 {
721 _il_home_fmc_set(hwin->o_fm);
722 e_fm2_refresh(hwin->o_fm);
723 }
724
725 return ECORE_CALLBACK_PASS_ON;
726}
727
728static Eina_Bool
729_il_home_cb_bg_change(void *data EINA_UNUSED, int type, void *event EINA_UNUSED)
730{
731 Il_Home_Win *hwin;
732 Eina_List *l;
733
734 if (type != E_EVENT_BG_UPDATE) return ECORE_CALLBACK_PASS_ON;
735
736 EINA_LIST_FOREACH(hwins, l, hwin)
737 {
738 E_Zone *zone;
739 E_Desk *desk;
740 const char *bgfile;
741
742 zone = hwin->zone;
743 desk = e_desk_current_get(zone);
744 if (desk)
745 bgfile = e_bg_file_get(e_comp->num, zone->num, desk->x, desk->y);
746 else
747 bgfile = e_bg_file_get(e_comp->num, zone->num, -1, -1);
748 edje_object_file_set(hwin->o_bg, bgfile, "e/desktop/background");
749 eina_stringshare_del(bgfile);
750 }
751
752 return ECORE_CALLBACK_PASS_ON;
753}
diff --git a/illume-home/e_mod_main.h b/illume-home/e_mod_main.h
new file mode 100644
index 0000000..8951e42
--- /dev/null
+++ b/illume-home/e_mod_main.h
@@ -0,0 +1,6 @@
1#ifndef E_MOD_MAIN_H
2#define E_MOD_MAIN_H
3
4void il_home_win_cfg_update(void);
5
6#endif
diff --git a/illume-home/module.desktop.in b/illume-home/module.desktop.in
new file mode 100644
index 0000000..f175e6a
--- /dev/null
+++ b/illume-home/module.desktop.in
@@ -0,0 +1,14 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Illume-Home
5Name[ca]=Illume-Home
6Name[de]=Illume-Start
7Name[el]=Illume-Home
8Name[eo]=Illume-Hejmo
9Name[fr]=Accueil Illume
10Name[ms]=Illume-Home
11Name[sr]=Лични одсјај
12Name[tr]=Illume-Ev
13Icon=e-module-illume-home
14X-Enlightenment-ModuleType=mobile
diff --git a/illume-indicator/.gitignore b/illume-indicator/.gitignore
new file mode 100644
index 0000000..e11184d
--- /dev/null
+++ b/illume-indicator/.gitignore
@@ -0,0 +1 @@
e-module-illume-indicator.edj
diff --git a/illume-indicator/e_mod_config.c b/illume-indicator/e_mod_config.c
new file mode 100644
index 0000000..ca8a9eb
--- /dev/null
+++ b/illume-indicator/e_mod_config.c
@@ -0,0 +1,51 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_config.h"
4
5/* local variables */
6EAPI Il_Ind_Config *il_ind_cfg = NULL;
7static E_Config_DD *conf_edd = NULL;
8
9int
10il_ind_config_init(void)
11{
12 conf_edd = E_CONFIG_DD_NEW("Illume-Indicator_Cfg", Il_Ind_Config);
13 #undef T
14 #undef D
15 #define T Il_Ind_Config
16 #define D conf_edd
17 E_CONFIG_VAL(D, T, version, INT);
18 E_CONFIG_VAL(D, T, height, INT);
19
20 il_ind_cfg = e_config_domain_load("module.illume-indicator", conf_edd);
21 if ((il_ind_cfg) &&
22 ((il_ind_cfg->version >> 16) < IL_CONFIG_MAJ))
23 {
24 E_FREE(il_ind_cfg);
25 }
26 if (!il_ind_cfg)
27 {
28 il_ind_cfg = E_NEW(Il_Ind_Config, 1);
29 il_ind_cfg->version = 0;
30 il_ind_cfg->height = 32;
31 }
32 if (il_ind_cfg)
33 il_ind_cfg->version = (IL_CONFIG_MAJ << 16) | IL_CONFIG_MIN;
34
35 return 1;
36}
37
38int
39il_ind_config_shutdown(void)
40{
41 E_FREE(il_ind_cfg);
42 E_CONFIG_DD_FREE(conf_edd);
43
44 return 1;
45}
46
47int
48il_ind_config_save(void)
49{
50 return e_config_domain_save("module.illume-indicator", conf_edd, il_ind_cfg);
51}
diff --git a/illume-indicator/e_mod_config.h b/illume-indicator/e_mod_config.h
new file mode 100644
index 0000000..413691d
--- /dev/null
+++ b/illume-indicator/e_mod_config.h
@@ -0,0 +1,20 @@
1#ifndef E_MOD_CONFIG_H
2#define E_MOD_CONFIG_H
3
4#define IL_CONFIG_MIN 0
5#define IL_CONFIG_MAJ 0
6
7typedef struct _Il_Ind_Config Il_Ind_Config;
8
9struct _Il_Ind_Config
10{
11 int version, height;
12};
13
14int il_ind_config_init(void);
15int il_ind_config_shutdown(void);
16int il_ind_config_save(void);
17
18extern EAPI Il_Ind_Config *il_ind_cfg;
19
20#endif
diff --git a/illume-indicator/e_mod_ind_win.c b/illume-indicator/e_mod_ind_win.c
new file mode 100644
index 0000000..b74daff
--- /dev/null
+++ b/illume-indicator/e_mod_ind_win.c
@@ -0,0 +1,537 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_config.h"
4#include "e_mod_ind_win.h"
5
6/* local function prototypes */
7static void _e_mod_ind_win_cb_free(Ind_Win *iwin);
8static Eina_Bool _e_mod_ind_win_cb_win_prop(void *data, int type EINA_UNUSED, void *event);
9static Eina_Bool _e_mod_ind_win_cb_zone_resize(void *data, int type EINA_UNUSED, void *event);
10static void _e_mod_ind_win_cb_resize(E_Win *win);
11static void _e_mod_ind_win_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event);
12static void _e_mod_ind_win_cb_mouse_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event);
13static void _e_mod_ind_win_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event);
14static void _e_mod_ind_win_cb_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w EINA_UNUSED, Evas_Coord h);
15/* static void _e_mod_ind_win_cb_size_request(void *data EINA_UNUSED, E_Gadcon *gc EINA_UNUSED, Evas_Coord w EINA_UNUSED, Evas_Coord h EINA_UNUSED); */
16static Evas_Object *_e_mod_ind_win_cb_frame_request(void *data EINA_UNUSED, E_Gadcon_Client *gcc EINA_UNUSED, const char *style EINA_UNUSED);
17static void _e_mod_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc EINA_UNUSED, E_Menu *mn);
18static void _e_mod_ind_win_cb_menu_append(Ind_Win *iwin, E_Menu *mn);
19static void _e_mod_ind_win_cb_menu_pre(void *data, E_Menu *mn);
20static void _e_mod_ind_win_cb_menu_post(void *data, E_Menu *mn EINA_UNUSED);
21static void _e_mod_ind_win_cb_menu_contents(void *data, E_Menu *mn EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED);
22static void _e_mod_ind_win_cb_menu_edit(void *data, E_Menu *mn EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED);
23
24Ind_Win *
25e_mod_ind_win_new(E_Zone *zone)
26{
27 Ind_Win *iwin;
28 Ecore_X_Window_State states[2];
29 Evas_Coord h = 0, mw = 0, mh = 0;
30
31 /* create our new indicator window object */
32 iwin = E_OBJECT_ALLOC(Ind_Win, IND_WIN_TYPE, _e_mod_ind_win_cb_free);
33 if (!iwin) return NULL;
34
35 h = (il_ind_cfg->height * e_scale);
36 iwin->zone = zone;
37
38 /* create new window */
39 iwin->win = e_win_new(e_comp);
40 iwin->win->data = iwin;
41
42 /* set some properties on the window */
43 e_win_title_set(iwin->win, _("Illume Indicator"));
44 e_win_name_class_set(iwin->win, "Illume-Indicator", "Illume-Indicator");
45 e_win_no_remember_set(iwin->win, EINA_TRUE);
46
47 /* hook into window resize so we can resize our objects */
48 evas_object_resize_callback_set(iwin->win, _e_mod_ind_win_cb_resize);
49
50 /* set this window to not show in taskbar or pager */
51 states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
52 states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER;
53 ecore_x_netwm_window_state_set(iwin->win->evas_win, states, 2);
54
55 /* set this window to not accept or take focus */
56 ecore_x_icccm_hints_set(iwin->win->evas_win, 0, 0, 0, 0, 0, 0, 0);
57
58 /* create our event rectangle */
59 iwin->o_event = evas_object_rectangle_add(iwin->win->evas);
60 evas_object_color_set(iwin->o_event, 0, 0, 0, 0);
61 evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_DOWN,
62 _e_mod_ind_win_cb_mouse_down, iwin);
63 evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_UP,
64 _e_mod_ind_win_cb_mouse_up, iwin);
65 evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_MOVE,
66 _e_mod_ind_win_cb_mouse_move, iwin);
67 evas_object_move(iwin->o_event, 0, 0);
68 evas_object_show(iwin->o_event);
69
70 /* create our base object */
71 iwin->o_base = edje_object_add(iwin->win->evas);
72 if (!e_theme_edje_object_set(iwin->o_base,
73 "base/theme/modules/illume-indicator",
74 "modules/illume-indicator/window"))
75 {
76 char buff[PATH_MAX];
77
78 snprintf(buff, sizeof(buff),
79 "%s/e-module-illume-indicator.edj", _ind_mod_dir);
80 edje_object_file_set(iwin->o_base, buff,
81 "modules/illume-indicator/window");
82 }
83 evas_object_move(iwin->o_base, 0, 0);
84 evas_object_show(iwin->o_base);
85
86 /* create our gadget container */
87 iwin->gadcon = e_gadcon_swallowed_new("illume-indicator", zone->num,
88 iwin->o_base, "e.swallow.content");
89 evas_object_size_hint_min_set(iwin->gadcon->o_container, h, h);
90 e_gadcon_min_size_request_callback_set(iwin->gadcon,
91 _e_mod_ind_win_cb_min_size_request,
92 iwin);
93 /* e_gadcon_size_request_callback_set(iwin->gadcon, */
94 /* _e_mod_ind_win_cb_size_request, iwin); */
95 e_gadcon_frame_request_callback_set(iwin->gadcon,
96 _e_mod_ind_win_cb_frame_request, iwin);
97 e_gadcon_orient(iwin->gadcon, E_GADCON_ORIENT_TOP);
98 e_gadcon_zone_set(iwin->gadcon, zone);
99 e_gadcon_ecore_evas_set(iwin->gadcon, iwin->win->ecore_evas);
100
101 e_gadcon_util_menu_attach_func_set(iwin->gadcon,
102 _e_mod_ind_win_cb_menu_items_append,
103 iwin);
104 e_gadcon_populate(iwin->gadcon);
105
106 /* hook into property change so we can adjust w/ e_scale */
107 iwin->hdls =
108 eina_list_append(iwin->hdls,
109 ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY,
110 _e_mod_ind_win_cb_win_prop, iwin));
111
112 /* hook into zone resize so we can set minimum window width when zone
113 * size changes */
114 iwin->hdls =
115 eina_list_append(iwin->hdls,
116 ecore_event_handler_add(E_EVENT_ZONE_MOVE_RESIZE,
117 _e_mod_ind_win_cb_zone_resize,
118 iwin));
119
120 edje_object_size_min_calc(iwin->o_base, &mw, &mh);
121// printf("@@@@@@@@@@@@@@@@@@@@@@@ %i: %ix%i\n", h, mw, mh);
122
123 /* set minimum size of this window */
124 evas_object_size_hint_min_set(iwin->win, zone->w, mh);
125
126 /* position and resize this window */
127 evas_object_geometry_set(iwin->win, zone->x, zone->y, zone->w, mh);
128
129 /* show the window */
130 evas_object_show(iwin->win);
131
132 /* set this window on proper zone */
133 e_client_zone_set(iwin->win->client, zone);
134 iwin->win->client->user_skip_winlist = 1;
135 iwin->win->client->lock_focus_in = 1;
136 iwin->win->client->lock_focus_out = 1;
137
138 /* set this window to be a dock window. This needs to be done after show
139 * as E will sometimes reset the window type */
140 ecore_x_netwm_window_type_set(iwin->win->evas_win, E_WINDOW_TYPE_DOCK);
141
142 /* tell conformant apps our position and size */
143 ecore_x_e_illume_indicator_geometry_set(zone->black_win, zone->x, zone->y,
144 zone->w, mh);
145
146 return iwin;
147}
148
149/* local function prototypes */
150static void
151_e_mod_ind_win_cb_free(Ind_Win *iwin)
152{
153 Ecore_Event_Handler *hdl;
154
155 /* delete the handlers */
156 EINA_LIST_FREE(iwin->hdls, hdl)
157 ecore_event_handler_del(hdl);
158
159 /* delete the menu */
160 if (iwin->menu)
161 {
162 e_menu_post_deactivate_callback_set(iwin->menu, NULL, NULL);
163 e_object_del(E_OBJECT(iwin->menu));
164 }
165 iwin->menu = NULL;
166
167 /* delete the gadget container */
168 if (iwin->gadcon) e_object_del(E_OBJECT(iwin->gadcon));
169 iwin->gadcon = NULL;
170
171 /* delete the objects */
172 if (iwin->o_base) evas_object_del(iwin->o_base);
173 iwin->o_base = NULL;
174 if (iwin->o_event) evas_object_del(iwin->o_event);
175 iwin->o_event = NULL;
176
177 /* tell conformant apps our position and size */
178 ecore_x_e_illume_indicator_geometry_set(iwin->zone->black_win, 0, 0, 0, 0);
179
180 /* delete the window */
181 if (iwin->win) e_object_del(E_OBJECT(iwin->win));
182 iwin->win = NULL;
183
184 /* free the allocated object */
185 E_FREE(iwin);
186}
187
188static Eina_Bool
189_e_mod_ind_win_cb_win_prop(void *data, int type EINA_UNUSED, void *event)
190{
191 Ind_Win *iwin;
192 Ecore_X_Event_Window_Property *ev;
193 Evas_Coord mw = 0, mh = 0;
194
195 ev = event;
196
197 if (!(iwin = data)) return ECORE_CALLBACK_PASS_ON;
198 if (ev->win != iwin->win->comp->man->root)
199 return ECORE_CALLBACK_PASS_ON;
200 if (ev->atom != ATM_ENLIGHTENMENT_SCALE) return ECORE_CALLBACK_PASS_ON;
201
202 edje_object_size_min_calc(iwin->o_base, &mw, &mh);
203// printf("@@@@@@@@@@@@@@@@@@@@@@@ %i: %ix%i\n", h, mw, mh);
204
205 /* set minimum size of this window */
206 evas_object_size_hint_min_set(iwin->win, iwin->zone->w, mh);
207
208 /* NB: Not sure why, but we need to tell this border to fetch icccm
209 * size position hints now :( (NOTE: This was not needed a few days ago)
210 * If we do not do this, than indicator does not change w/ scale anymore */
211 iwin->win->client->icccm.fetch.size_pos_hints = 1;
212
213 /* resize this window */
214 evas_object_resize(iwin->win, iwin->zone->w, mh);
215
216 /* tell conformant apps our position and size */
217 ecore_x_e_illume_indicator_geometry_set(iwin->zone->black_win,
218 iwin->win->x, iwin->win->y,
219 iwin->win->w, mh);
220
221 return ECORE_CALLBACK_PASS_ON;
222}
223
224static Eina_Bool
225_e_mod_ind_win_cb_zone_resize(void *data, int type EINA_UNUSED, void *event)
226{
227 Ind_Win *iwin;
228 E_Event_Zone_Move_Resize *ev;
229 Evas_Coord mw = 0, mh = 0;
230
231 ev = event;
232 if (!(iwin = data)) return ECORE_CALLBACK_PASS_ON;
233 if (ev->zone != iwin->zone) return ECORE_CALLBACK_PASS_ON;
234
235 edje_object_size_min_calc(iwin->o_base, &mw, &mh);
236// printf("@@@@@@@@@@@@@@@@@@@@@@@ %i: %ix%i\n", h, mw, mh);
237
238 /* set minimum size of this window to match zone size */
239 evas_object_size_hint_min_set(iwin->win, ev->zone->w, mh);
240
241 return ECORE_CALLBACK_PASS_ON;
242}
243
244static void
245_e_mod_ind_win_cb_resize(E_Win *win)
246{
247 Ind_Win *iwin;
248
249 if (!(iwin = win->data)) return;
250 if (iwin->o_event) evas_object_resize(iwin->o_event, win->w, win->h);
251 if (iwin->o_base) evas_object_resize(iwin->o_base, win->w, win->h);
252 if (iwin->gadcon->o_container)
253 {
254// evas_object_size_hint_min_set(iwin->gadcon->o_container,
255// win->w, win->h);
256 }
257}
258
259static void
260_e_mod_ind_win_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
261{
262 Ind_Win *iwin;
263 Evas_Event_Mouse_Down *ev;
264
265 ev = event;
266 if (!(iwin = data)) return;
267 if (ev->button == 1)
268 {
269 iwin->mouse_down = 1;
270
271 /* make sure we can drag */
272 if (iwin->win->client->illume.drag.locked) return;
273
274 iwin->drag.start = 1;
275 iwin->drag.dnd = 0;
276 iwin->drag.y = ev->output.y;
277 iwin->drag.by = iwin->win->client->y;
278 }
279 else if (ev->button == 3)
280 {
281 int x, y;
282
283 /* create our popup menu */
284 iwin->menu = e_menu_new();
285 e_menu_post_deactivate_callback_set(iwin->menu,
286 _e_mod_ind_win_cb_menu_post, iwin);
287
288 /* append items to our menu */
289 _e_mod_ind_win_cb_menu_append(iwin, iwin->menu);
290
291 /* show menu */
292 e_gadcon_canvas_zone_geometry_get(iwin->gadcon, &x, &y, NULL, NULL);
293 e_menu_activate_mouse(iwin->menu, iwin->zone, x + ev->output.x,
294 y + ev->output.y, 1, 1,
295 E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
296 }
297}
298
299static void
300_e_mod_ind_win_cb_mouse_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
301{
302 Ind_Win *iwin;
303 Evas_Event_Mouse_Up *ev;
304
305 ev = event;
306 if (!(iwin = data)) return;
307
308 if (ev->button != 1) return;
309
310 /* if we are not dragging, send message to toggle quickpanel state */
311 if ((!iwin->drag.dnd) && (iwin->mouse_down == 1))
312 {
313 Ecore_X_Window xwin;
314
315 xwin = iwin->win->client->zone->black_win;
316 ecore_x_e_illume_quickpanel_state_toggle(xwin);
317 }
318 else if (iwin->drag.dnd)
319 {
320 E_Client *ec;
321
322 ec = iwin->win->client;
323
324 /* reset mouse pointer */
325 e_pointer_type_pop(e_comp->pointer, ec, "move");
326
327 /* tell edj we are done moving */
328 edje_object_signal_emit(iwin->o_base, "e,action,move,stop", "e");
329
330 /* send message that we are done dragging */
331 ecore_x_e_illume_drag_end_send(e_client_util_win_get(ec));
332
333 /* update quickpanel position if needed */
334 if (ec->y != iwin->drag.by)
335 ecore_x_e_illume_quickpanel_position_update_send(e_client_util_win_get(ec));
336
337 /* tell conformant apps our position and size */
338 ecore_x_e_illume_indicator_geometry_set(iwin->zone->black_win,
339 ec->x, ec->y,
340 ec->w, ec->h);
341 }
342 iwin->drag.start = 0;
343 iwin->drag.dnd = 0;
344 iwin->drag.y = 0;
345 iwin->drag.by = 0;
346 iwin->mouse_down = 0;
347}
348
349static void
350_e_mod_ind_win_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
351{
352 Ind_Win *iwin;
353 Evas_Event_Mouse_Move *ev;
354 E_Client *ec;
355
356 ev = event;
357 if (!(iwin = data)) return;
358 ec = iwin->win->client;
359 if (iwin->drag.start)
360 {
361 iwin->drag.dnd = 1;
362 iwin->drag.start = 0;
363
364 /* change mouse pointer to indicate we are dragging */
365 e_pointer_type_push(e_comp->pointer,
366 iwin->win->client, "move");
367
368 /* tell edj we are going to start moving */
369 edje_object_signal_emit(iwin->o_base, "e,action,move,start", "e");
370
371 /* tell quickpanel to hide because we are going to drag */
372 ecore_x_e_illume_quickpanel_state_send(ec->zone->black_win,
373 ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
374
375 /* send message that we are going to start dragging */
376 ecore_x_e_illume_drag_start_send(e_client_util_win_get(ec));
377 }
378
379 /* make sure we are dragging */
380 if (iwin->drag.dnd)
381 {
382 int dy, py, ny;
383
384 /* get current mouse position */
385 py = ev->cur.output.y;
386
387 /* do moves in 'chunks' of screen size */
388 dy = ((ec->zone->h - ec->h) / 8);
389
390 /* are we moving up or down ? */
391 if (ev->cur.output.y > ev->prev.output.y)
392 {
393 /* moving down */
394 if ((py - iwin->drag.y) < dy) return;
395 }
396 else if (ev->cur.output.y < ev->prev.output.y)
397 {
398 /* moving up */
399 if ((iwin->drag.y - py) < dy) return;
400 }
401 else return;
402
403 if (py > iwin->drag.y)
404 ny = ec->y + dy;
405 else if (py < iwin->drag.y)
406 ny = ec->y - dy;
407 else return;
408
409 /* make sure we don't drag off the screen */
410 if (ny < iwin->zone->y)
411 ny = iwin->zone->y;
412 else if ((ny + ec->h) > (iwin->zone->y + iwin->zone->h))
413 return;
414
415 /* move the border if we need to */
416 if (ec->y != ny)
417 {
418 ec->y = ny;
419 ec->changes.pos = 1;
420 EC_CHANGED(ec);
421 evas_object_move(iwin->win, iwin->win->x, ny);
422 }
423 }
424}
425
426static void
427_e_mod_ind_win_cb_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w EINA_UNUSED, Evas_Coord h)
428{
429 Ind_Win *iwin;
430
431 if (!(iwin = data)) return;
432 if (gc != iwin->gadcon) return;
433 if (h < iwin->win->h) h = iwin->win->h;
434// evas_object_size_hint_min_set(iwin->gadcon->o_container, w, h);
435}
436
437/* static void */
438/* _e_mod_ind_win_cb_size_request(void *data EINA_UNUSED, E_Gadcon *gc EINA_UNUSED, Evas_Coord w EINA_UNUSED, Evas_Coord h EINA_UNUSED) */
439/* { */
440/* return; */
441/* } */
442
443static Evas_Object *
444_e_mod_ind_win_cb_frame_request(void *data EINA_UNUSED, E_Gadcon_Client *gcc EINA_UNUSED, const char *style EINA_UNUSED)
445{
446 return NULL;
447}
448
449static void
450_e_mod_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc EINA_UNUSED, E_Menu *mn)
451{
452 Ind_Win *iwin;
453
454 if (!(iwin = data)) return;
455 _e_mod_ind_win_cb_menu_append(iwin, mn);
456}
457
458static void
459_e_mod_ind_win_cb_menu_append(Ind_Win *iwin, E_Menu *mn)
460{
461 E_Menu *subm;
462 E_Menu_Item *mi;
463 char buff[PATH_MAX];
464
465 snprintf(buff, sizeof(buff),
466 "%s/e-module-illume-indicator.edj", _ind_mod_dir);
467
468 subm = e_menu_new();
469 mi = e_menu_item_new(mn);
470 e_menu_item_label_set(mi, _("Illume Indicator"));
471 e_menu_item_icon_edje_set(mi, buff, "icon");
472 e_menu_pre_activate_callback_set(subm, _e_mod_ind_win_cb_menu_pre, iwin);
473 e_menu_item_submenu_set(mi, subm);
474 e_object_unref(E_OBJECT(subm));
475}
476
477static void
478_e_mod_ind_win_cb_menu_pre(void *data, E_Menu *mn)
479{
480 Ind_Win *iwin;
481 E_Menu_Item *mi;
482
483 if (!(iwin = data)) return;
484 e_menu_pre_activate_callback_set(mn, NULL, NULL);
485
486 mi = e_menu_item_new(mn);
487 e_menu_item_label_set(mi, _("Set Contents"));
488 e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf");
489 e_menu_item_callback_set(mi, _e_mod_ind_win_cb_menu_contents, iwin);
490
491 mi = e_menu_item_new(mn);
492 if (iwin->gadcon->editing)
493 e_menu_item_label_set(mi, _("End Move/Resize Items"));
494 else
495 e_menu_item_label_set(mi, _("Begin Move/Resize Items"));
496
497 e_util_menu_item_theme_icon_set(mi, "transform-scale");
498 e_menu_item_callback_set(mi, _e_mod_ind_win_cb_menu_edit, iwin);
499}
500
501static void
502_e_mod_ind_win_cb_menu_post(void *data, E_Menu *mn EINA_UNUSED)
503{
504 Ind_Win *iwin;
505
506 if (!(iwin = data)) return;
507 if (!iwin->menu) return;
508 e_object_del(E_OBJECT(iwin->menu));
509 iwin->menu = NULL;
510}
511
512static void
513_e_mod_ind_win_cb_menu_contents(void *data, E_Menu *mn EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
514{
515 Ind_Win *iwin;
516
517 if (!(iwin = data)) return;
518 if (!iwin->gadcon->config_dialog)
519 e_int_gadcon_config_shelf(iwin->gadcon);
520 else
521 {
522 evas_object_show(iwin->gadcon->config_dialog->dia->win);
523 elm_win_raise(iwin->gadcon->config_dialog->dia->win);
524 }
525}
526
527static void
528_e_mod_ind_win_cb_menu_edit(void *data, E_Menu *mn EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
529{
530 Ind_Win *iwin;
531
532 if (!(iwin = data)) return;
533 if (iwin->gadcon->editing)
534 e_gadcon_edit_end(iwin->gadcon);
535 else
536 e_gadcon_edit_begin(iwin->gadcon);
537}
diff --git a/illume-indicator/e_mod_ind_win.h b/illume-indicator/e_mod_ind_win.h
new file mode 100644
index 0000000..aa2dd1c
--- /dev/null
+++ b/illume-indicator/e_mod_ind_win.h
@@ -0,0 +1,31 @@
1#ifndef E_MOD_IND_WIN_H
2# define E_MOD_IND_WIN_H
3
4/* define indicator window object type */
5# define IND_WIN_TYPE 0xE1b0886
6
7/* define structure for indicator window */
8typedef struct _Ind_Win Ind_Win;
9struct _Ind_Win
10{
11 E_Object e_obj_inherit;
12
13 E_Zone *zone;
14 Eina_List *hdls;
15
16 E_Win *win;
17 Evas_Object *o_base, *o_event;
18 E_Gadcon *gadcon;
19 E_Menu *menu;
20
21 struct
22 {
23 int y, start, dnd, by;
24 } drag;
25
26 int mouse_down;
27};
28
29Ind_Win *e_mod_ind_win_new(E_Zone *zone);
30
31#endif
diff --git a/illume-indicator/e_mod_main.c b/illume-indicator/e_mod_main.c
new file mode 100644
index 0000000..1de11eb
--- /dev/null
+++ b/illume-indicator/e_mod_main.c
@@ -0,0 +1,105 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_config.h"
4#include "e_mod_ind_win.h"
5
6#ifdef HAVE_ENOTIFY
7# include "e_mod_notify.h"
8#endif
9
10/* local variables */
11static Eina_List *iwins = NULL;
12
13/* external variables */
14const char *_ind_mod_dir = NULL;
15
16EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume-Indicator" };
17
18EAPI void *
19e_modapi_init(E_Module *m)
20{
21 const Eina_List *l;
22 E_Comp *comp;
23
24 /* set module priority so we load before others */
25 e_module_priority_set(m, 90);
26
27 /* set module directory variable */
28 _ind_mod_dir = eina_stringshare_add(m->dir);
29
30 /* init config subsystem */
31 if (!il_ind_config_init())
32 {
33 /* clear module directory variable */
34 if (_ind_mod_dir) eina_stringshare_del(_ind_mod_dir);
35 _ind_mod_dir = NULL;
36 return NULL;
37 }
38
39#ifdef HAVE_ENOTIFY
40 if (!(e_mod_notify_init()))
41 {
42 /* shutdown config */
43 il_ind_config_shutdown();
44
45 /* clear module directory variable */
46 if (_ind_mod_dir) eina_stringshare_del(_ind_mod_dir);
47 _ind_mod_dir = NULL;
48 return NULL;
49 }
50#endif
51
52 EINA_LIST_FOREACH(e_comp_list(), l, comp)
53 {
54 E_Zone *zone;
55 Eina_List *zl;
56
57 /* TODO: Make this configurable so illume2 can be run
58 * on just one zone/screen/etc */
59
60 /* for each zone, create an indicator window */
61 EINA_LIST_FOREACH(comp->zones, zl, zone)
62 {
63 Ind_Win *iwin;
64
65 /* try to create new indicator window */
66 if (!(iwin = e_mod_ind_win_new(zone))) continue;
67 iwins = eina_list_append(iwins, iwin);
68 }
69 }
70
71 return m;
72}
73
74EAPI int
75e_modapi_shutdown(E_Module *m EINA_UNUSED)
76{
77 Ind_Win *iwin;
78
79 /* destroy the indicator windows */
80 EINA_LIST_FREE(iwins, iwin)
81 e_object_del(E_OBJECT(iwin));
82
83 /* reset indicator geometry for conformant apps */
84 ecore_x_e_illume_indicator_geometry_set(ecore_x_window_root_first_get(),
85 0, 0, 0, 0);
86
87#ifdef HAVE_ENOTIFY
88 e_mod_notify_shutdown();
89#endif
90
91 /* shutdown config */
92 il_ind_config_shutdown();
93
94 /* clear module directory variable */
95 if (_ind_mod_dir) eina_stringshare_del(_ind_mod_dir);
96 _ind_mod_dir = NULL;
97
98 return 1;
99}
100
101EAPI int
102e_modapi_save(E_Module *m EINA_UNUSED)
103{
104 return il_ind_config_save();
105}
diff --git a/illume-indicator/e_mod_main.h b/illume-indicator/e_mod_main.h
new file mode 100644
index 0000000..71ebb9f
--- /dev/null
+++ b/illume-indicator/e_mod_main.h
@@ -0,0 +1,6 @@
1#ifndef E_MOD_MAIN_H
2# define E_MOD_MAIN_H
3
4extern const char *_ind_mod_dir;
5
6#endif
diff --git a/illume-indicator/e_mod_notify.c b/illume-indicator/e_mod_notify.c
new file mode 100644
index 0000000..9976951
--- /dev/null
+++ b/illume-indicator/e_mod_notify.c
@@ -0,0 +1,262 @@
1#include "e.h"
2#include "e_mod_main.h"
3#include "e_mod_notify.h"
4
5/* local function prototypes */
6static unsigned int _e_mod_notify_cb_add(void *data EINA_UNUSED, E_Notification_Notify *n);
7static void _e_mod_notify_cb_del(void *data EINA_UNUSED, unsigned int id);
8static Ind_Notify_Win *_e_mod_notify_find(unsigned int id);
9static void _e_mod_notify_refresh(Ind_Notify_Win *nwin);
10static Ind_Notify_Win *_e_mod_notify_new(E_Notification_Notify *n, unsigned id);
11static Eina_Bool _e_mod_notify_cb_timeout(void *data);
12static void _e_mod_notify_cb_free(Ind_Notify_Win *nwin);
13static void _e_mod_notify_cb_resize(E_Win *win);
14
15/* local variables */
16static Eina_List *_nwins = NULL;
17static int _notify_id = 0;
18
19static const E_Notification_Server_Info info = {
20 .name = "illume-indicator",
21 .vendor = "Enlightenment",
22 .version = "0.17",
23 .spec_version = "1.2",
24 .capabilities = { "body", NULL }
25};
26
27int
28e_mod_notify_init(void)
29{
30 /* init notification subsystem */
31 if (!e_notification_server_register(&info, _e_mod_notify_cb_add,
32 _e_mod_notify_cb_del, NULL))
33 return 0;
34 return 1;
35}
36
37int
38e_mod_notify_shutdown(void)
39{
40 Ind_Notify_Win *nwin;
41 Eina_List *l, *l2;
42
43 EINA_LIST_FOREACH_SAFE(_nwins, l, l2, nwin)
44 e_object_del(E_OBJECT(nwin));
45
46 e_notification_server_unregister();
47
48 return 1;
49}
50
51static unsigned int
52_e_mod_notify_cb_add(void *data EINA_UNUSED, E_Notification_Notify *n)
53{
54 Ind_Notify_Win *nwin = NULL;
55
56 _notify_id++;
57
58 if (n->replaces_id && (nwin = _e_mod_notify_find(n->replaces_id)))
59 {
60 if (nwin->notify)
61 e_object_del(E_OBJECT(nwin->notify));
62 nwin->notify = n;
63 nwin->id = _notify_id;
64 _e_mod_notify_refresh(nwin);
65 }
66
67 if (!nwin)
68 {
69 nwin = _e_mod_notify_new(n, _notify_id);
70 EINA_SAFETY_ON_NULL_RETURN_VAL(nwin, 0);
71 }
72
73 /* show it */
74 ecore_x_e_illume_quickpanel_state_send(nwin->zone->black_win,
75 ECORE_X_ILLUME_QUICKPANEL_STATE_ON);
76
77 if (nwin->timer) ecore_timer_del(nwin->timer);
78 nwin->timer = NULL;
79
80 if (n->timeout < 0) n->timeout = 3000.0;
81 n->timeout = n->timeout / 1000.0;
82
83 if (n->timeout > 0)
84 nwin->timer = ecore_timer_add(n->timeout, _e_mod_notify_cb_timeout, nwin);
85
86 return _notify_id;
87}
88
89static void
90_e_mod_notify_cb_del(void *data EINA_UNUSED, unsigned int id)
91{
92 Ind_Notify_Win *nwin = _e_mod_notify_find(id);
93 if (!nwin)
94 return;
95
96 e_object_del(E_OBJECT(nwin));
97}
98
99static
100Ind_Notify_Win *
101_e_mod_notify_find(unsigned int id)
102{
103 const Eina_List *l;
104 Ind_Notify_Win *nwin;
105
106 EINA_LIST_FOREACH(_nwins, l, nwin)
107 if (nwin->id == id)
108 return nwin;
109 return NULL;
110}
111
112static void
113_e_mod_notify_refresh(Ind_Notify_Win *nwin)
114{
115 const char *icon;
116 Evas_Coord mw, mh;
117 int size;
118
119 if (!nwin) return;
120
121 if (nwin->o_icon)
122 {
123 edje_object_part_unswallow(nwin->o_base, nwin->o_icon);
124 evas_object_del(nwin->o_icon);
125 }
126
127 size = (48 * e_scale);
128 if (nwin->notify->icon.raw.data)
129 {
130 nwin->o_icon = e_notification_notify_raw_image_get(nwin->notify,
131 nwin->win->evas);
132 if (nwin->o_icon)
133 evas_object_image_fill_set(nwin->o_icon, 0, 0, size, size);
134 }
135 else if (nwin->notify->icon.icon[0])
136 {
137 icon = nwin->notify->icon.icon;
138 if (!strncmp(icon, "file://", 7))
139 {
140 icon += 7;
141 nwin->o_icon = e_util_icon_add(icon, nwin->win->evas);
142 }
143 else
144 nwin->o_icon = e_util_icon_theme_icon_add(icon, size, nwin->win->evas);
145 }
146
147 if (nwin->o_icon)
148 {
149 evas_object_resize(nwin->o_icon, size, size);
150 evas_object_size_hint_min_set(nwin->o_icon, size, size);
151 evas_object_size_hint_max_set(nwin->o_icon, size, size);
152 edje_object_part_swallow(nwin->o_base, "e.swallow.icon", nwin->o_icon);
153 }
154
155 edje_object_part_text_set(nwin->o_base, "e.text.title", nwin->notify->summary);
156 edje_object_part_text_set(nwin->o_base, "e.text.message", nwin->notify->body);
157
158
159 edje_object_calc_force(nwin->o_base);
160 edje_object_size_min_calc(nwin->o_base, &mw, &mh);
161
162 evas_object_size_hint_min_set(nwin->o_base, mw, mh);
163 evas_object_size_hint_min_set(nwin->win, nwin->zone->w, mh);
164}
165
166static Ind_Notify_Win *
167_e_mod_notify_new(E_Notification_Notify *n, unsigned id)
168{
169 Ind_Notify_Win *nwin;
170 Ecore_X_Window_State states[2];
171 E_Zone *zone;
172
173 nwin = E_OBJECT_ALLOC(Ind_Notify_Win, IND_NOTIFY_WIN_TYPE,
174 _e_mod_notify_cb_free);
175 if (!nwin) return NULL;
176 _nwins = eina_list_append(_nwins, nwin);
177 nwin->notify = n;
178 nwin->id = id;
179
180 zone = e_zone_current_get();
181 nwin->zone = zone;
182
183 nwin->win = e_win_new(e_comp);
184 nwin->win->data = nwin;
185
186 e_win_name_class_set(nwin->win, "Illume-Notify", "Illume-Notify");
187 e_win_no_remember_set(nwin->win, EINA_TRUE);
188 evas_object_resize_callback_set(nwin->win, _e_mod_notify_cb_resize);
189
190 ecore_x_e_illume_quickpanel_set(nwin->win->evas_win, EINA_TRUE);
191 ecore_x_e_illume_quickpanel_priority_major_set(nwin->win->evas_win, n->urgency);
192 ecore_x_e_illume_quickpanel_zone_set(nwin->win->evas_win, zone->num);
193
194 states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR;
195 states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER;
196 ecore_x_netwm_window_state_set(nwin->win->evas_win, states, 2);
197 ecore_x_icccm_hints_set(nwin->win->evas_win, 0, 0, 0, 0, 0, 0, 0);
198
199 nwin->o_base = edje_object_add(nwin->win->evas);
200 if (!e_theme_edje_object_set(nwin->o_base,
201 "base/theme/modules/illume-indicator",
202 "modules/illume-indicator/notify"))
203 {
204 char buff[PATH_MAX];
205
206 snprintf(buff, sizeof(buff),
207 "%s/e-module-illume-indicator.edj", _ind_mod_dir);
208 edje_object_file_set(nwin->o_base, buff,
209 "modules/illume-indicator/notify");
210 }
211 evas_object_move(nwin->o_base, 0, 0);
212 evas_object_show(nwin->o_base);
213
214 _e_mod_notify_refresh(nwin);
215
216 evas_object_show(nwin->win);
217 e_client_zone_set(nwin->win->client, zone);
218 nwin->win->client->user_skip_winlist = 1;
219
220 return nwin;
221}
222
223static Eina_Bool
224_e_mod_notify_cb_timeout(void *data)
225{
226 Ind_Notify_Win *nwin;
227
228 if (!(nwin = data)) return EINA_FALSE;
229
230 /* hide it */
231 ecore_x_e_illume_quickpanel_state_send(nwin->zone->black_win,
232 ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
233 e_object_del(E_OBJECT(nwin));
234 return EINA_FALSE;
235}
236
237static void
238_e_mod_notify_cb_free(Ind_Notify_Win *nwin)
239{
240 if (nwin->timer) ecore_timer_del(nwin->timer);
241 nwin->timer = NULL;
242 if (nwin->o_icon) evas_object_del(nwin->o_icon);
243 nwin->o_icon = NULL;
244 if (nwin->o_base) evas_object_del(nwin->o_base);
245 nwin->o_base = NULL;
246 if (nwin->win) e_object_del(E_OBJECT(nwin->win));
247 nwin->win = NULL;
248 e_notification_notify_close(nwin->notify,
249 E_NOTIFICATION_NOTIFY_CLOSED_REASON_REQUESTED);
250 e_object_del(E_OBJECT(nwin->notify));
251 _nwins = eina_list_remove(_nwins, nwin);
252 E_FREE(nwin);
253}
254
255static void
256_e_mod_notify_cb_resize(E_Win *win)
257{
258 Ind_Notify_Win *nwin;
259
260 if (!(nwin = win->data)) return;
261 if (nwin->o_base) evas_object_resize(nwin->o_base, win->w, win->h);
262}
diff --git a/illume-indicator/e_mod_notify.h b/illume-indicator/e_mod_notify.h
new file mode 100644
index 0000000..196d98a
--- /dev/null
+++ b/illume-indicator/e_mod_notify.h
@@ -0,0 +1,23 @@
1#ifndef E_MOD_NOTIFY_H
2# define E_MOD_NOTIFY_H
3
4# define IND_NOTIFY_WIN_TYPE 0xE1b0887
5
6typedef struct _Ind_Notify_Win Ind_Notify_Win;
7struct _Ind_Notify_Win
8{
9 E_Object e_obj_inherit;
10
11 unsigned id;
12 E_Notification_Notify *notify;
13
14 E_Zone *zone;
15 E_Win *win;
16 Evas_Object *o_base, *o_icon;
17 Ecore_Timer *timer;
18};
19
20int e_mod_notify_init(void);
21int e_mod_notify_shutdown(void);
22
23#endif
diff --git a/illume-indicator/module.desktop.in b/illume-indicator/module.desktop.in
new file mode 100644
index 0000000..9e1b5aa
--- /dev/null
+++ b/illume-indicator/module.desktop.in
@@ -0,0 +1,14 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Illume-Indicator
5Name[ca]=Illume-Indicator
6Name[de]=Illume-Anzeige
7Name[el]=Illume-Indicator
8Name[eo]=Illume-Indikilo
9Name[fr]=Indicateur Illume
10Name[ms]=Penunjuk-Ilume
11Name[sr]=Указивач одсјаја
12Name[tr]=Illume-Gösterge
13Icon=e-module-illume-indicator
14X-Enlightenment-ModuleType=mobile
diff --git a/illume-kbd-toggle/e-module-illume-kbd-toggle.edj b/illume-kbd-toggle/e-module-illume-kbd-toggle.edj
new file mode 100644
index 0000000..45d0d5e
--- /dev/null
+++ b/illume-kbd-toggle/e-module-illume-kbd-toggle.edj
Binary files differ
diff --git a/illume-kbd-toggle/e_mod_main.c b/illume-kbd-toggle/e_mod_main.c
new file mode 100644
index 0000000..d8cb438
--- /dev/null
+++ b/illume-kbd-toggle/e_mod_main.c
@@ -0,0 +1,232 @@
1#include "e.h"
2
3/* local structures */
4typedef struct _Instance Instance;
5struct _Instance
6{
7 E_Gadcon_Client *gcc;
8 Evas_Object *o_toggle;
9 Eina_List *handlers;
10};
11
12/* local function prototypes */
13static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
14static void _gc_shutdown(E_Gadcon_Client *gcc);
15static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
16static const char *_gc_label(const E_Gadcon_Client_Class *cc);
17static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *cc, Evas *evas);
18static const char *_gc_id_new(const E_Gadcon_Client_Class *cc);
19static void _cb_action_vkbd_enable(void *data, Evas_Object *obj, const char *emission, const char *source);
20static void _cb_action_vkbd_disable(void *data, Evas_Object *obj, const char *emission, const char *source);
21static Eina_Bool _cb_border_focus_in(void *data, int type EINA_UNUSED, void *event);
22static Eina_Bool _cb_border_remove(void *data, int type EINA_UNUSED, void *event);
23static Eina_Bool _cb_border_property(void *data, int type EINA_UNUSED, void *event);
24static void _set_btn_icon(Evas_Object *obj, Ecore_X_Virtual_Keyboard_State state);
25
26/* local variables */
27static Eina_List *instances = NULL;
28static const char *mod_dir = NULL;
29
30static const E_Gadcon_Client_Class _gc_class =
31{
32 GADCON_CLIENT_CLASS_VERSION, "illume-kbd-toggle",
33 { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
34 e_gadcon_site_is_not_toolbar
35 }, E_GADCON_CLIENT_STYLE_PLAIN
36};
37
38/* public functions */
39EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Keyboard Toggle" };
40
41EAPI void *
42e_modapi_init(E_Module *m)
43{
44 mod_dir = eina_stringshare_add(m->dir);
45 e_gadcon_provider_register(&_gc_class);
46 return m;
47}
48
49EAPI int
50e_modapi_shutdown(E_Module *m EINA_UNUSED)
51{
52 e_gadcon_provider_unregister(&_gc_class);
53 if (mod_dir) eina_stringshare_del(mod_dir);
54 mod_dir = NULL;
55 return 1;
56}
57
58EAPI int
59e_modapi_save(E_Module *m EINA_UNUSED)
60{
61 return 1;
62}
63
64/* local function prototypes */
65static E_Gadcon_Client *
66_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
67{
68 Instance *inst;
69
70 inst = E_NEW(Instance, 1);
71 inst->o_toggle = edje_object_add(gc->evas);
72 e_theme_edje_object_set(inst->o_toggle,
73 "base/theme/modules/illume_kbd_toggle",
74 "e/modules/illume_kbd_toggle/main");
75
76 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_toggle);
77 inst->gcc->data = inst;
78
79 edje_object_signal_callback_add(inst->o_toggle, "e,action,vkbd,enable", "",
80 _cb_action_vkbd_enable, inst);
81 edje_object_signal_callback_add(inst->o_toggle, "e,action,vkbd,disable", "",
82 _cb_action_vkbd_disable, inst);
83
84 inst->handlers =
85 eina_list_append(inst->handlers,
86 ecore_event_handler_add(E_EVENT_CLIENT_FOCUS_IN,
87 _cb_border_focus_in, inst));
88 inst->handlers =
89 eina_list_append(inst->handlers,
90 ecore_event_handler_add(E_EVENT_CLIENT_REMOVE,
91 _cb_border_remove, inst));
92 inst->handlers =
93 eina_list_append(inst->handlers,
94 ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY,
95 _cb_border_property, inst));
96
97 instances = eina_list_append(instances, inst);
98 return inst->gcc;
99}
100
101static void
102_gc_shutdown(E_Gadcon_Client *gcc)
103{
104 Instance *inst;
105 Ecore_Event_Handler *handler;
106
107 if (!(inst = gcc->data)) return;
108 instances = eina_list_remove(instances, inst);
109 if (inst->o_toggle) evas_object_del(inst->o_toggle);
110 EINA_LIST_FREE(inst->handlers, handler)
111 ecore_event_handler_del(handler);
112 E_FREE(inst);
113}
114
115static void
116_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED)
117{
118 e_gadcon_client_aspect_set(gcc, 16, 16);
119 e_gadcon_client_min_size_set(gcc, 16, 16);
120}
121
122static const char *
123_gc_label(const E_Gadcon_Client_Class *cc EINA_UNUSED)
124{
125 return _("Illume-Keyboard-Toggle");
126}
127
128static Evas_Object *
129_gc_icon(const E_Gadcon_Client_Class *cc EINA_UNUSED, Evas *evas)
130{
131 Evas_Object *o;
132 char buff[PATH_MAX];
133
134 snprintf(buff, sizeof(buff), "%s/e-module-illume-kbd-toggle.edj", mod_dir);
135 o = edje_object_add(evas);
136 edje_object_file_set(o, buff, "icon");
137 return o;
138}
139
140static const char *
141_gc_id_new(const E_Gadcon_Client_Class *cc EINA_UNUSED)
142{
143 static char buff[32];
144
145 snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name,
146 eina_list_count(instances));
147 return buff;
148}
149
150static void
151_cb_action_vkbd_enable(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
152{
153 Instance *inst;
154 E_Client *ec;
155
156 if (!(inst = data)) return;
157 if (!(ec = e_client_focused_get())) return;
158 if (ec->zone != inst->gcc->gadcon->zone) return;
159 if (ec->vkbd.state >= ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) return;
160
161 ecore_x_e_virtual_keyboard_state_set(e_client_util_win_get(ec),
162 ECORE_X_VIRTUAL_KEYBOARD_STATE_ON);
163}
164
165static void
166_cb_action_vkbd_disable(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
167{
168 Instance *inst;
169 E_Client *ec;
170
171 if (!(inst = data)) return;
172 if (!(ec = e_client_focused_get())) return;
173 if (ec->zone != inst->gcc->gadcon->zone) return;
174 if (ec->vkbd.state <= ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) return;
175
176 ecore_x_e_virtual_keyboard_state_set(e_client_util_win_get(ec),
177 ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF);
178}
179
180static Eina_Bool
181_cb_border_focus_in(void *data, int type EINA_UNUSED, void *event)
182{
183 Instance *inst;
184 E_Event_Client *ev;
185 E_Client *ec;
186
187 if (!(inst = data)) return ECORE_CALLBACK_PASS_ON;
188 ev = event;
189 if (ev->ec->stolen) return ECORE_CALLBACK_PASS_ON;
190 if (!(ec = ev->ec)) return ECORE_CALLBACK_PASS_ON;
191 if (ec->zone != inst->gcc->gadcon->zone) return ECORE_CALLBACK_PASS_ON;
192 _set_btn_icon(inst->o_toggle, ec->vkbd.state);
193 return ECORE_CALLBACK_PASS_ON;
194}
195
196static Eina_Bool
197_cb_border_remove(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
198{
199 Instance *inst;
200
201 if (!(inst = data)) return ECORE_CALLBACK_PASS_ON;
202 _set_btn_icon(inst->o_toggle, ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF);
203 return ECORE_CALLBACK_PASS_ON;
204}
205
206static Eina_Bool
207_cb_border_property(void *data, int type EINA_UNUSED, void *event)
208{
209 Instance *inst;
210 Ecore_X_Event_Window_Property *ev;
211 E_Client *ec;
212
213 ev = event;
214 if (ev->atom != ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE)
215 return ECORE_CALLBACK_PASS_ON;
216 if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_X, ev->win)))
217 return ECORE_CALLBACK_PASS_ON;
218 if (!ec->focused) return ECORE_CALLBACK_PASS_ON;
219 if (!(inst = data)) return ECORE_CALLBACK_PASS_ON;
220 if (ec->zone != inst->gcc->gadcon->zone) return ECORE_CALLBACK_PASS_ON;
221 _set_btn_icon(inst->o_toggle, ec->vkbd.state);
222 return ECORE_CALLBACK_PASS_ON;
223}
224
225static void
226_set_btn_icon(Evas_Object *obj, Ecore_X_Virtual_Keyboard_State state)
227{
228 if (state >= ECORE_X_VIRTUAL_KEYBOARD_STATE_ON)
229 edje_object_signal_emit(obj, "e,state,vkbd,on", "e");
230 else
231 edje_object_signal_emit(obj, "e,state,vkbd,off", "e");
232}
diff --git a/illume-kbd-toggle/module.desktop.in b/illume-kbd-toggle/module.desktop.in
new file mode 100644
index 0000000..26cd2d7
--- /dev/null
+++ b/illume-kbd-toggle/module.desktop.in
@@ -0,0 +1,15 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Illume-Keyboard-Toggle
5Name[ca]=Illume-Keyboard-Toggle
6Name[de]=Illume-Tastaturumschalter
7Name[el]=Illume-Keyboard-Toggle
8Name[eo]=Baskulo de klavaro Illume
9Name[fr]=Bascule clavier Illume
10Name[ja]=Illume-Keyboard-Toggle
11Name[ms]=Illume-Keyboard-Toggle
12Name[sr]=Прекидач тастатуре одјсаја
13Name[tr]=Illume-Klavye-Değiştirici
14Icon=e-module-illume-kbd-toggle
15X-Enlightenment-ModuleType=mobile
diff --git a/illume-keyboard/.gitignore b/illume-keyboard/.gitignore
new file mode 100644
index 0000000..fba055a
--- /dev/null
+++ b/illume-keyboard/.gitignore
@@ -0,0 +1 @@
e-module-illume-keyboard.edj
diff --git a/illume-keyboard/dicts/English_US.dic b/illume-keyboard/dicts/English_US.dic
new file mode 100644
index 0000000..fa85686
--- /dev/null
+++ b/illume-keyboard/dicts/English_US.dic
@@ -0,0 +1,98342 @@
1a 21930
2A 40
3Aachen 3
4Aachen's 1
5Aaliyah 1
6Aaliyah's 1
7aardvark 3
8aardvark's 1
9aardvarks 1
10Aaron 5
11Aaron's 1
12abaci 2
13aback 5
14abacus 2
15abacuses 1
16abacus's 1
17abaft 3
18abalone 3
19abalone's 1
20abalones 1
21abandon 48
22abandoned 6
23abandoning 2
24abandonment 7
25abandonment's 1
26abandons 1
27abase 3
28abased 2
29abasement 2
30abases 1
31abash 2
32abashed 2
33abashes 1
34abashing 1
35abasing 1
36abate 5
37abated 1
38abatement 3
39abatement's 1
40abates 1
41abating 3
42abattoir 3
43abattoir's 1
44abattoirs 1
45Abbas 3
46Abbasid 2
47Abbasid's 1
48abbess 3
49abbesses 1
50abbess's 1
51abbey 22
52abbey's 1
53abbeys 1
54abbot 7
55abbot's 1
56abbots 1
57Abbott 5
58Abbott's 1
59abbreviate 3
60abbreviated 3
61abbreviates 1
62abbreviating 1
63abbreviation 4
64abbreviation's 1
65abbreviations 1
66Abby 2
67Abby's 1
68abdicate 4
69abdicated 2
70abdicates 1
71abdicating 1
72abdication 3
73abdication's 1
74abdications 1
75abdomen 5
76abdomen's 1
77abdomens 1
78abdominal 8
79abduct 4
80abducted 2
81abducting 1
82abduction 5
83abduction's 1
84abductions 1
85abductor 2
86abductores 1
87abductor's 1
88abductors 1
89abducts 1
90Abdul 5
91Abdul's 1
92Abe 3
93abeam 3
94abed 2
95Abel 4
96Abelard 2
97Abelard's 1
98Abel's 1
99Abelson 2
100Abelson's 1
101Aberdeen 16
102Aberdeen's 1
103Abernathy 2
104Abernathy's 1
105aberrant 4
106aberration 4
107aberration's 1
108aberrations 1
109Abe's 1
110abet 4
111abets 1
112abetted 1
113abetter 2
114abetters 1
115abetting 2
116abettor 2
117abettor's 1
118abettors 1
119abeyance 3
120abeyance's 1
121abhor 3
122abhorred 2
123abhorrence 2
124abhorrence's 1
125abhorrent 3
126abhorring 1
127abhors 1
128abide 6
129abided 1
130abides 1
131abiding 4
132abidings 1
133Abidjan 1
134Abidjan's 1
135Abigail 3
136Abigail's 1
137Abilene 2
138Abilene's 1
139abilities 2
140ability 107
141ability's 1
142abject 3
143abjected 1
144abjecting 1
145abjectly 2
146abjects 1
147abjuration 2
148abjuration's 1
149abjurations 1
150abjure 3
151abjured 1
152abjures 1
153abjuring 1
154ablative 3
155ablatives 1
156ablaze 4
157able 306
158abler 1
159ables 1
160ablest 1
161abloom 2
162ablution 2
163ablution's 1
164ablutions 1
165ably 3
166abnegate 2
167abnegated 1
168abnegates 1
169abnegating 1
170abnegation 2
171abnegation's 1
172Abner 2
173Abner's 1
174abnormal 11
175abnormalities 2
176abnormality 9
177abnormality's 1
178abnormally 4
179aboard 13
180abode 4
181aboded 1
182abode's 1
183abodes 1
184aboding 1
185abolish 21
186abolished 2
187abolishes 1
188abolishing 2
189abolition 14
190abolitionist 5
191abolitionist's 1
192abolitionists 1
193abolition's 1
194abominable 3
195abominably 2
196abominate 3
197abominated 2
198abominates 1
199abominating 1
200abomination 3
201abomination's 1
202abominations 1
203aboriginal 5
204aboriginals 1
205aborigine 4
206aborigine's 1
207aborigines 1
208abort 4
209aborted 2
210aborting 1
211abortion 17
212abortionist 2
213abortionist's 1
214abortionists 1
215abortion's 1
216abortions 1
217abortive 5
218aborts 1
219abound 7
220abounded 1
221abounding 3
222abounds 1
223about 1975
224abouts 2
225above 262
226aboveboard 2
227abracadabra 2
228abrade 2
229abraded 2
230abrades 1
231abrading 2
232Abraham 7
233Abraham's 1
234Abram 2
235Abram's 1
236Abrams 1
237abrasion 3
238abrasion's 1
239abrasions 1
240abrasive 7
241abrasively 2
242abrasiveness 2
243abrasive's 1
244abrasives 1
245abreast 4
246abridge 3
247abridged 2
248abridgement 2
249abridgements 1
250abridges 1
251abridging 1
252abridgment 2
253abridgment's 1
254abridgments 1
255abroad 41
256abrogate 3
257abrogated 1
258abrogates 1
259abrogating 1
260abrogation 2
261abrogation's 1
262abrogations 1
263abrupt 7
264abrupter 1
265abruptest 1
266abruptly 14
267abruptness 2
268abruptness's 1
269Absalom 2
270Absalom's 1
271abscess 3
272abscessed 1
273abscesses 1
274abscessing 2
275abscess's 1
276abscissa 2
277abscissae 1
278abscissa's 1
279abscissas 1
280abscond 4
281absconded 2
282absconding 3
283absconds 1
284absence 62
285absence's 1
286absences 1
287absent 19
288absented 1
289absentee 4
290absenteeism 4
291absenteeism's 1
292absentee's 1
293absentees 1
294absenting 3
295absently 4
296absents 1
297absinth 1
298absinthe 3
299absinthe's 1
300absolute 40
301absolutely 60
302absoluter 1
303absolutes 1
304absolutest 1
305absolution 3
306absolution's 1
307absolutism 3
308absolutism's 1
309absolve 5
310absolved 2
311absolves 1
312absolving 1
313absorb 29
314absorbed 3
315absorbency 2
316absorbency's 1
317absorbent 4
318absorbents 1
319absorbing 5
320absorbs 1
321absorption 12
322absorption's 1
323abstain 5
324abstained 1
325abstainer 2
326abstainer's 1
327abstainers 1
328abstaining 2
329abstains 1
330abstemious 2
331abstention 5
332abstention's 1
333abstentions 1
334abstinence 4
335abstinence's 1
336abstinent 3
337abstract 29
338abstracted 3
339abstractedly 2
340abstracter 1
341abstractest 1
342abstracting 3
343abstraction 8
344abstraction's 1
345abstractions 1
346abstractly 2
347abstractness 2
348abstractnesses 1
349abstractness's 1
350abstracts 1
351abstruse 2
352abstrusely 2
353abstruseness 2
354abstruseness's 1
355abstruser 1
356abstrusest 1
357absurd 13
358absurder 1
359absurdest 1
360absurdities 1
361absurdity 5
362absurdity's 1
363absurdly 4
364Abuja 2
365abundance 9
366abundance's 1
367abundances 1
368abundant 8
369abundantly 4
370abuse 52
371abused 3
372abuser 3
373abuser's 1
374abusers 1
375abuses 1
376abusing 3
377abusive 5
378abusively 2
379abusiveness 1
380abusiveness's 1
381abut 3
382abutment 2
383abutment's 1
384abutments 1
385abuts 1
386abutted 1
387abutting 1
388abuzz 3
389abysmal 3
390abysmally 2
391abyss 4
392abysses 1
393Abyssinia 3
394Abyssinian 1
395Abyssinia's 1
396abyss's 1
397Ac 1
398acacia 2
399acacia's 1
400acacias 1
401academia 3
402academia's 1
403academic 60
404academical 3
405academically 4
406academician 2
407academician's 1
408academicians 1
409academics 1
410academies 1
411academy 17
412academy's 1
413Acadia 2
414Acadia's 1
415acanthi 1
416acanthus 3
417acanthuses 1
418acanthus's 1
419Acapulco 2
420Acapulco's 1
421accede 4
422acceded 1
423accedes 1
424acceding 3
425accelerate 13
426accelerated 4
427accelerates 1
428accelerating 4
429acceleration 9
430acceleration's 1
431accelerations 1
432accelerator 6
433accelerator's 1
434accelerators 1
435accent 23
436accented 2
437accenting 2
438accent's 1
439accents 1
440accentuate 6
441accentuated 2
442accentuates 1
443accentuating 2
444accentuation 2
445accentuation's 1
446accept 205
447acceptability 5
448acceptability's 1
449acceptable 38
450acceptably 2
451acceptance 29
452acceptance's 1
453acceptances 2
454accepted 12
455accepting 3
456accepts 1
457access 118
458accessed 2
459accesses 1
460accessibility 5
461accessibility's 1
462accessible 18
463accessibly 2
464accessing 3
465accession 9
466accessioned 1
467accessioning 1
468accession's 1
469accessions 1
470accessories 1
471accessory 11
472accessory's 1
473access's 1
474accident 86
475accidental 10
476accidentally 7
477accidentals 1
478accident's 1
479accidents 1
480acclaim 8
481acclaimed 4
482acclaiming 2
483acclaims 1
484acclamation 3
485acclamation's 1
486acclimate 2
487acclimated 1
488acclimates 1
489acclimating 1
490acclimation 2
491acclimation's 1
492acclimatisation 2
493acclimatization 2
494acclimatization's 1
495acclimatize 2
496acclimatized 2
497acclimatizes 1
498acclimatizing 1
499accolade 4
500accoladed 1
501accolade's 1
502accolades 1
503accolading 1
504accommodate 23
505accommodated 1
506accommodates 1
507accommodating 2
508accommodation 46
509accommodation's 1
510accommodations 1
511accompanied 1
512accompanies 1
513accompaniment 7
514accompaniment's 1
515accompaniments 1
516accompanist 2
517accompanist's 1
518accompanists 1
519accompany 50
520accompanying 10
521accomplice 5
522accomplice's 1
523accomplices 1
524accomplish 12
525accomplished 5
526accomplishes 1
527accomplishing 2
528accomplishment 4
529accomplishment's 1
530accomplishments 1
531accord 24
532accordance 2
533accordance's 1
534accorded 1
535according 4
536accordingly 26
537accordion 3
538accordion's 1
539accordions 1
540accord's 1
541accords 1
542accost 3
543accosted 1
544accosting 2
545accosts 1
546account 262
547accountability 14
548accountability's 1
549accountable 9
550accountancy 10
551accountancy's 1
552accountant 24
553accountant's 1
554accountants 1
555accounted 1
556accounting 28
557accounting's 1
558account's 1
559accounts 1
560accouterments 1
561accoutrements 1
562Accra 2
563Accra's 1
564accredit 3
565accreditation 5
566accreditation's 1
567accredited 3
568accrediting 2
569accredits 1
570accretion 3
571accretion's 1
572accretions 1
573accrual 3
574accrual's 1
575accruals 1
576accrue 7
577accrued 3
578accrues 1
579accruing 2
580acculturation 2
581acculturation's 1
582accumulate 14
583accumulated 5
584accumulates 1
585accumulating 2
586accumulation 12
587accumulation's 1
588accumulations 1
589accumulative 2
590accumulator 5
591accumulator's 1
592accuracy 19
593accuracy's 1
594accurate 31
595accurately 16
596accurateness 1
597accurateness's 1
598accursed 2
599accusation 14
600accusation's 1
601accusations 1
602accusative 3
603accusatives 1
604accusatory 3
605accuse 50
606accused 13
607accused's 1
608accuser 3
609accuser's 1