From 5a29e1f6b5f834cea564cc305bb8f856c3f79cbd Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 25 Nov 2008 08:05:58 +0000 Subject: [PATCH] syscon module added - provides a system entry in main menu (build in one gone now). syscon has a poup with buttons (configurale) that offer all the logout/reboot etc. stuff. also able to extend with more items or inline them into the theme too. not complete. need config for being able to extend the syscon popup (and use it) and no gui config for configuring what should appear and how it should look. possibly theme should have custon elements for the ones curently using button + icon look. also no keyboard control. SVN revision: 37797 --- config/default/e.src | 7 +- config/illume/e.src | 56 +- config/minimalist/e.src | 71 ++- config/netbook/e.src | 71 ++- config/scaleable/e.src | 71 ++- config/standard/e.src | 71 ++- configure.ac | 2 + data/themes/default.edc | 608 +++++++++++++++++++++- data/themes/images/icon_desklock_menu.png | Bin 5116 -> 2579 bytes data/themes/images/icon_halt.png | Bin 5411 -> 8878 bytes data/themes/images/icon_hibernate.png | Bin 5107 -> 5488 bytes data/themes/images/icon_logout.png | Bin 5003 -> 2221 bytes data/themes/images/icon_reboot.png | Bin 5627 -> 7998 bytes data/themes/images/icon_reset.png | Bin 5390 -> 7998 bytes data/themes/images/icon_suspend.png | Bin 5494 -> 5175 bytes src/bin/e_actions.c | 1 - src/bin/e_config.c | 47 +- src/bin/e_config.h | 43 +- src/bin/e_flowlayout.c | 20 + src/bin/e_int_menus.c | 184 +------ src/bin/e_int_menus.h | 1 - src/bin/e_sys.c | 2 +- src/modules/Makefile.am | 3 +- src/modules/illume/e_mod_win.c | 6 +- src/modules/syscon/.cvsignore | 7 + src/modules/syscon/Makefile.am | 31 ++ src/modules/syscon/e-module-syscon.edj | Bin 0 -> 6741 bytes src/modules/syscon/e_mod_main.c | 138 +++++ src/modules/syscon/e_mod_main.h | 19 + src/modules/syscon/e_syscon.c | 406 +++++++++++++++ src/modules/syscon/e_syscon.h | 17 + src/modules/syscon/module.desktop.in | 6 + x-ui.sh | 4 +- 33 files changed, 1644 insertions(+), 248 deletions(-) create mode 100644 src/modules/syscon/.cvsignore create mode 100644 src/modules/syscon/Makefile.am create mode 100644 src/modules/syscon/e-module-syscon.edj create mode 100644 src/modules/syscon/e_mod_main.c create mode 100644 src/modules/syscon/e_mod_main.h create mode 100644 src/modules/syscon/e_syscon.c create mode 100644 src/modules/syscon/e_syscon.h create mode 100644 src/modules/syscon/module.desktop.in diff --git a/config/default/e.src b/config/default/e.src index e6a56b55e..0f941213c 100644 --- a/config/default/e.src +++ b/config/default/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 0; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -522,4 +522,9 @@ group "E_Config" struct { value "idle_cursor" uchar: 1; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 0; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 0.0; + value "syscon.do_input" uchar: 0; } diff --git a/config/illume/e.src b/config/illume/e.src index 93fc23621..31f97a8e6 100644 --- a/config/illume/e.src +++ b/config/illume/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -240,11 +240,12 @@ group "E_Config" struct { value "priority" int: 0; } } - group "font_defaults" list { - group "E_Font_Default" struct { - value "text_class" string: "default"; - value "font" string: "Vera"; - value "size" int: 10; + group "modules" list { + group "E_Config_Module" struct { + value "name" string: "syscon"; + value "enabled" uchar: 1; + value "delayed" uchar: 1; + value "priority" int: 0; } } group "themes" list { @@ -253,23 +254,13 @@ group "E_Config" struct { value "file" string: "illume.edj"; } } - group "key_bindings" list { - group "E_Config_Binding_Key" struct { - value "context" int: 9; - value "modifiers" int: 0; - value "key" string: "Keycode-177"; - value "action" string: "simple_lock"; - value "params" string: ""; - value "any_mod" uchar: 1; - } - } group "key_bindings" list { group "E_Config_Binding_Key" struct { value "context" int: 9; value "modifiers" int: 0; value "key" string: "Execute"; value "action" string: "delayed_action"; - value "params" string: "[0.0 exec dbus-send --system --dest=org.openmoko.Power / org.openmoko.Power.Core.RequestResourceState string:cpu string:illume-cmdline string:off] [2.0 halt_now]"; + value "params" string: "[0.0 syscon] [2.0 halt_now]"; value "any_mod" uchar: 1; } } @@ -788,4 +779,35 @@ group "E_Config" struct { value "idle_cursor" uchar: 0; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 1; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 5.0; + value "syscon.do_input" uchar: 0; + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "suspend"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/suspend"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "desk_lock"; + value "button" string: "button"; + value "icon" string: "enlightenment/desklock_menu"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "halt"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/halt"; + value "is_main" int: 0; + } + } } diff --git a/config/minimalist/e.src b/config/minimalist/e.src index 843e250a7..93275133f 100644 --- a/config/minimalist/e.src +++ b/config/minimalist/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_background" string: "Light_Gradient.edj"; @@ -370,11 +370,12 @@ group "E_Config" struct { value "priority" int: 0; } } - group "font_defaults" list { - group "E_Font_Default" struct { - value "text_class" string: "default"; - value "font" string: "Vera"; - value "size" int: 10; + group "modules" list { + group "E_Config_Module" struct { + value "name" string: "syscon"; + value "enabled" uchar: 1; + value "delayed" uchar: 1; + value "priority" int: 0; } } group "themes" list { @@ -1935,4 +1936,62 @@ group "E_Config" struct { value "idle_cursor" uchar: 1; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 0; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 5.0; + value "syscon.do_input" uchar: 1; + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "halt"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/halt"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "suspend"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/suspend"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "desk_lock"; + value "button" string: "button"; + value "icon" string: "enlightenment/desklock_menu"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "reboot"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/reboot"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "hibernate"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/hibernate"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "logout"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/logout"; + value "is_main" int: 0; + } + } } diff --git a/config/netbook/e.src b/config/netbook/e.src index 94a24c6da..3d677b154 100644 --- a/config/netbook/e.src +++ b/config/netbook/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_background" string: "Dark_Gradient.edj"; @@ -434,11 +434,12 @@ group "E_Config" struct { value "priority" int: 0; } } - group "font_defaults" list { - group "E_Font_Default" struct { - value "text_class" string: "default"; - value "font" string: "Vera"; - value "size" int: 10; + group "modules" list { + group "E_Config_Module" struct { + value "name" string: "syscon"; + value "enabled" uchar: 1; + value "delayed" uchar: 1; + value "priority" int: 0; } } group "themes" list { @@ -1999,4 +2000,62 @@ group "E_Config" struct { value "idle_cursor" uchar: 1; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 0; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 5.0; + value "syscon.do_input" uchar: 1; + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "halt"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/halt"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "suspend"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/suspend"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "desk_lock"; + value "button" string: "button"; + value "icon" string: "enlightenment/desklock_menu"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "reboot"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/reboot"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "hibernate"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/hibernate"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "logout"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/logout"; + value "is_main" int: 0; + } + } } diff --git a/config/scaleable/e.src b/config/scaleable/e.src index 561aaefc2..2ff3a1921 100644 --- a/config/scaleable/e.src +++ b/config/scaleable/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -457,11 +457,12 @@ group "E_Config" struct { value "priority" int: -100; } } - group "font_defaults" list { - group "E_Font_Default" struct { - value "text_class" string: "default"; - value "font" string: "Vera"; - value "size" int: 10; + group "modules" list { + group "E_Config_Module" struct { + value "name" string: "syscon"; + value "enabled" uchar: 1; + value "delayed" uchar: 1; + value "priority" int: 0; } } group "themes" list { @@ -2022,4 +2023,62 @@ group "E_Config" struct { value "idle_cursor" uchar: 1; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 0; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 5.0; + value "syscon.do_input" uchar: 1; + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "halt"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/halt"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "suspend"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/suspend"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "desk_lock"; + value "button" string: "button"; + value "icon" string: "enlightenment/desklock_menu"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "reboot"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/reboot"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "hibernate"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/hibernate"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "logout"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/logout"; + value "is_main" int: 0; + } + } } diff --git a/config/standard/e.src b/config/standard/e.src index 236f52e38..b18c50d61 100644 --- a/config/standard/e.src +++ b/config/standard/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 65834; + value "config_version" int: 65835; value "show_splash" int: 1; value "init_default_theme" string: "default.edj"; value "desktop_default_name" string: "Desktop %i, %i"; @@ -457,11 +457,12 @@ group "E_Config" struct { value "priority" int: -100; } } - group "font_defaults" list { - group "E_Font_Default" struct { - value "text_class" string: "default"; - value "font" string: "Vera"; - value "size" int: 10; + group "modules" list { + group "E_Config_Module" struct { + value "name" string: "syscon"; + value "enabled" uchar: 1; + value "delayed" uchar: 1; + value "priority" int: 0; } } group "themes" list { @@ -2022,4 +2023,62 @@ group "E_Config" struct { value "idle_cursor" uchar: 1; value "default_system_menu" string: ""; value "cfgdlg_normal_wins" uchar: 0; + value "syscon.main.icon_size" int: 64; + value "syscon.secondary.icon_size" int: 48; + value "syscon.extra.icon_size" int: 48; + value "syscon.timeout" double: 5.0; + value "syscon.do_input" uchar: 1; + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "halt"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/halt"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "suspend"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/suspend"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "desk_lock"; + value "button" string: "button"; + value "icon" string: "enlightenment/desklock_menu"; + value "is_main" int: 1; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "reboot"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/reboot"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "hibernate"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/hibernate"; + value "is_main" int: 0; + } + } + group "syscon.actions" list { + group "E_Config_Syscon_Action" struct { + value "action" string: "logout"; + value "params" string: "now"; + value "button" string: "button"; + value "icon" string: "enlightenment/logout"; + value "is_main" int: 0; + } + } } diff --git a/configure.ac b/configure.ac index ba71aa3c4..91d53601f 100644 --- a/configure.ac +++ b/configure.ac @@ -431,6 +431,8 @@ src/modules/illume/Makefile src/modules/illume/module.desktop src/modules/illume/keyboards/Makefile src/modules/illume/dicts/Makefile +src/modules/syscon/Makefile +src/modules/syscon/module.desktop src/preload/Makefile data/Makefile data/images/Makefile diff --git a/data/themes/default.edc b/data/themes/default.edc index 1f03eea2f..e88cb43d5 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -10035,6 +10035,12 @@ collections { /* begin the collection of edje groups that are in this file */ /*** MOD: EXEBUF ***/ group { name: "e/widgets/exebuf/main"; + images { + image: "base_bg.png" COMP; + image: "inset_sunk.png" COMP; + image: "menu_sel_bg.png" COMP; + image: "menu_sel_fg.png" COMP; + } parts { part { name: "base"; mouse_events: 0; @@ -10401,6 +10407,606 @@ collections { /* begin the collection of edje groups that are in this file */ } } +///////////////////////////////////////////////////////////////////////////// + /*** MOD: SYSCON ***/ + +/* + group { name: "e/wizard/main"; + images { + image: "vgrad_dark.png" COMP; + image: "grill_dark_tiny_pattern.png" COMP; + image: "bt_base1.png" COMP; + image: "bt_base2.png" COMP; + image: "bt_hilight.png" COMP; + image: "bt_shine.png" COMP; + image: "bt_glow.png" COMP; + image: "bt_dis_base.png" COMP; + image: "bt_dis_hilight.png" COMP; + } + parts { + part { name: "background_image"; + description { state: "default" 0.0; + image.normal: "vgrad_dark.png"; + fill { + smooth: 0; + size { + relative: 0 1.0; + offset: 36 0; + } + } + } + } + part { name: "grill"; + description { state: "default" 0.0; + image.normal: "grill_dark_tiny_pattern.png"; + fill { + size { + relative: 0 0; + offset: 144 144; + } + } + } + } + part { name: "e.text.title"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + align: 0.5 0.0; + rel1 { + relative: 0.0 0.0; + offset: 0 8; + } + rel2 { + relative: 1.0 0.0; + offset: -1 8; + } + color: 255 255 255 255; + color3: 0 0 0 32; + text { + font: "Sans:style=Bold"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "e.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { + to_y: "e.text.title"; + relative: 0.5 1.0; + offset: 0 8; + } + rel2 { + to_y: "button_image"; + relative: 0.5 0.0; + offset: 0 -9; + } + } + } + part { name: "button_image"; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + align: 0.5 1.0; + rel1.relative: 0.5 1.0; + rel1.offset: 0 -9; + rel2.relative: 0.5 1.0; + rel2.offset: 0 -9; + min: 64 32; + max: 64 32; + image { + normal: "bt_base2.png"; + border: 7 7 7 7; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: "bt_base1.png"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + } + part { name: "e.text.label"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1 { + to: "button_image"; + relative: 0.0 0.0; + offset: 3 3; + } + rel2 { + relative: 1.0 1.0; + offset: -4 -4; + to: "button_image"; + } + color: 224 224 224 255; + color3: 0 0 0 64; + color_class: "button_text"; + text { + text: "Close"; + font: "Sans"; + size: 10; + min: 1 1; + align: 0.5 0.5; + text_class: "button"; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + color3: 0 0 0 0; + color_class: "button_text_disabled"; + } + } + part { name: "over1"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_hilight.png"; + border: 7 7 7 0; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "over2"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + image { + normal: "bt_shine.png"; + border: 7 7 7 7; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "over3"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + visible: 0; + color: 255 255 255 0; + image { + normal: "bt_glow.png"; + border: 12 12 12 12; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "block"; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + visible: 0; + color: 0 0 0 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "button_click"; + signal: "mouse,down,1"; + source: "button_image"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + target: "over3"; + } + program { name: "button_unclick"; + signal: "mouse,up,1"; + source: "button_image"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "over3"; + } + program { name: "button_unclick2"; + signal: "mouse,clicked,1"; + source: "button_image"; + action: SIGNAL_EMIT "e,action,next" ""; + } + program { name: "button_enable"; + signal: "e,state,next,enable"; + source: "e"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "e.text.label"; + target: "over1"; + target: "over2"; + target: "block"; + } + program { name: "button_disable"; + signal: "e,state,next,disable"; + source: "e"; + action: STATE_SET "disabled" 0.0; + target: "button_image"; + target: "e.text.label"; + target: "over1"; + target: "over2"; + target: "block"; + } + } + } +*/ + group { name: "e/widgets/syscon/main"; + images { + image: "base_bg.png" COMP; + image: "bt_base1.png" COMP; + image: "bt_base2.png" COMP; + image: "bt_hilight.png" COMP; + image: "bt_shine.png" COMP; + image: "bt_glow.png" COMP; + } + parts { + part { name: "base"; + mouse_events: 0; + description { state: "default" 0.0; + image { + normal: "base_bg.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "e.swallow.main"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.0; + rel1.offset: 12 12; + rel2.relative: 1.0 0.0; + rel2.offset: -13 12; + } + } + part { name: "e.swallow.secondary"; + type: SWALLOW; + description { state: "default" 0.0; + min: 32 32; + rel1.to: "e.swallow.main"; + rel1.relative: 0.0 1.0; + rel1.offset: 0 12; + rel2.to: "e.swallow.extra"; + rel2.relative: 1.0 0.0; + rel2.offset: -1 -13; + } + } + part { name: "e.swallow.extra"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 1.0; + rel1.relative: 0.0 1.0; + rel1.offset: 12 -13; + rel2.to_y: "button_image"; + rel2.relative: 1.0 0.0; + rel2.offset: -13 -13; + } + } + part { name: "button_image"; + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + align: 0.5 1.0; + rel1.relative: 0.5 1.0; + rel1.offset: 0 -13; + rel2.relative: 0.5 1.0; + rel2.offset: 0 -13; + min: 64 32; + max: 64 32; + image { + normal: "bt_base2.png"; + border: 7 7 7 7; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: "bt_base1.png"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + } + part { name: "e.text.label"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1 { + to: "button_image"; + relative: 0.0 0.0; + offset: 3 3; + } + rel2 { + relative: 1.0 1.0; + offset: -4 -4; + to: "button_image"; + } + color: 224 224 224 255; + color3: 0 0 0 64; + color_class: "button_text"; + text { + text: "Cancel"; + font: "Sans"; + size: 10; + min: 1 1; + align: 0.5 0.5; + text_class: "button"; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + color3: 0 0 0 0; + color_class: "button_text_disabled"; + } + } + part { name: "over1"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_hilight.png"; + border: 7 7 7 0; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "over2"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + image { + normal: "bt_shine.png"; + border: 7 7 7 7; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "over3"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button_image"; + rel2.to: "button_image"; + visible: 0; + color: 255 255 255 0; + image { + normal: "bt_glow.png"; + border: 12 12 12 12; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + } + programs { + program { name: "button_click"; + signal: "mouse,down,1"; + source: "button_image"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + target: "over3"; + } + program { name: "button_unclick"; + signal: "mouse,up,1"; + source: "button_image"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "over3"; + } + program { name: "button_unclick2"; + signal: "mouse,clicked,1"; + source: "button_image"; + action: SIGNAL_EMIT "e,action,close" ""; + } + } + } + + group { name: "e/widgets/syscon/item/button"; + images { + image: "bt_base1.png" COMP; + image: "bt_base2.png" COMP; + image: "bt_hilight.png" COMP; + image: "bt_shine.png" COMP; + image: "bt_glow.png" COMP; + image: "bt_dis_base.png" COMP; + image: "bt_dis_hilight.png" COMP; + } + parts { + part { name: "button_image"; + mouse_events: 1; + description { state: "default" 0.0; + min: 32 16; + image { + normal: "bt_base2.png"; + border: 7 7 7 7; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: "bt_base1.png"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + } + part { + name: "e.swallow.icon"; + type: SWALLOW; + description { + state: "default" 0.0; + aspect: 1.0 1.0; + aspect_preference: BOTH; + align: 0.5 0.5; + rel1 { + relative: 0.0 0.0; + offset: 3 3; + to: "button_image"; + } + rel2 { + relative: 1.0 1.0; + offset: -4 -4; + to: "button_image"; + } + } + } + part { name: "over1"; + mouse_events: 0; + description { state: "default" 0.0; + rel2.relative: 1.0 0.5; + image { + normal: "bt_hilight.png"; + border: 7 7 7 0; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "over2"; + mouse_events: 0; + description { state: "default" 0.0; + image { + normal: "bt_shine.png"; + border: 7 7 7 7; + } + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "over3"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + image { + normal: "bt_glow.png"; + border: 12 12 12 12; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "disabler"; + type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { + name: "button_click"; + signal: "mouse,down,1"; + source: "button_image"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + target: "over3"; + } + program { + name: "button_unclick"; + signal: "mouse,up,1"; + source: "button_image"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "over3"; + } + program { + name: "button_unclick2"; + signal: "mouse,clicked,1"; + source: "button_image"; + action: SIGNAL_EMIT "e,action,click" ""; + } + program { + name: "disable"; + signal: "e,state,disabled"; + source: "e"; + action: STATE_SET "disabled" 0.0; + target: "button_image"; + target: "over1"; + target: "disabler"; + } + program { + name: "enable"; + signal: "e,state,enabled"; + source: "e"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "over1"; + target: "disabler"; + } + } + } + ///////////////////////////////////////////////////////////////////////////// /*** MOD: MIXER ***/ @@ -21203,7 +21809,7 @@ group { name: "e/toolbar/default/base"; color3: 0 0 0 64; color_class: "button_text"; text { - text: "Close"; + text: "Next"; font: "Sans"; size: 10; min: 1 1; diff --git a/data/themes/images/icon_desklock_menu.png b/data/themes/images/icon_desklock_menu.png index 720db330330c5f7f1ab9a27980f202896c7d354a..2b43b9da6fe8684654739761873e0470ebecdb05 100644 GIT binary patch literal 2579 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 Z$YFT{H*eP*Sjg(wfT^LSL503s{NK|Xz?c94 literal 5116 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 oV}>a{2nm&c*u?qj?!*-(-!~$6tGD| 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 N002ovPDHLkV1iU5=G*`P diff --git a/data/themes/images/icon_hibernate.png b/data/themes/images/icon_hibernate.png index 256e4f3522b5438b1aa9a4b235be989d8f03900e..c633ad3fbde7b481ba3552bd8fdaf4879095e3a8 100644 GIT binary patch literal 5488 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 literal 5107 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 V5vfN%e!~C&002ovPDHLkV1o6`glGT& diff --git a/data/themes/images/icon_logout.png b/data/themes/images/icon_logout.png index 440b308ce603192819d4c515ec26d9c1dd1ff6d3..21ec4649fea42d65ef22fd3c0e9e212ced30a0f0 100644 GIT binary patch literal 2221 zcmZ`*`9IX_7yk^?FqSN%EVu06v81^6WSJRDwlPAKFyz{ILK#~^vhQW*+LM`4@h!x3 zHH<=bW1l7>TcRut=1zaWeV*6*yx-6H>73`B*Yli5)>c<}xx}~t0N^zH(8!m*CmI~>DrUHj=7xvL;40~VfJo{^GGj6`uAc<9y(>-Sw2&+3bK zB8=NPlI8Aup4W4)e797XsR!YdO5{iVr=b|#CUV2=)nrgt1wyfj$Es<^qSJ5x#?*UG zYaV<0?mvL=1JRqYtIYclPT_@N9!Y5vhqLq&fNSQWH=FZOVZ?49h2ri9*q%sKj-T{xm8b=!#+ckHZpgvrCY=6| zAB~o>3=*rvC7!7P`2)lN+`Y)ieXLa3lQ!u1qN1sqxY(!GhwAJPp#1awPaj;7*`Vae zSSVw=j*x2i3v!?X#68|3z!*;2R1Y+D9M4+NKWJ+n+&_Yuw9XXJ&{@SG}(0V zj@O^PC@~?!xED7eBX^FEVKnU0T zw=ay?$IwK6`NtnDe2QHYodMo#a68m;%+8GXV|AoDNKOIj9sdMv-Dp=R*AG@l5L9HK z%Zyk#U%3(RBtMScF!Q2Qgf!k33|}&vmEUdgDOTZOPj(~i$K-!lUf$dc2-#Wc$GohM zN@-N}%HP}U19~RQmrsSC5Ee8qZg}Zf!&T6*u5Z;gjZQi619w5V>3g7OynK0(GwO9g zY5*(VrrFt95eL`}0s1Y#ynJOdxM+I|e)nKo%BoC9BLYs8HZg>f^7+}4P*q{8A^acN z9h>cy;MAEJK{YkCxYQnSNHb_apWEQNXjqDS6thkMb;l9_GCw=b&dmJsEREo}24z){ zc2E5JJV*J;+viFm$@fuJz{g!y&iH=WgWV2UWGx--PU-1LH+#Q)2?hPpHsz(U4wLpO5Eiu3b2&1dJNNJ{HtW6 z0uXaHNj5pjO$Ex+6aQH|j!LB-C`v=ql>{Xt>T@Ennk8tVG;$`ico2TB?=aZio!x7w z^iW+EYE%eC2&y2fM^W7F)`=8K9*k}LmFDKL+ay8F&yuC#>U2`SgYI8UB{Iz{XTTv@o0` zV#RUg3Qj}Y&(F_bXmIe@wzpeH`imG%GI)P$9=r18%SqnSA}cNh{QAkaqr+V-Kz&62 zY#_3OCIge~n`;mEGfrhfNVkCSjW=2}HBjilV2PH)C8t-x?4%1o2jIfqV8$-w!Id%| z0g?^>9+yL3hYa&2fMJsLEz0CY(6)^jO)KC>$?&C<0kF07^-=G@zyQNL?%ROd z9W3Xc7_hQ1c5ZI&=+Y21>(-I%6kvW-=T8gT`3~9R63RH2x)|o1`05?@#*LJiB{>hE zs;E+71x{hS&APZ8^5gOFNy_A>kh2C~H4wpDK~={QHG&3N-wF7K>iQv4tt>%Mz}oVUAE_;MXBCDxkk_ceA{FQD#Ti$OXl0Zvg%Zkzo6Cyi4RL+4W^A*JLglvBd^^}0*? z+^F0La`yR+_O17$qoc|;2W2l!^w&YX@z366;TVRe8(25EC)$Ev$15o-dnxKq0iu~l zoZr_?8*?8*vyp7C@ExJc@6WW(Op&L!wQU6|pxJYU{G1AjuVWZ{%-RFOaCcPXZ4-T7 z6`B)5!Yy)Z?vUWLz3Hj9Qv~#Pg&PcN4PFoAWKl3 z&zhT$)eQ`oFNA(&ocsASSvl<#w%$H05uBpCPzQ=4?*rpa6Ki}cLuHKrM|VmY$K{Ps zre?K$n?08b^MxM-R&$|Jy{Ginuu#I&>Tyj%(Oapkrw+ssyuA*DrXA&{Q9uhXvLgVU z+3STM3Ldq z+ncv@LK&5!mDpyudXFNkbAo61g-8u3YM-enoe_W8h*qfCrAaRk{l{11ID6dphXsHK zMKMqWoRHM4e2yCf5>w?B+(PB5amc#o6YnjPlATX!59o=mC5ULg_Kxq@^fow8z9KFz g@LxZ4wi!JV``T>xX83v$YnA}ajIE6DDA$C40dd0wP5=M^ literal 5003 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 VawVkn8l?aL002ovPDHLkV1kMmVB-J) diff --git a/data/themes/images/icon_reboot.png b/data/themes/images/icon_reboot.png index 1861fb2e940c7fd22c99593499879818c4f920ef..47fd9bc3f99f28c12728b283504fa6d7dc98892f 100644 GIT binary patch literal 7998 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 diff --git a/data/themes/images/icon_suspend.png b/data/themes/images/icon_suspend.png index b2b8e8db334eff6e213aba03899cf40d2c42f516..2d933f96cb79749d778dd96f500b060fd4d7f2da 100644 GIT binary patch literal 5175 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 DD+QuX literal 5494 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 diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index 7e9e9d1f2..c2f472889 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -1409,7 +1409,6 @@ _e_actions_menu_find(const char *name) else if (!strcmp(name, "clients")) return e_int_menus_clients_new(); else if (!strcmp(name, "lost_clients")) return e_int_menus_lost_clients_new(); else if (!strcmp(name, "configuration")) return e_int_menus_config_new(); - else if (!strcmp(name, "system")) return e_int_menus_sys_new(); return NULL; } ACT_FN_GO(menu_show) diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 0535e6701..6bed453be 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -41,6 +41,7 @@ static E_Config_DD *_e_config_gadcon_client_edd = NULL; static E_Config_DD *_e_config_shelf_edd = NULL; static E_Config_DD *_e_config_shelf_desk_edd = NULL; static E_Config_DD *_e_config_mime_icon_edd = NULL; +static E_Config_DD *_e_config_syscon_action_edd = NULL; EAPI int E_EVENT_CONFIG_ICON_THEME = 0; @@ -381,6 +382,18 @@ e_config_init(void) E_CONFIG_VAL(D, T, mime, STR); E_CONFIG_VAL(D, T, icon, STR); + _e_config_syscon_action_edd = E_CONFIG_DD_NEW("E_Config_Syscon_Action", + E_Config_Syscon_Action); +#undef T +#undef D +#define T E_Config_Syscon_Action +#define D _e_config_syscon_action_edd + E_CONFIG_VAL(D, T, action, STR); + E_CONFIG_VAL(D, T, params, STR); + E_CONFIG_VAL(D, T, button, STR); + E_CONFIG_VAL(D, T, icon, STR); + E_CONFIG_VAL(D, T, is_main, INT); + _e_config_edd = E_CONFIG_DD_NEW("E_Config", E_Config); #undef T #undef D @@ -635,12 +648,19 @@ e_config_init(void) E_CONFIG_VAL(D, T, scale.use_dpi, UCHAR); E_CONFIG_VAL(D, T, scale.use_custom, UCHAR); - E_CONFIG_VAL(D, T, show_cursor, UCHAR); /**/ - E_CONFIG_VAL(D, T, idle_cursor, UCHAR); /**/ + E_CONFIG_VAL(D, T, show_cursor, UCHAR); + E_CONFIG_VAL(D, T, idle_cursor, UCHAR); E_CONFIG_VAL(D, T, default_system_menu, STR); - E_CONFIG_VAL(D, T, cfgdlg_normal_wins, UCHAR); /**/ + E_CONFIG_VAL(D, T, cfgdlg_normal_wins, UCHAR); + + E_CONFIG_VAL(D, T, syscon.main.icon_size, INT); + E_CONFIG_VAL(D, T, syscon.secondary.icon_size, INT); + E_CONFIG_VAL(D, T, syscon.extra.icon_size, INT); + E_CONFIG_VAL(D, T, syscon.timeout, DOUBLE); + E_CONFIG_VAL(D, T, syscon.do_input, UCHAR); + E_CONFIG_LIST(D, T, syscon.actions, _e_config_syscon_action_edd); e_config_load(); @@ -669,6 +689,8 @@ e_config_shutdown(void) E_CONFIG_DD_FREE(_e_config_gadcon_client_edd); E_CONFIG_DD_FREE(_e_config_shelf_edd); E_CONFIG_DD_FREE(_e_config_shelf_desk_edd); + E_CONFIG_DD_FREE(_e_config_mime_icon_edd); + E_CONFIG_DD_FREE(_e_config_syscon_action_edd); return 1; } @@ -775,7 +797,8 @@ e_config_load(void) #define IFCFG(v) if ((e_config->config_version & 0xffff) < (v)) { #define IFCFGEND } #define COPYVAL(x) do {e_config->x = tcfg->x;} while (0) -#define COPYSTR(x) do {e_config->x = tcfg->x; tcfg->x = NULL;} while (0) +#define COPYPTR(x) do {e_config->x = tcfg->x; tcfg->x = NULL;} while (0) +#define COPYSTR(x) COPYPTR(x) if (tcfg) { /* some sort of upgrade is needed */ @@ -824,6 +847,10 @@ e_config_load(void) COPYVAL(cfgdlg_normal_wins); IFCFGEND; + IFCFG(0x012c); + COPYPTR(syscon.actions); + IFCFGEND; + e_config->config_version = E_CONFIG_FILE_VERSION; _e_config_free(tcfg); } @@ -1573,6 +1600,18 @@ _e_config_free(E_Config *ecf) if (ecf->wallpaper_import_last_path) eina_stringshare_del(ecf->wallpaper_import_last_path); if (ecf->theme_default_border_style) eina_stringshare_del(ecf->theme_default_border_style); if (ecf->desklock_custom_desklock_cmd) eina_stringshare_del(ecf->desklock_custom_desklock_cmd); + while (ecf->syscon.actions) + { + E_Config_Syscon_Action *sca; + + sca = ecf->syscon.actions->data; + if (sca->action) eina_stringshare_del(sca->action); + if (sca->params) eina_stringshare_del(sca->params); + if (sca->button) eina_stringshare_del(sca->button); + if (sca->icon) eina_stringshare_del(sca->icon); + E_FREE(sca); + ecf->syscon.actions = eina_list_remove_list(ecf->syscon.actions, ecf->syscon.actions); + } E_FREE(ecf); } diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 959826071..ef55a247b 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -19,6 +19,7 @@ typedef struct _E_Config_Gadcon_Client E_Config_Gadcon_Client; typedef struct _E_Config_Shelf E_Config_Shelf; typedef struct _E_Config_Shelf_Desk E_Config_Shelf_Desk; typedef struct _E_Config_Mime_Icon E_Config_Mime_Icon; +typedef struct _E_Config_Syscon_Action E_Config_Syscon_Action; typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme; @@ -33,7 +34,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme; /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 0x012b +#define E_CONFIG_FILE_GENERATION 0x012c #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION) #define E_EVAS_ENGINE_DEFAULT 0 @@ -284,10 +285,10 @@ struct _E_Config int ping_clients_interval; int cache_flush_poll_interval; // GUI - int thumbscroll_enable; - int thumbscroll_threshhold; - double thumbscroll_momentum_threshhold; - double thumbscroll_friction; + int thumbscroll_enable; // GUI + int thumbscroll_threshhold; // GUI + double thumbscroll_momentum_threshhold; // GUI + double thumbscroll_friction; // GUI int hal_desktop; @@ -304,12 +305,12 @@ struct _E_Config } border_keyboard; struct { - double min; - double max; - double factor; - int base_dpi; - unsigned char use_dpi; - unsigned char use_custom; + double min; // GUI + double max; // GUI + double factor; // GUI + int base_dpi; // GUI + unsigned char use_dpi; // GUI + unsigned char use_custom; // GUI } scale; unsigned char show_cursor; // GUI @@ -317,7 +318,25 @@ struct _E_Config const char *default_system_menu; - unsigned char cfgdlg_normal_wins; + unsigned char cfgdlg_normal_wins; // GUI + + struct { + struct { + int icon_size; + } main, secondary, extra; + double timeout; + unsigned char do_input; + Eina_List *actions; + } syscon; +}; + +struct _E_Config_Syscon_Action +{ + const char *action; + const char *params; + const char *button; + const char *icon; + int is_main; }; struct _E_Config_Module diff --git a/src/bin/e_flowlayout.c b/src/bin/e_flowlayout.c index bbad398a4..929f9a876 100644 --- a/src/bin/e_flowlayout.c +++ b/src/bin/e_flowlayout.c @@ -758,6 +758,16 @@ _e_flowlayout_smart_extents_calcuate(E_Smart_Data *sd) sd->rows = 1; count = eina_list_count(sd->items); sd->cols = sd->w/minw; + if (count < sd->cols) sd->cols = count; + sd->rows = 0; + if (sd->cols > 0) + { + while (count > 0) + { + count -= sd->cols; + sd->rows++; + } + } } else { @@ -766,6 +776,16 @@ _e_flowlayout_smart_extents_calcuate(E_Smart_Data *sd) sd->cols = 1; count = eina_list_count(sd->items); sd->rows = sd->h/minh; + if (count < sd->cols) sd->rows = count; + sd->cols = 0; + if (sd->rows > 0) + { + while (count > 0) + { + count -= sd->rows; + sd->cols++; + } + } } minw *= sd->cols; diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 3917b8c7d..691f12f6e 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -15,22 +15,12 @@ struct _Main_Data E_Menu *enlightenment; E_Menu *config; E_Menu *lost_clients; - E_Menu *sys; }; /* local subsystem functions */ static void _e_int_menus_main_del_hook (void *obj); static void _e_int_menus_main_about (void *data, E_Menu *m, E_Menu_Item *mi); //static void _e_int_menus_fwin_favorites_item_cb(void *data, E_Menu *m, E_Menu_Item *mi); -static int _e_int_menus_main_lock_defer_cb (void *data); -static void _e_int_menus_main_lock (void *data, E_Menu *m, E_Menu_Item*mi); -static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_logout (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_halt (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_reboot (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_suspend (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_hibernate (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_apps_scan (E_Menu *m, Efreet_Menu *menu); static void _e_int_menus_apps_start (void *data, E_Menu *m); static void _e_int_menus_apps_free_hook (void *obj); @@ -61,8 +51,6 @@ static void _e_int_menus_themes_about (void *data, E_Menu *m, E_Menu_Item static void _e_int_menus_lost_clients_pre_cb (void *data, E_Menu *m); static void _e_int_menus_lost_clients_free_hook (void *obj); static void _e_int_menus_lost_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_sys_pre_cb (void *data, E_Menu *m); -static void _e_int_menus_sys_free_hook (void *obj); static void _e_int_menus_augmentation_add (E_Menu *m, Eina_List *augmentation); static void _e_int_menus_augmentation_del (E_Menu *m, Eina_List *augmentation); static void _e_int_menus_shelves_pre_cb (void *data, E_Menu *m); @@ -70,6 +58,8 @@ static void _e_int_menus_shelves_item_cb (void *data, E_Menu *m, E_Menu_Item static void _e_int_menus_shelves_add_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_shelves_del_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_main_showhide (void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_desk_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_items_del_hook (void *obj); static void _e_int_menus_item_label_set (Efreet_Menu *entry, E_Menu_Item *mi); @@ -225,13 +215,6 @@ e_int_menus_main_new(void) l = evas_hash_find(_e_int_menus_augmentation, "main/10"); if (l) _e_int_menus_augmentation_add(m, l); - subm = e_int_menus_sys_new(); - dat->sys = subm; - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("System")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/system"); - e_menu_item_submenu_set(mi, subm); - l = evas_hash_find(_e_int_menus_augmentation, "main/11"); if (l) _e_int_menus_augmentation_add(m, l); @@ -341,16 +324,6 @@ e_int_menus_lost_clients_new(void) return m; } -EAPI E_Menu * -e_int_menus_sys_new(void) -{ - E_Menu *m; - - m = e_menu_new(); - e_menu_pre_activate_callback_set(m, _e_int_menus_sys_pre_cb, NULL); - return m; -} - EAPI E_Int_Menu_Augmentation * e_int_menus_menu_augmentation_add(const char *menu, void (*func_add) (void *data, E_Menu *m), @@ -427,7 +400,6 @@ _e_int_menus_main_del_hook(void *obj) e_object_del(E_OBJECT(dat->enlightenment)); e_object_del(E_OBJECT(dat->config)); if (dat->lost_clients) e_object_del(E_OBJECT(dat->lost_clients)); - e_object_del(E_OBJECT(dat->sys)); free(dat); } _e_int_menus_augmentation_del(m, evas_hash_find(_e_int_menus_augmentation, "main/0")); @@ -470,24 +442,6 @@ _e_int_menus_fwin_favorites_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) } */ -/* FIXME: this is a workaround for menus' haveing a key grab AND exebuf - * wanting one too - */ -static int -_e_int_menus_main_lock_defer_cb(void *data) -{ - e_desklock_show(); - return 0; -} - -static void -_e_int_menus_main_lock(void *data, E_Menu *m, E_Menu_Item *mi) -{ - /* this is correct - should be after other idle enteres have run - i.e. - * after e_menu's idler_enterer has been run */ - ecore_idle_enterer_add(_e_int_menus_main_lock_defer_cb, m->zone); -} - static void _e_int_menus_main_showhide(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -506,15 +460,6 @@ _e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi) if ((a) && (a->func.go)) a->func.go(NULL, NULL); } -static void -_e_int_menus_main_logout(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Action *a; - - a = e_action_find("logout"); - if ((a) && (a->func.go)) a->func.go(NULL, NULL); -} - static void _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -524,42 +469,6 @@ _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi) if ((a) && (a->func.go)) a->func.go(NULL, NULL); } -static void -_e_int_menus_main_halt(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Action *a; - - a = e_action_find("halt"); - if ((a) && (a->func.go)) a->func.go(NULL, NULL); -} - -static void -_e_int_menus_main_reboot(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Action *a; - - a = e_action_find("reboot"); - if ((a) && (a->func.go)) a->func.go(NULL, NULL); -} - -static void -_e_int_menus_main_suspend(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Action *a; - - a = e_action_find("suspend"); - if ((a) && (a->func.go)) a->func.go(NULL, NULL); -} - -static void -_e_int_menus_main_hibernate(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Action *a; - - a = e_action_find("hibernate"); - if ((a) && (a->func.go)) a->func.go(NULL, NULL); -} - static void _e_int_menus_apps_scan(E_Menu *m, Efreet_Menu *menu) { @@ -858,95 +767,6 @@ _e_int_menus_config_free_hook(void *obj) _e_int_menus_augmentation_del(m, evas_hash_find(_e_int_menus_augmentation, "config/2")); } -static void -_e_int_menus_sys_pre_cb(void *data, E_Menu *m) -{ - E_Menu_Item *mi; - Eina_List *l = NULL; - - e_menu_pre_activate_callback_set(m, NULL, NULL); - - l = evas_hash_find(_e_int_menus_augmentation, "sys/0"); - if (l) - { - _e_int_menus_augmentation_add(m, l); - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Lock Screen")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/desklock_menu"); - e_menu_item_callback_set(mi, _e_int_menus_main_lock, NULL); - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - - if (e_sys_action_possible_get(E_SYS_HALT) || - e_sys_action_possible_get(E_SYS_REBOOT) || - e_sys_action_possible_get(E_SYS_SUSPEND) || - e_sys_action_possible_get(E_SYS_HIBERNATE)) - { - if (e_sys_action_possible_get(E_SYS_SUSPEND)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Suspend")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/suspend"); - e_menu_item_callback_set(mi, _e_int_menus_main_suspend, NULL); - } - if (e_sys_action_possible_get(E_SYS_HIBERNATE)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Hibernate")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/hibernate"); - e_menu_item_callback_set(mi, _e_int_menus_main_hibernate, NULL); - } - if (e_sys_action_possible_get(E_SYS_REBOOT)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Reboot")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/reboot"); - e_menu_item_callback_set(mi, _e_int_menus_main_reboot, NULL); - } - if (e_sys_action_possible_get(E_SYS_HALT)) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Shut Down")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/halt"); - e_menu_item_callback_set(mi, _e_int_menus_main_halt, NULL); - } - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Logout")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/logout"); - e_menu_item_callback_set(mi, _e_int_menus_main_logout, NULL); - - l = evas_hash_find(_e_int_menus_augmentation, "sys/1"); - if (l) - { - _e_int_menus_augmentation_add(m, l); - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - } - - e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_sys_free_hook); -} - -static void -_e_int_menus_sys_free_hook(void *obj) -{ - E_Menu *m; - - m = obj; - _e_int_menus_augmentation_del(m, evas_hash_find(_e_int_menus_augmentation, "sys/0")); - _e_int_menus_augmentation_del(m, evas_hash_find(_e_int_menus_augmentation, "sys/1")); -} - static int _e_int_menus_clients_group_desk_cb(const void *d1, const void *d2) { diff --git a/src/bin/e_int_menus.h b/src/bin/e_int_menus.h index 865345f93..ed269ad0b 100644 --- a/src/bin/e_int_menus.h +++ b/src/bin/e_int_menus.h @@ -45,7 +45,6 @@ EAPI E_Menu *e_int_menus_all_apps_new(void); EAPI E_Menu *e_int_menus_config_new(void); EAPI E_Menu *e_int_menus_lost_clients_new(void); EAPI E_Menu *e_int_menus_shelves_new(void); -EAPI E_Menu *e_int_menus_sys_new(void); EAPI E_Int_Menu_Augmentation *e_int_menus_menu_augmentation_add(const char *menu, void (*func_add) (void *data, E_Menu *m), diff --git a/src/bin/e_sys.c b/src/bin/e_sys.c index 3e765cbe3..e4c52b035 100644 --- a/src/bin/e_sys.c +++ b/src/bin/e_sys.c @@ -69,7 +69,7 @@ e_sys_action_possible_get(E_Sys_Action a) case E_SYS_EXIT_NOW: return 1; case E_SYS_LOGOUT: - return 0; + return 1; case E_SYS_HALT: case E_SYS_HALT_NOW: return _e_sys_can_halt; diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am index c91b01949..d4c1b6c3e 100644 --- a/src/modules/Makefile.am +++ b/src/modules/Makefile.am @@ -55,7 +55,8 @@ mixer \ conf_window_remembers \ conf_scale \ connman \ -illume +illume \ +syscon if HAVE_TEMPERATURE SUBDIRS += temperature diff --git a/src/modules/illume/e_mod_win.c b/src/modules/illume/e_mod_win.c index 2618d2512..41cb7c4c4 100644 --- a/src/modules/illume/e_mod_win.c +++ b/src/modules/illume/e_mod_win.c @@ -644,7 +644,11 @@ _cb_slipshelf_close(const void *data, E_Slipshelf *ess, E_Slipshelf_Action actio } else { - e_syswin_show(slipwin); + E_Action *a; + + a = e_action_find("syscon"); + if ((a) && (a->func.go)) a->func.go(NULL, NULL); +// e_syswin_show(slipwin); } } diff --git a/src/modules/syscon/.cvsignore b/src/modules/syscon/.cvsignore new file mode 100644 index 000000000..06d064a84 --- /dev/null +++ b/src/modules/syscon/.cvsignore @@ -0,0 +1,7 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +module.la +module.desktop diff --git a/src/modules/syscon/Makefile.am b/src/modules/syscon/Makefile.am new file mode 100644 index 000000000..59995bcef --- /dev/null +++ b/src/modules/syscon/Makefile.am @@ -0,0 +1,31 @@ +MAINTAINERCLEANFILES = Makefile.in +MODULE = syscon + +# data files for the module +filesdir = $(libdir)/enlightenment/modules/$(MODULE) +files_DATA = \ +e-module-$(MODULE).edj module.desktop + +EXTRA_DIST = $(files_DATA) + +# the module .so file +INCLUDES = -I. \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src/modules/$(MODULE) \ + -I$(top_srcdir)/src/bin \ + -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/modules \ + @e_cflags@ +pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH) +pkg_LTLIBRARIES = module.la +module_la_SOURCES = e_mod_main.c \ + e_mod_main.h \ + e_syscon.c \ + e_syscon.h + +module_la_LIBADD = @e_libs@ @dlopen_libs@ +module_la_LDFLAGS = -module -avoid-version +module_la_DEPENDENCIES = $(top_builddir)/config.h + +uninstall: + rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE) diff --git a/src/modules/syscon/e-module-syscon.edj b/src/modules/syscon/e-module-syscon.edj new file mode 100644 index 0000000000000000000000000000000000000000..05da0becf08cde5cbc0b485f4c25ea1e01558244 GIT binary patch literal 6741 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 literal 0 HcmV?d00001 diff --git a/src/modules/syscon/e_mod_main.c b/src/modules/syscon/e_mod_main.c new file mode 100644 index 000000000..95b59e7eb --- /dev/null +++ b/src/modules/syscon/e_mod_main.c @@ -0,0 +1,138 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" +#include "e_mod_main.h" + +/***************************************************************************/ +/**/ +/* actual module specifics */ + +static void _e_mod_action_syscon_cb(E_Object *obj, const char *params); +static int _e_mod_syscon_defer_cb(void *data); +static void _e_mod_syscon_cb(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_mod_menu_add(void *data, E_Menu *m); + +static E_Module *conf_module = NULL; +static E_Action *act = NULL; +static E_Int_Menu_Augmentation *maug = NULL; + +/**/ +/***************************************************************************/ + +/***************************************************************************/ +/**/ + +/**/ +/***************************************************************************/ + +/***************************************************************************/ +/**/ +/* module setup */ +EAPI E_Module_Api e_modapi = +{ + E_MODULE_API_VERSION, + "Syscon" +}; + +EAPI void * +e_modapi_init(E_Module *m) +{ + conf_module = m; + e_syscon_init(); + /* add module supplied action */ + act = e_action_add("syscon"); + if (act) + { + act->func.go = _e_mod_action_syscon_cb; + e_action_predef_name_set(_("System"), _("System Control"), "syscon", + NULL, NULL, 0); + } + maug = e_int_menus_menu_augmentation_add("main/10", _e_mod_menu_add, NULL, NULL, NULL); + e_module_delayed_set(m, 1); + return m; +} + +EAPI int +e_modapi_shutdown(E_Module *m) +{ + /* remove module-supplied menu additions */ + if (maug) + { + e_int_menus_menu_augmentation_del("main/10", maug); + maug = NULL; + } + /* remove module-supplied action */ + if (act) + { + e_action_predef_name_del(_("System"), _("System Controls")); + e_action_del("syscon"); + act = NULL; + } + e_syscon_shutdown(); + conf_module = NULL; + return 1; +} + +EAPI int +e_modapi_save(E_Module *m) +{ + return 1; +} + +/* action callback */ +static void +_e_mod_action_syscon_cb(E_Object *obj, const char *params) +{ + E_Zone *zone = NULL; + + // params = syscon action + now: + // desk_lock + // logout + // halt + // reboot + // suspend + // hibernate + if (obj) + { + if (obj->type == E_MANAGER_TYPE) + zone = e_util_zone_current_get((E_Manager *)obj); + else if (obj->type == E_CONTAINER_TYPE) + zone = e_util_zone_current_get(((E_Container *)obj)->manager); + else if (obj->type == E_ZONE_TYPE) + zone = e_util_zone_current_get(((E_Zone *)obj)->container->manager); + else + zone = e_util_zone_current_get(e_manager_current_get()); + } + if (!zone) zone = e_util_zone_current_get(e_manager_current_get()); + if (zone) e_syscon_show(zone, params); +} + +/* menu item callback(s) */ +static int +_e_mod_syscon_defer_cb(void *data) +{ + E_Zone *zone; + + zone = data; + if (zone) e_syscon_show(zone, NULL); + return 0; +} + +static void +_e_mod_syscon_cb(void *data, E_Menu *m, E_Menu_Item *mi) +{ + ecore_idle_enterer_add(_e_mod_syscon_defer_cb, m->zone); +} + +/* menu item add hook */ +static void +_e_mod_menu_add(void *data, E_Menu *m) +{ + E_Menu_Item *mi; + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("System")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/system"); + e_menu_item_callback_set(mi, _e_mod_syscon_cb, NULL); +} diff --git a/src/modules/syscon/e_mod_main.h b/src/modules/syscon/e_mod_main.h new file mode 100644 index 000000000..80737e6f5 --- /dev/null +++ b/src/modules/syscon/e_mod_main.h @@ -0,0 +1,19 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifndef E_MOD_MAIN_H +#define E_MOD_MAIN_H + +#define E_TYPEDEFS 1 +#include "e_syscon.h" + +#undef E_TYPEDEFS +#include "e_syscon.h" + +EAPI extern E_Module_Api e_modapi; + +EAPI void *e_modapi_init (E_Module *m); +EAPI int e_modapi_shutdown (E_Module *m); +EAPI int e_modapi_save (E_Module *m); + +#endif diff --git a/src/modules/syscon/e_syscon.c b/src/modules/syscon/e_syscon.c new file mode 100644 index 000000000..787359fc8 --- /dev/null +++ b/src/modules/syscon/e_syscon.c @@ -0,0 +1,406 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" +#include "e_mod_main.h" + +/* local subsystem functions */ +static int _cb_key_down(void *data, int type, void *event); +static int _cb_mouse_down(void *data, int type, void *event); +static int _cb_mouse_up(void *data, int type, void *event); +static int _cb_mouse_move(void *data, int type, void *event); +static int _cb_mouse_wheel(void *data, int type, void *event); +static void _cb_signal_close(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _cb_signal_syscon(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _cb_signal_action(void *data, Evas_Object *obj, const char *emission, const char *source); +static int _cb_timeout_defaction(void *data); + +/* local subsystem globals */ +static E_Popup *popup = NULL; +static Ecore_X_Window input_window = 0; +static const char *do_defact = NULL; +static Eina_List *handlers = NULL; +static Evas_Object *o_bg = NULL; +static Evas_Object *o_flow_main = NULL; +static Evas_Object *o_flow_secondary = NULL; +static Evas_Object *o_flow_extra = NULL; +static int inevas = 0; +static Ecore_Timer *deftimer = NULL; + +/* externally accessible functions */ +EAPI int +e_syscon_init(void) +{ + return 1; +} + +EAPI int +e_syscon_shutdown(void) +{ + e_syscon_hide(); + return 1; +} + +EAPI int +e_syscon_show(E_Zone *zone, const char *defact) +{ + Evas_Object *o, *o2; + Evas_Coord mw, mh; + int x, y, w, h; + int iw, ih; + Eina_List *l; + + if (popup) return 0; + + input_window = ecore_x_window_input_new(zone->container->win, zone->x, + zone->y, zone->w, zone->h); + ecore_x_window_show(input_window); + if (!e_grabinput_get(input_window, 1, input_window)) + { + ecore_x_window_del(input_window); + input_window = 0; + return 0; + } + + popup = e_popup_new(zone, 0, 0, 1, 1); + if (!popup) + { + e_grabinput_release(input_window, input_window); + ecore_x_window_del(input_window); + input_window = 0; + return 0; + } + evas_event_freeze(popup->evas); + e_popup_layer_set(popup, 500); + + handlers = eina_list_append + (handlers, ecore_event_handler_add + (ECORE_X_EVENT_KEY_DOWN, _cb_key_down, NULL)); + handlers = eina_list_append + (handlers, ecore_event_handler_add + (ECORE_X_EVENT_MOUSE_BUTTON_DOWN, _cb_mouse_down, NULL)); + handlers = eina_list_append + (handlers, ecore_event_handler_add + (ECORE_X_EVENT_MOUSE_BUTTON_UP, _cb_mouse_up, NULL)); + handlers = eina_list_append + (handlers, ecore_event_handler_add + (ECORE_X_EVENT_MOUSE_MOVE, _cb_mouse_move, NULL)); + handlers = eina_list_append + (handlers, ecore_event_handler_add + (ECORE_X_EVENT_MOUSE_WHEEL, _cb_mouse_wheel, NULL)); + + o = edje_object_add(popup->evas); + o_bg = o; + e_theme_edje_object_set(o, "base/theme/syscon", + "e/widgets/syscon/main"); + edje_object_part_text_set(o, "e.text.label", _("Cancel")); + edje_object_signal_callback_add(o, "e,action,close", "", _cb_signal_close, NULL); + edje_object_signal_callback_add(o, "e,action,syscon", "*", _cb_signal_syscon, NULL); + + // main (default): + // halt | suspend | desk_lock + // secondary (default): + // reboot | hibernate | logout + // extra (example for illume): + // home | close | kill + + iw = 64 * e_scale; + ih = 64 * e_scale; + + o = e_flowlayout_add(popup->evas); + o_flow_main = o; + e_flowlayout_orientation_set(o, 1); + e_flowlayout_flowdirection_set(o, 1, 1); + e_flowlayout_homogenous_set(o, 1); + + o = e_flowlayout_add(popup->evas); + o_flow_secondary = o; + e_flowlayout_orientation_set(o, 1); + e_flowlayout_flowdirection_set(o, 1, 1); + e_flowlayout_homogenous_set(o, 1); + + o = e_flowlayout_add(popup->evas); + o_flow_extra = o; + e_flowlayout_orientation_set(o, 1); + e_flowlayout_flowdirection_set(o, 1, 1); + e_flowlayout_homogenous_set(o, 1); + + for (l = e_config->syscon.actions; l; l = l->next) + { + E_Config_Syscon_Action *sca; + char buf[1024]; + E_Action *a; + int disabled; + + sca = l->data; + if (!sca->action) continue; + a = e_action_find(sca->action); + if (!a) continue; + disabled = 0; + if ((!strcmp(sca->action, "logout")) && + (!e_sys_action_possible_get(E_SYS_LOGOUT))) disabled = 1; + else if ((!strcmp(sca->action, "halt")) && + (!e_sys_action_possible_get(E_SYS_HALT))) disabled = 1; + else if ((!strcmp(sca->action, "halt_now")) && + (!e_sys_action_possible_get(E_SYS_HALT_NOW))) disabled = 1; + else if ((!strcmp(sca->action, "reboot")) && + (!e_sys_action_possible_get(E_SYS_REBOOT))) disabled = 1; + else if ((!strcmp(sca->action, "suspend")) && + (!e_sys_action_possible_get(E_SYS_SUSPEND))) disabled = 1; + else if ((!strcmp(sca->action, "hibernate")) && + (!e_sys_action_possible_get(E_SYS_HIBERNATE))) disabled = 1; + o = edje_object_add(popup->evas); + edje_object_signal_callback_add(o, "e,action,click", "", _cb_signal_action, sca); + if (sca->button) + { + snprintf(buf, sizeof(buf), "e/widgets/syscon/item/%s", + sca->button); + e_theme_edje_object_set(o, "base/theme/widgets", buf); + } + else + e_theme_edje_object_set(o, "base/theme/widgets", + "e/widgets/syscon/item/button"); +// edje_object_part_text_set(o, "e.text.label", sca->action); + if (sca->icon) + { + o2 = edje_object_add(popup->evas); + e_util_edje_icon_set(o2, sca->icon); + edje_object_part_swallow(o, "e.swallow.icon", o2); + evas_object_show(o2); + if (disabled) + edje_object_signal_emit(o2, "e,state,disabled", "e"); + } + if (disabled) + edje_object_signal_emit(o, "e,state,disabled", "e"); + if (sca->is_main) + { + e_flowlayout_pack_end(o_flow_main, o); + iw = ih = e_config->syscon.main.icon_size * e_scale; + } + else + { + e_flowlayout_pack_end(o_flow_secondary, o); + iw = ih = e_config->syscon.secondary.icon_size * e_scale; + } + e_flowlayout_pack_options_set(o, 1, 1, 0, 0, 0.5, 0.5, + iw, ih, iw, ih); + evas_object_show(o); + } + // FIXME: "extra" list needs to be handled + + e_flowlayout_fill_set(o_flow_main, 1); + edje_object_part_swallow(o_bg, "e.swallow.main", o_flow_main); + e_flowlayout_fill_set(o_flow_secondary, 1); + edje_object_part_swallow(o_bg, "e.swallow.secondary", o_flow_secondary); + e_flowlayout_fill_set(o_flow_extra, 1); + edje_object_part_swallow(o_bg, "e.swallow.extra", o_flow_extra); + + evas_object_resize(o_bg, zone->w, zone->h); + edje_object_calc_force(o_bg); + + e_flowlayout_min_size_get(o_flow_main, &mw, &mh); + edje_extern_object_min_size_set(o_flow_main, mw, mh); + edje_object_part_swallow(o_bg, "e.swallow.main", o_flow_main); + e_flowlayout_min_size_get(o_flow_secondary, &mw, &mh); + edje_extern_object_min_size_set(o_flow_secondary, mw, mh); + edje_object_part_swallow(o_bg, "e.swallow.secondary", o_flow_secondary); + e_flowlayout_min_size_get(o_flow_extra, &mw, &mh); + edje_extern_object_min_size_set(o_flow_extra, mw, mh); + edje_object_part_swallow(o_bg, "e.swallow.extra", o_flow_extra); + + edje_object_size_min_calc(o_bg, &mw, &mh); + w = mw; + if (w > zone->w) w = zone->w; + x = (zone->w - w) / 2; + h = mh; + if (h > zone->h) h = zone->h; + y = (zone->h - h) / 2; + + e_popup_move_resize(popup, x, y, w, h); + evas_object_move(o_bg, 0, 0); + evas_object_resize(o_bg, w, h); + evas_object_show(o_bg); + e_popup_edje_bg_object_set(popup, o_bg); + + if (e_config->syscon.do_input) + { + deftimer = ecore_timer_add(e_config->syscon.timeout, _cb_timeout_defaction, NULL); + if (defact) do_defact = eina_stringshare_add(defact); + } + + evas_event_thaw(popup->evas); + inevas = 0; + e_popup_show(popup); + return 1; +} + +EAPI void +e_syscon_hide(void) +{ + if (!popup) return; + + if (deftimer) + { + ecore_timer_del(deftimer); + deftimer = NULL; + } + if (do_defact) eina_stringshare_del(do_defact); + do_defact = NULL; + while (handlers) + { + ecore_event_handler_del(handlers->data); + handlers = eina_list_remove_list(handlers, handlers); + } + e_popup_hide(popup); + e_object_del(E_OBJECT(popup)); + popup = NULL; + e_grabinput_release(input_window, input_window); + ecore_x_window_del(input_window); + input_window = 0; +} + +/* local subsystem functions */ +static int +_cb_key_down(void *data, int type, void *event) +{ + Ecore_X_Event_Key_Down *ev; + + ev = event; + if (ev->event_win != input_window) return 1; + if (!strcmp(ev->keysymbol, "Escape")) + { + e_syscon_hide(); + } + else if (!strcmp(ev->keysymbol, "Up")) + { + // FIXME: implement focus and key control... eventually + } + + return 1; +} + +static int +_cb_mouse_down(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Button_Down *ev; + Evas_Button_Flags flags = EVAS_BUTTON_NONE; + + ev = event; + if (ev->event_win != input_window) return 1; + if (ev->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK; + if (ev->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK; + if ((ev->x < popup->x) || (ev->x >= (popup->x + popup->w)) || + (ev->y < popup->y) || (ev->y >= (popup->y + popup->h))) + { + e_syscon_hide(); + return 1; + } + evas_event_feed_mouse_down(popup->evas, + ev->button, flags, + ev->time, NULL); + return 1; +} + +static int +_cb_mouse_up(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Button_Up *ev; + + ev = event; + if (ev->event_win != input_window) return 1; + evas_event_feed_mouse_up(popup->evas, + ev->button, EVAS_BUTTON_NONE, + ev->time, NULL); + return 1; +} + +static int +_cb_mouse_move(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Move *ev; + + ev = event; + if (ev->event_win != input_window) return 1; + if (!inevas) + { + evas_event_feed_mouse_in(popup->evas, ev->time, NULL); + inevas = 1; + } + evas_event_feed_mouse_move(popup->evas, + ev->x - popup->x, + ev->y - popup->y, + ev->time, NULL); + return 1; +} + +static int +_cb_mouse_wheel(void *data, int type, void *event) +{ + Ecore_X_Event_Mouse_Wheel *ev; + + ev = event; + if (ev->event_win != input_window) return 1; + evas_event_feed_mouse_wheel(popup->evas, + ev->direction, ev->z, + ev->time, NULL); + return 1; +} + +static void +_cb_signal_close(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + e_syscon_hide(); +} + +static void +_do_action_name(const char *action) +{ + Eina_List *l; + + for (l = e_config->syscon.actions; l; l = l->next) + { + E_Config_Syscon_Action *sca; + E_Action *a; + + sca = l->data; + if (!sca->action) continue; + if (!strcmp(sca->action, action)) + { + a = e_action_find(sca->action); + if (!a) break; + if (a) a->func.go(NULL, sca->params); + break; + } + } +} + +static void +_cb_signal_syscon(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + e_syscon_hide(); + _do_action_name(source); +} + +static void +_cb_signal_action(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Config_Syscon_Action *sca; + E_Action *a; + + e_syscon_hide(); + sca = data; + if (!sca) return; + a = e_action_find(sca->action); + if (!a) return; + if (a) a->func.go(NULL, sca->params); +} + +static int +_cb_timeout_defaction(void *data) +{ + deftimer = NULL; + if (!do_defact) return 0; + e_syscon_hide(); + _do_action_name(do_defact); + return 0; +} diff --git a/src/modules/syscon/e_syscon.h b/src/modules/syscon/e_syscon.h new file mode 100644 index 000000000..2187b0509 --- /dev/null +++ b/src/modules/syscon/e_syscon.h @@ -0,0 +1,17 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS + +#else +#ifndef E_SYSCON_H +#define E_SYSCON_H + +EAPI int e_syscon_init(void); +EAPI int e_syscon_shutdown(void); + +EAPI int e_syscon_show(E_Zone *zone, const char *defact); +EAPI void e_syscon_hide(void); + +#endif +#endif diff --git a/src/modules/syscon/module.desktop.in b/src/modules/syscon/module.desktop.in new file mode 100644 index 000000000..243e71e63 --- /dev/null +++ b/src/modules/syscon/module.desktop.in @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=Link +Name=System Controls +Icon=e-module-syscon +Comment=System Controls Module
This module provides a unified popup
dialog for all the system actions
in Enlightenment. +X-Enlightenment-ModuleType=system diff --git a/x-ui.sh b/x-ui.sh index 7a3b32f82..0b8b131fd 100755 --- a/x-ui.sh +++ b/x-ui.sh @@ -1,10 +1,10 @@ #!/bin/sh -Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640x16 & +#Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640x16 & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640 & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480x16 & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480 & -#Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320x16 & +Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320x16 & #Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320 & #Xephyr :1 -noreset -ac -br -dpi 186 -screen 272x480x16 & #Xephyr :1 -noreset -ac -br -dpi 186 -screen 272x480 &