e: Remove oFono module
Kind of broken, with almost no functionality. Don't risk someone releasing E17 with this thing. Hopefully I'll be able to rewrite it (or find someone to do) before release. SVN revision: 77157
This commit is contained in:
parent
da40a35d52
commit
68bd64d583
11
configure.ac
11
configure.ac
|
@ -804,14 +804,6 @@ dnl AC_E_CHECK_PKG(DUMMY, [ connman >= 1.0 ], [], [CONNMAN=false])
|
|||
AC_SUBST(ECONNMAN_CFLAGS)
|
||||
AC_SUBST(ECONNMAN_LIBS)
|
||||
|
||||
AM_CONDITIONAL(HAVE_EOFONO, false)
|
||||
define([CHECK_MODULE_OFONO],
|
||||
[
|
||||
AC_E_CHECK_PKG(EOFONO, [ edbus >= 1.2.0 eofono >= 1.2.0 ], [], [OFONO=false])
|
||||
])
|
||||
AC_SUBST(EOFONO_CFLAGS)
|
||||
AC_SUBST(EOFONO_LIBS)
|
||||
|
||||
have_wayland_clients=no
|
||||
AC_ARG_ENABLE([wayland-clients],
|
||||
AS_HELP_STRING([--enable-wayland-clients],[enable wayland clients in composite module @<:@default=disabled@:>@]),
|
||||
|
@ -869,7 +861,6 @@ AC_E_OPTIONAL_MODULE([conf_interaction], true)
|
|||
AC_E_OPTIONAL_MODULE([gadman], true)
|
||||
AC_E_OPTIONAL_MODULE([mixer], true, [CHECK_MODULE_MIXER])
|
||||
AC_E_OPTIONAL_MODULE([connman], true, [CHECK_MODULE_CONNMAN])
|
||||
AC_E_OPTIONAL_MODULE([ofono], true, [CHECK_MODULE_OFONO])
|
||||
AC_E_OPTIONAL_MODULE([illume2], true)
|
||||
AC_E_OPTIONAL_MODULE([syscon], true)
|
||||
AC_E_OPTIONAL_MODULE([everything], true)
|
||||
|
@ -1001,8 +992,6 @@ src/modules/mixer/Makefile
|
|||
src/modules/mixer/module.desktop
|
||||
src/modules/connman/Makefile
|
||||
src/modules/connman/module.desktop
|
||||
src/modules/ofono/Makefile
|
||||
src/modules/ofono/module.desktop
|
||||
src/modules/illume2/Makefile
|
||||
src/modules/illume2/doc/illume.dox
|
||||
src/modules/illume2/doc/Makefile
|
||||
|
|
|
@ -8333,537 +8333,6 @@ CONNMAN_ICON(ethernet)
|
|||
#undef CONNMAN_STATE_PART_ADD
|
||||
#undef CONNMAN_IMAGES_SET
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
/*** MOD: OFONO ***/
|
||||
|
||||
// GADGET and TIP all have the same parts and signals:
|
||||
//
|
||||
// PARTS:
|
||||
// e.text.name
|
||||
// e.text.status
|
||||
// e.text.op
|
||||
//
|
||||
// SIGNALS:
|
||||
// e,unavailable: ofonod is not running (nothing else works)
|
||||
// e,available: ofonod is running
|
||||
// e,name,available: there is info about device name
|
||||
// e,name,unavailable: there is no info about device name
|
||||
// e,netinfo,available: there is info about network
|
||||
// e,netinfo,unavailable: there is no info about network
|
||||
//
|
||||
// MESSAGES:
|
||||
// id=1, type=MSG_INT, description=strength (0-100)
|
||||
|
||||
group {
|
||||
name: "e/modules/ofono/main";
|
||||
max: 128 128;
|
||||
min: 1 1;
|
||||
images {
|
||||
image: "gsm_0.png" COMP;
|
||||
image: "gsm_1.png" COMP;
|
||||
image: "gsm_2.png" COMP;
|
||||
image: "gsm_3.png" COMP;
|
||||
image: "gsm_4.png" COMP;
|
||||
image: "gsm_no.png" COMP;
|
||||
}
|
||||
script {
|
||||
public message(Msg_Type:type, id, ...) {
|
||||
if ((type == MSG_INT) && (id == 1)) {
|
||||
new strength;
|
||||
strength = getarg(2);
|
||||
if (strength >= 80)
|
||||
run_program(PROGRAM:"strength,5");
|
||||
else if (strength >= 60)
|
||||
run_program(PROGRAM:"strength,4");
|
||||
else if (strength >= 40)
|
||||
run_program(PROGRAM:"strength,3");
|
||||
else if (strength >= 20)
|
||||
run_program(PROGRAM:"strength,2");
|
||||
else if (strength >= 1)
|
||||
run_program(PROGRAM:"strength,1");
|
||||
else
|
||||
run_program(PROGRAM:"strength,no");
|
||||
}
|
||||
}
|
||||
}
|
||||
parts {
|
||||
part {
|
||||
name: "eventarea";
|
||||
type: RECT;
|
||||
mouse_events: 1;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "eventarea.image";
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
aspect: 1.6 1.7;
|
||||
aspect_preference: HORIZONTAL;
|
||||
image.normal: "gsm_no.png";
|
||||
rel1.to: "eventarea";
|
||||
rel2.to: "eventarea";
|
||||
}
|
||||
description {
|
||||
state: "strength,5" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_4.png";
|
||||
}
|
||||
description {
|
||||
state: "strength,4" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_3.png";
|
||||
}
|
||||
description {
|
||||
state: "strength,3" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_2.png";
|
||||
}
|
||||
description {
|
||||
state: "strength,2" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_1.png";
|
||||
}
|
||||
description {
|
||||
state: "strength,1" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_0.png";
|
||||
}
|
||||
description {
|
||||
state: "strength,no" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
image.normal: "gsm_no.png";
|
||||
}
|
||||
description {
|
||||
state: "disabled" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 100;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "strength,5";
|
||||
action: STATE_SET "strength,5" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,4";
|
||||
action: STATE_SET "strength,4" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,3";
|
||||
action: STATE_SET "strength,3" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,2";
|
||||
action: STATE_SET "strength,2" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,1";
|
||||
action: STATE_SET "strength,1" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,0";
|
||||
action: STATE_SET "strength,0" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "strength,no";
|
||||
action: STATE_SET "strength,no" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "e,available";
|
||||
signal: "e,available";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "e,unavailable";
|
||||
signal: "e,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "disabled" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
program {
|
||||
name: "netinfo,unavailable";
|
||||
signal: "e,netinfo,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "eventarea.image";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "e.text.name";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
effect: SOFT_SHADOW;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 224 224 224 255;
|
||||
color3: 0 0 0 64;
|
||||
align: 0.5 1.0;
|
||||
rel1 {
|
||||
relative: 0.0 1.0;
|
||||
offset: 0 -20;
|
||||
}
|
||||
rel2 {
|
||||
relative: 1.0 1.0;
|
||||
offset: -1 -1;
|
||||
}
|
||||
text {
|
||||
font: "Sans";
|
||||
size: 8;
|
||||
align: 0.5 1.0;
|
||||
text: "";
|
||||
min: 0 1;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "hidden" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "resize";
|
||||
signal: "resize";
|
||||
script {
|
||||
new x, y, w, h;
|
||||
get_geometry(PART:"eventarea", x, y, w, h);
|
||||
if (w <= 32)
|
||||
set_state(PART:"e.text.name", "hidden", 0.0);
|
||||
else
|
||||
set_state(PART:"e.text.name", "default", 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
group {
|
||||
name: "e/modules/ofono/tip";
|
||||
min: 220 80;
|
||||
images {
|
||||
image: "inset_sunk.png" COMP;
|
||||
}
|
||||
script {
|
||||
public message(Msg_Type:type, id, ...) {
|
||||
if ((type == MSG_INT) && (id == 1)) {
|
||||
new strength;
|
||||
new Float:val;
|
||||
strength = getarg(2);
|
||||
val = float(strength) / 100.0;
|
||||
set_drag(PART:"strength_gauge_knob", val, 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
parts {
|
||||
part {
|
||||
name: "e.text.error";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 150 150 150 255;
|
||||
fixed: 1 1;
|
||||
visible: 0;
|
||||
text {
|
||||
font: "Sans:style=Bold";
|
||||
size: 16;
|
||||
text: "";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "shown" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "error,e,available";
|
||||
signal: "e,available";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.error";
|
||||
}
|
||||
program {
|
||||
name: "error,e,unavailable";
|
||||
signal: "e,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "shown" 0.0;
|
||||
target: "e.text.error";
|
||||
}
|
||||
program {
|
||||
name: "error,netinfo,available";
|
||||
signal: "e,netinfo,available";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.error";
|
||||
}
|
||||
program {
|
||||
name: "error,netinfo,unavailable";
|
||||
signal: "e,netinfo,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "shown" 0.0;
|
||||
target: "e.text.error";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "e.text.name";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
effect: SOFT_SHADOW;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 240 240 240 255;
|
||||
color3: 0 0 0 64;
|
||||
align: 0.0 0.0;
|
||||
fixed: 1 1;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
relative: 0.0 0.0;
|
||||
offset: 10 5;
|
||||
}
|
||||
text {
|
||||
font: "Sans:style=Bold";
|
||||
size: 16;
|
||||
align: 0.0 0.0;
|
||||
text: "";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "shown" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "name,available";
|
||||
signal: "e,available";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.name";
|
||||
}
|
||||
program {
|
||||
name: "name,unavailable";
|
||||
signal: "e,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "shown" 0.0;
|
||||
target: "e.text.name";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "e.text.op";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
effect: SOFT_SHADOW;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 240 240 240 255;
|
||||
color3: 0 0 0 64;
|
||||
align: 0.0 0.0;
|
||||
fixed: 1 1;
|
||||
visible: 1;
|
||||
rel1 {
|
||||
relative: 0.0 0.0;
|
||||
offset: 10 5;
|
||||
}
|
||||
text {
|
||||
font: "Sans:style=Bold";
|
||||
size: 16;
|
||||
align: 0.0 0.0;
|
||||
text: "";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "hidden" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "op,available";
|
||||
signal: "e,available";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.op";
|
||||
}
|
||||
program {
|
||||
name: "op,unavailable";
|
||||
signal: "e,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "hidden" 0.0;
|
||||
target: "e.text.op";
|
||||
}
|
||||
program {
|
||||
name: "op,netinfo,unavailable";
|
||||
signal: "e,netinfo,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "hidden" 0.0;
|
||||
target: "e.text.op";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "e.text.status";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 0 0 0 255;
|
||||
align: 0.0 0.0;
|
||||
fixed: 1 1;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
relative: 0.0 0.0;
|
||||
offset: 10 30;
|
||||
}
|
||||
text {
|
||||
font: "Sans";
|
||||
size: 10;
|
||||
align: 0.0 0.0;
|
||||
text: "";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "shown" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "status,available";
|
||||
signal: "e,netinfo,available";
|
||||
source: "e";
|
||||
action: STATE_SET "shown" 0.0;
|
||||
target: "e.text.status";
|
||||
}
|
||||
program {
|
||||
name: "status,unavailable";
|
||||
signal: "e,netinfo,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.status";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "strength_gauge_bg";
|
||||
type: IMAGE;
|
||||
scale: 1;
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
min: 100 10;
|
||||
max: 99999 99999;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
relative: 0.0 0.0;
|
||||
offset: 10 55;
|
||||
}
|
||||
rel2 {
|
||||
relative: 1.0 1.0;
|
||||
offset: -10 -10;
|
||||
}
|
||||
image {
|
||||
normal: "inset_sunk.png";
|
||||
border: 6 6 6 6;
|
||||
}
|
||||
}
|
||||
description {
|
||||
state: "shown" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "strength,available";
|
||||
signal: "e,netinfo,available";
|
||||
source: "e";
|
||||
action: STATE_SET "shown" 0.0;
|
||||
target: "strength_gauge_bg";
|
||||
}
|
||||
program {
|
||||
name: "strength,unavailable";
|
||||
signal: "e,netinfo,unavailable";
|
||||
source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "strength_gauge_bg";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "strength_gauge_confine";
|
||||
type: RECT;
|
||||
scale: 1;
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
to: "strength_gauge_bg";
|
||||
offset: 1 1;
|
||||
}
|
||||
rel2 {
|
||||
to: "strength_gauge_bg";
|
||||
offset: -2 -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "strength_gauge_knob";
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
type: RECT;
|
||||
dragable {
|
||||
x: 1 1 0;
|
||||
y: 0 0 0;
|
||||
confine: "strength_gauge_confine";
|
||||
confine: "strength_gauge_bg";
|
||||
}
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
visible: 0;
|
||||
min: 0 0;
|
||||
max: 0 0;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "strength_gauge_fill";
|
||||
mouse_events: 0;
|
||||
type: RECT;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 55 55 55 100;
|
||||
fixed: 1 1;
|
||||
rel1.to: "strength_gauge_confine";
|
||||
rel2 {
|
||||
to_x: "strength_gauge_knob";
|
||||
to_y: "strength_gauge_confine";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/*** MOD: CONF_EDGEBINDINGS ***/
|
||||
|
||||
|
|
|
@ -179,10 +179,6 @@ if USE_MODULE_QUICKACCESS
|
|||
SUBDIRS += quickaccess
|
||||
endif
|
||||
|
||||
if USE_MODULE_OFONO
|
||||
SUBDIRS += ofono
|
||||
endif
|
||||
|
||||
if USE_MODULE_SHOT
|
||||
SUBDIRS += shot
|
||||
endif
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
MAINTAINERCLEANFILES = Makefile.in
|
||||
MODULE = ofono
|
||||
|
||||
# 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_builddir)/src/bin \
|
||||
-I$(top_srcdir)/src/modules \
|
||||
@e_cflags@ @EOFONO_CFLAGS@
|
||||
|
||||
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
|
||||
|
||||
pkg_LTLIBRARIES = module.la
|
||||
|
||||
module_la_SOURCES = e_mod_main.h \
|
||||
e_mod_main.c
|
||||
|
||||
module_la_LIBADD = @e_libs@ @dlopen_libs@ @EOFONO_LIBS@
|
||||
module_la_LDFLAGS = -module -avoid-version
|
||||
module_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||
|
||||
uninstall:
|
||||
rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE)
|
Binary file not shown.
|
@ -1,875 +0,0 @@
|
|||
/* TODO: config dialog to select which modem to monitor */
|
||||
|
||||
#include "e.h"
|
||||
#include "e_mod_main.h"
|
||||
|
||||
static E_Module *ofono_mod = NULL;
|
||||
static char tmpbuf[4096];
|
||||
|
||||
const char _e_ofono_name[] = "ofono";
|
||||
const char _e_ofono_Name[] = N_("Mobile Modems Info");
|
||||
int _e_ofono_module_log_dom = -1;
|
||||
|
||||
static void _ofono_gadget_update(E_Ofono_Instance *inst);
|
||||
static void _ofono_tip_update(E_Ofono_Instance *inst);
|
||||
|
||||
const char *
|
||||
e_ofono_theme_path(void)
|
||||
{
|
||||
#define TF "/e-module-ofono.edj"
|
||||
size_t dirlen;
|
||||
|
||||
dirlen = strlen(ofono_mod->dir);
|
||||
if (dirlen >= sizeof(tmpbuf) - sizeof(TF))
|
||||
return NULL;
|
||||
|
||||
memcpy(tmpbuf, ofono_mod->dir, dirlen);
|
||||
memcpy(tmpbuf + dirlen, TF, sizeof(TF));
|
||||
|
||||
return tmpbuf;
|
||||
#undef TF
|
||||
}
|
||||
|
||||
static void _ofono_popup_del(E_Ofono_Instance *inst);
|
||||
|
||||
static Eina_Bool
|
||||
_ofono_popup_input_window_mouse_up_cb(void *data,
|
||||
int type __UNUSED__,
|
||||
void *event)
|
||||
{
|
||||
Ecore_Event_Mouse_Button *ev = event;
|
||||
E_Ofono_Instance *inst = data;
|
||||
|
||||
if (ev->window != inst->ui.input.win)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
_ofono_popup_del(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ofono_popup_input_window_key_down_cb(void *data,
|
||||
int type __UNUSED__,
|
||||
void *event)
|
||||
{
|
||||
Ecore_Event_Key *ev = event;
|
||||
E_Ofono_Instance *inst = data;
|
||||
const char *keysym;
|
||||
|
||||
if (ev->window != inst->ui.input.win)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
keysym = ev->key;
|
||||
if (!strcmp(keysym, "Escape"))
|
||||
_ofono_popup_del(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_input_window_destroy(E_Ofono_Instance *inst)
|
||||
{
|
||||
ecore_x_window_free(inst->ui.input.win);
|
||||
inst->ui.input.win = 0;
|
||||
|
||||
ecore_event_handler_del(inst->ui.input.mouse_up);
|
||||
inst->ui.input.mouse_up = NULL;
|
||||
|
||||
ecore_event_handler_del(inst->ui.input.key_down);
|
||||
inst->ui.input.key_down = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_input_window_create(E_Ofono_Instance *inst)
|
||||
{
|
||||
Ecore_X_Window_Configure_Mask mask;
|
||||
Ecore_X_Window w, popup_w;
|
||||
E_Manager *man;
|
||||
|
||||
man = e_manager_current_get();
|
||||
|
||||
w = ecore_x_window_input_new(man->root, 0, 0, man->w, man->h);
|
||||
mask = (ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE |
|
||||
ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING);
|
||||
popup_w = inst->popup->win->evas_win;
|
||||
ecore_x_window_configure(w, mask, 0, 0, 0, 0, 0, popup_w,
|
||||
ECORE_X_WINDOW_STACK_BELOW);
|
||||
ecore_x_window_show(w);
|
||||
|
||||
inst->ui.input.mouse_up =
|
||||
ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
|
||||
_ofono_popup_input_window_mouse_up_cb, inst);
|
||||
|
||||
inst->ui.input.key_down =
|
||||
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
|
||||
_ofono_popup_input_window_key_down_cb, inst);
|
||||
|
||||
inst->ui.input.win = w;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_toggle_powered_cb(void *data,
|
||||
DBusMessage *msg __UNUSED__,
|
||||
DBusError *error)
|
||||
{
|
||||
E_Ofono_Instance *inst = data;
|
||||
|
||||
if ((error) && (dbus_error_is_set(error)))
|
||||
_ofono_dbus_error_show(_("Failed to power modem on/off."), error);
|
||||
else
|
||||
DBG("new powered value set");
|
||||
|
||||
e_widget_disabled_set(inst->ui.powered, (int)EINA_FALSE);
|
||||
inst->powered_pending = EINA_FALSE;
|
||||
|
||||
dbus_error_free(error);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_cb_powered_changed(void *data,
|
||||
Evas_Object *obj,
|
||||
void *event __UNUSED__)
|
||||
{
|
||||
E_Ofono_Instance *inst = data;
|
||||
E_Ofono_Module_Context *ctxt = inst->ctxt;
|
||||
Eina_Bool powered = e_widget_check_checked_get(obj);
|
||||
|
||||
if ((!ctxt) || (!ctxt->has_manager))
|
||||
{
|
||||
_ofono_operation_error_show(_("oFono Daemon is not running."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!e_ofono_modem_powered_set(inst->modem_element, powered,
|
||||
_ofono_toggle_powered_cb, inst))
|
||||
{
|
||||
_ofono_operation_error_show(_("Cannot toggle modem's powered state."));
|
||||
return;
|
||||
}
|
||||
e_widget_disabled_set(obj, EINA_TRUE);
|
||||
inst->powered_pending = EINA_TRUE;
|
||||
DBG("powered = %d pending", !inst->powered);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_update(E_Ofono_Instance *inst)
|
||||
{
|
||||
if (inst->name)
|
||||
e_widget_label_text_set(inst->ui.name, inst->name);
|
||||
else
|
||||
e_widget_label_text_set(inst->ui.name, _("No modem available"));
|
||||
e_widget_check_checked_set(inst->ui.powered, inst->powered);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_del(E_Ofono_Instance *inst)
|
||||
{
|
||||
_ofono_popup_input_window_destroy(inst);
|
||||
e_object_del(E_OBJECT(inst->popup));
|
||||
inst->popup = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_popup_new(E_Ofono_Instance *inst)
|
||||
{
|
||||
Evas *evas;
|
||||
Evas_Coord mw, mh;
|
||||
|
||||
if (inst->popup)
|
||||
{
|
||||
e_gadcon_popup_show(inst->popup);
|
||||
return;
|
||||
}
|
||||
|
||||
inst->popup = e_gadcon_popup_new(inst->gcc);
|
||||
evas = inst->popup->win->evas;
|
||||
|
||||
inst->ui.table = e_widget_table_add(evas, 0);
|
||||
|
||||
if (inst->name)
|
||||
inst->ui.name = e_widget_label_add(evas, inst->name);
|
||||
else
|
||||
inst->ui.name = e_widget_label_add(evas, "No modem available");
|
||||
e_widget_table_object_append(inst->ui.table, inst->ui.name,
|
||||
0, 0, 1, 1, 1, 1, 1, 1);
|
||||
evas_object_show(inst->ui.name);
|
||||
|
||||
inst->int_powered = inst->powered;
|
||||
inst->ui.powered = e_widget_check_add(evas, _("Powered"),
|
||||
&inst->int_powered);
|
||||
e_widget_table_object_append(inst->ui.table, inst->ui.powered,
|
||||
0, 1, 1, 1, 1, 1, 1, 1);
|
||||
if (inst->powered_pending)
|
||||
e_widget_disabled_set(inst->ui.powered, (int)EINA_TRUE);
|
||||
evas_object_show(inst->ui.powered);
|
||||
evas_object_smart_callback_add(inst->ui.powered, "changed",
|
||||
_ofono_popup_cb_powered_changed, inst);
|
||||
|
||||
_ofono_popup_update(inst);
|
||||
|
||||
e_widget_size_min_get(inst->ui.table, &mw, &mh);
|
||||
e_widget_size_min_set(inst->ui.table, mw, mh);
|
||||
|
||||
e_gadcon_popup_content_set(inst->popup, inst->ui.table);
|
||||
e_gadcon_popup_show(inst->popup);
|
||||
_ofono_popup_input_window_create(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_menu_new(E_Ofono_Instance *inst,
|
||||
Evas_Event_Mouse_Down *ev)
|
||||
{
|
||||
E_Zone *zone;
|
||||
E_Menu *m;
|
||||
int x, y;
|
||||
|
||||
zone = e_util_zone_current_get(e_manager_current_get());
|
||||
|
||||
m = e_menu_new();
|
||||
m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0);
|
||||
e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &x, &y, NULL, NULL);
|
||||
e_menu_activate_mouse(m, zone, x + ev->output.x, y + ev->output.y,
|
||||
1, 1, E_MENU_POP_DIRECTION_AUTO, ev->timestamp);
|
||||
evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button,
|
||||
EVAS_BUTTON_NONE, ev->timestamp, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_tip_new(E_Ofono_Instance *inst)
|
||||
{
|
||||
Evas *e;
|
||||
|
||||
inst->tip = e_gadcon_popup_new(inst->gcc);
|
||||
if (!inst->tip) return;
|
||||
|
||||
e = inst->tip->win->evas;
|
||||
|
||||
inst->o_tip = edje_object_add(e);
|
||||
e_theme_edje_object_set(inst->o_tip, "base/theme/modules/ofono/tip",
|
||||
"e/modules/ofono/tip");
|
||||
|
||||
_ofono_tip_update(inst);
|
||||
|
||||
e_gadcon_popup_content_set(inst->tip, inst->o_tip);
|
||||
e_gadcon_popup_show(inst->tip);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_tip_del(E_Ofono_Instance *inst)
|
||||
{
|
||||
evas_object_del(inst->o_tip);
|
||||
e_object_del(E_OBJECT(inst->tip));
|
||||
inst->tip = NULL;
|
||||
inst->o_tip = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_cb_mouse_down(void *data,
|
||||
Evas *evas __UNUSED__,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
void *event)
|
||||
{
|
||||
E_Ofono_Instance *inst;
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
|
||||
inst = data;
|
||||
if (!inst)
|
||||
return;
|
||||
|
||||
ev = event;
|
||||
if (ev->button == 1)
|
||||
{
|
||||
if (!inst->popup)
|
||||
_ofono_popup_new(inst);
|
||||
else
|
||||
_ofono_popup_del(inst);
|
||||
}
|
||||
else if (ev->button == 2)
|
||||
_ofono_popup_cb_powered_changed(inst, inst->ui.powered, NULL);
|
||||
else if (ev->button == 3)
|
||||
_ofono_menu_new(inst, ev);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_cb_mouse_in(void *data,
|
||||
Evas *evas __UNUSED__,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
void *event __UNUSED__)
|
||||
{
|
||||
E_Ofono_Instance *inst = data;
|
||||
|
||||
if (inst->tip)
|
||||
return;
|
||||
|
||||
_ofono_tip_new(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_cb_mouse_out(void *data,
|
||||
Evas *evas __UNUSED__,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
void *event __UNUSED__)
|
||||
{
|
||||
E_Ofono_Instance *inst = data;
|
||||
|
||||
if (!inst->tip)
|
||||
return;
|
||||
|
||||
_ofono_tip_del(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_edje_view_update(E_Ofono_Instance *inst,
|
||||
Evas_Object *o)
|
||||
{
|
||||
Edje_Message_Int msg;
|
||||
char buf[128];
|
||||
|
||||
if (!inst->ctxt->has_manager)
|
||||
{
|
||||
edje_object_signal_emit(o, "e,unavailable", "e");
|
||||
edje_object_part_text_set(o, "e.text.error", _("ofonod is not running"));
|
||||
return;
|
||||
}
|
||||
|
||||
edje_object_signal_emit(o, "e,available", "e");
|
||||
|
||||
if (inst->name)
|
||||
edje_object_part_text_set(o, "e.text.name", inst->name);
|
||||
else
|
||||
edje_object_part_text_set(o, "e.text.name", _("Unknown name"));
|
||||
|
||||
if (!inst->powered)
|
||||
{
|
||||
edje_object_part_text_set(o, "e.text.error", _("Modem powered off"));
|
||||
edje_object_signal_emit(o, "e,netinfo,unavailable", "e");
|
||||
return;
|
||||
}
|
||||
|
||||
if (inst->status)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%c%s",
|
||||
toupper(inst->status[0]), inst->status + 1);
|
||||
edje_object_part_text_set(o, "e.text.status", buf);
|
||||
edje_object_signal_emit(o, "e,netinfo,available", "e");
|
||||
}
|
||||
else
|
||||
edje_object_part_text_set(o, "e.text.status", _("Unknown status"));
|
||||
|
||||
if (inst->op)
|
||||
{
|
||||
edje_object_part_text_set(o, "e.text.op", inst->op);
|
||||
edje_object_signal_emit(o, "e,netinfo,available", "e");
|
||||
}
|
||||
else
|
||||
edje_object_part_text_set(o, "e.text.op", _("Unknown operator"));
|
||||
|
||||
msg.val = inst->strength;
|
||||
edje_object_message_send(o, EDJE_MESSAGE_INT, 1, &msg);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_tip_update(E_Ofono_Instance *inst)
|
||||
{
|
||||
_ofono_edje_view_update(inst, inst->o_tip);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_gadget_update(E_Ofono_Instance *inst)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt = inst->ctxt;
|
||||
|
||||
if (!ctxt->has_manager && inst->popup)
|
||||
_ofono_popup_del(inst);
|
||||
|
||||
if (inst->popup)
|
||||
_ofono_popup_update(inst);
|
||||
if (inst->tip)
|
||||
_ofono_tip_update(inst);
|
||||
|
||||
_ofono_edje_view_update(inst, inst->ui.gadget);
|
||||
}
|
||||
|
||||
/* Gadcon Api Functions */
|
||||
|
||||
static E_Gadcon_Client *
|
||||
_gc_init(E_Gadcon *gc,
|
||||
const char *name,
|
||||
const char *id,
|
||||
const char *style)
|
||||
{
|
||||
E_Ofono_Instance *inst;
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
|
||||
if (!ofono_mod)
|
||||
return NULL;
|
||||
|
||||
ctxt = ofono_mod->data;
|
||||
|
||||
inst = E_NEW(E_Ofono_Instance, 1);
|
||||
inst->ctxt = ctxt;
|
||||
inst->ui.gadget = edje_object_add(gc->evas);
|
||||
e_theme_edje_object_set(inst->ui.gadget, "base/theme/modules/ofono",
|
||||
"e/modules/ofono/main");
|
||||
|
||||
inst->path = NULL;
|
||||
inst->name = NULL;
|
||||
inst->powered = EINA_FALSE;
|
||||
inst->int_powered = 0;
|
||||
inst->status = NULL;
|
||||
inst->op = NULL;
|
||||
inst->strength = 0;
|
||||
inst->modem_element = NULL;
|
||||
inst->netreg_element = NULL;
|
||||
|
||||
inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->ui.gadget);
|
||||
inst->gcc->data = inst;
|
||||
|
||||
evas_object_event_callback_add
|
||||
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_DOWN, _ofono_cb_mouse_down, inst);
|
||||
evas_object_event_callback_add
|
||||
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_IN, _ofono_cb_mouse_in, inst);
|
||||
evas_object_event_callback_add
|
||||
(inst->ui.gadget, EVAS_CALLBACK_MOUSE_OUT, _ofono_cb_mouse_out, inst);
|
||||
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
ctxt->instances = eina_list_append(ctxt->instances, inst);
|
||||
|
||||
return inst->gcc;
|
||||
}
|
||||
|
||||
static void
|
||||
_gc_shutdown(E_Gadcon_Client *gcc)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
E_Ofono_Instance *inst;
|
||||
|
||||
if (!ofono_mod)
|
||||
return;
|
||||
|
||||
ctxt = ofono_mod->data;
|
||||
if (!ctxt)
|
||||
return;
|
||||
|
||||
inst = gcc->data;
|
||||
if (!inst)
|
||||
return;
|
||||
|
||||
if (inst->popup)
|
||||
_ofono_popup_del(inst);
|
||||
if (inst->tip)
|
||||
_ofono_tip_del(inst);
|
||||
|
||||
evas_object_del(inst->ui.gadget);
|
||||
|
||||
eina_stringshare_del(inst->path);
|
||||
eina_stringshare_del(inst->name);
|
||||
eina_stringshare_del(inst->status);
|
||||
eina_stringshare_del(inst->op);
|
||||
|
||||
ctxt->instances = eina_list_remove(ctxt->instances, inst);
|
||||
|
||||
E_FREE(inst);
|
||||
}
|
||||
|
||||
static void
|
||||
_gc_orient(E_Gadcon_Client *gcc,
|
||||
E_Gadcon_Orient orient __UNUSED__)
|
||||
{
|
||||
e_gadcon_client_aspect_set(gcc, 16, 16);
|
||||
e_gadcon_client_min_size_set(gcc, 16, 16);
|
||||
}
|
||||
|
||||
static const char *
|
||||
_gc_label(const E_Gadcon_Client_Class *client_class __UNUSED__)
|
||||
{
|
||||
return _(_e_ofono_Name);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_gc_icon(const E_Gadcon_Client_Class *client_class __UNUSED__,
|
||||
Evas *evas)
|
||||
{
|
||||
Evas_Object *o;
|
||||
|
||||
o = edje_object_add(evas);
|
||||
edje_object_file_set(o, e_ofono_theme_path(), "icon");
|
||||
return o;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_gc_id_new(const E_Gadcon_Client_Class *client_class __UNUSED__)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
Eina_List *instances;
|
||||
|
||||
if (!ofono_mod)
|
||||
return NULL;
|
||||
|
||||
ctxt = ofono_mod->data;
|
||||
if (!ctxt)
|
||||
return NULL;
|
||||
|
||||
instances = ctxt->instances;
|
||||
snprintf(tmpbuf, sizeof(tmpbuf), "ofono.%d", eina_list_count(instances));
|
||||
return tmpbuf;
|
||||
}
|
||||
|
||||
static const E_Gadcon_Client_Class _gc_class =
|
||||
{
|
||||
GADCON_CLIENT_CLASS_VERSION, _e_ofono_name,
|
||||
{
|
||||
_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
|
||||
e_gadcon_site_is_not_toolbar
|
||||
},
|
||||
E_GADCON_CLIENT_STYLE_PLAIN
|
||||
};
|
||||
|
||||
EAPI E_Module_Api e_modapi = {E_MODULE_API_VERSION, _e_ofono_Name};
|
||||
|
||||
static Eina_Bool
|
||||
_ofono_manager_changed_do(void *data)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
|
||||
ctxt->poller.manager_changed = NULL;
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_manager_changed(void *data,
|
||||
const E_Ofono_Element *element __UNUSED__)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
if (ctxt->poller.manager_changed)
|
||||
ecore_poller_del(ctxt->poller.manager_changed);
|
||||
ctxt->poller.manager_changed = ecore_poller_add
|
||||
(ECORE_POLLER_CORE, 1, _ofono_manager_changed_do, ctxt);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ofono_event_manager_in(void *data,
|
||||
int type __UNUSED__,
|
||||
void *event __UNUSED__)
|
||||
{
|
||||
E_Ofono_Element *element;
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
E_Ofono_Instance *inst;
|
||||
Eina_List *l;
|
||||
|
||||
DBG("manager in");
|
||||
|
||||
ctxt->has_manager = EINA_TRUE;
|
||||
|
||||
element = e_ofono_manager_get();
|
||||
e_ofono_element_listener_add(element, _ofono_manager_changed, ctxt, NULL);
|
||||
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ofono_event_manager_out(void *data,
|
||||
int type __UNUSED__,
|
||||
void *event __UNUSED__)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
E_Ofono_Instance *inst;
|
||||
Eina_List *l;
|
||||
|
||||
DBG("manager out");
|
||||
|
||||
ctxt->has_manager = EINA_FALSE;
|
||||
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_eofono_event_element_add(void *data,
|
||||
int type __UNUSED__,
|
||||
void *info)
|
||||
{
|
||||
E_Ofono_Element *element = info;
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
E_Ofono_Instance *inst;
|
||||
Eina_List *l;
|
||||
Eina_Bool have_inst = EINA_FALSE;
|
||||
|
||||
DBG(">>> %s %s", element->path, element->interface);
|
||||
|
||||
/* is there any instance taking care of this modem already? */
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
if ((inst->path) && (inst->path == element->path))
|
||||
{
|
||||
have_inst = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* if no instance is handling this, is there any instance available */
|
||||
if ((!have_inst) && (e_ofono_element_is_modem(element)))
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
if (!inst->path)
|
||||
{
|
||||
inst->path = eina_stringshare_ref(element->path);
|
||||
DBG("bound %s to an ofono module instance", inst->path);
|
||||
have_inst = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* if still orphan, do nothing */
|
||||
if (!have_inst)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
if (e_ofono_element_is_modem(element))
|
||||
inst->modem_element = element;
|
||||
else if (e_ofono_element_is_netreg(element))
|
||||
inst->netreg_element = element;
|
||||
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_eofono_event_element_del(void *data,
|
||||
int type __UNUSED__,
|
||||
void *info)
|
||||
{
|
||||
E_Ofono_Element *element = info;
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
E_Ofono_Instance *inst;
|
||||
Eina_List *l;
|
||||
Eina_Bool inst_found = EINA_FALSE;
|
||||
|
||||
DBG("<<< %s %s", element->path, element->interface);
|
||||
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
if ((inst->path) && (inst->path == element->path))
|
||||
{
|
||||
inst_found = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!inst_found)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
if (e_ofono_element_is_modem(element))
|
||||
{
|
||||
inst->modem_element = NULL;
|
||||
eina_stringshare_replace(&inst->name, NULL);
|
||||
inst->powered = EINA_FALSE;
|
||||
}
|
||||
else if (e_ofono_element_is_netreg(element))
|
||||
{
|
||||
inst->netreg_element = NULL;
|
||||
eina_stringshare_replace(&inst->status, NULL);
|
||||
eina_stringshare_replace(&inst->op, NULL);
|
||||
inst->strength = 0;
|
||||
}
|
||||
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_eofono_event_element_updated(void *data,
|
||||
int type __UNUSED__,
|
||||
void *event_info)
|
||||
{
|
||||
E_Ofono_Element *element = event_info;
|
||||
E_Ofono_Module_Context *ctxt = data;
|
||||
E_Ofono_Instance *inst;
|
||||
Eina_List *l;
|
||||
Eina_Bool inst_found = EINA_FALSE;
|
||||
const char *tmp;
|
||||
|
||||
DBG("!!! %s %s", element->path, element->interface);
|
||||
|
||||
EINA_LIST_FOREACH(ctxt->instances, l, inst)
|
||||
if ((inst->path) && (inst->path == element->path))
|
||||
{
|
||||
inst_found = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!inst_found)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
||||
if (e_ofono_element_is_modem(element))
|
||||
{
|
||||
if (!e_ofono_modem_powered_get(element, &(inst->powered)))
|
||||
inst->powered = 0;
|
||||
|
||||
if (!e_ofono_modem_name_get(element, &tmp))
|
||||
tmp = NULL;
|
||||
if ((!tmp) || (!tmp[0]))
|
||||
tmp = inst->path;
|
||||
eina_stringshare_replace(&inst->name, tmp);
|
||||
|
||||
DBG("!!! powered = %d, name = %s", inst->powered, inst->name);
|
||||
}
|
||||
else if (e_ofono_element_is_netreg(element))
|
||||
{
|
||||
if (!e_ofono_netreg_status_get(element, &tmp))
|
||||
tmp = NULL;
|
||||
eina_stringshare_replace(&inst->status, tmp);
|
||||
|
||||
if (!e_ofono_netreg_operator_get(element, &tmp))
|
||||
tmp = NULL;
|
||||
eina_stringshare_replace(&inst->op, tmp);
|
||||
|
||||
if (!e_ofono_netreg_strength_get(element, &(inst->strength)))
|
||||
inst->strength = 0;
|
||||
|
||||
DBG("!!! status = %s, operator = %s, strength = %d",
|
||||
inst->status, inst->op, inst->strength);
|
||||
}
|
||||
|
||||
_ofono_gadget_update(inst);
|
||||
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_events_register(E_Ofono_Module_Context *ctxt)
|
||||
{
|
||||
ctxt->event.manager_in = ecore_event_handler_add
|
||||
(E_OFONO_EVENT_MANAGER_IN, _ofono_event_manager_in, ctxt);
|
||||
ctxt->event.manager_out = ecore_event_handler_add
|
||||
(E_OFONO_EVENT_MANAGER_OUT, _ofono_event_manager_out, ctxt);
|
||||
ctxt->event.element_add = ecore_event_handler_add
|
||||
(E_OFONO_EVENT_ELEMENT_ADD, _eofono_event_element_add, ctxt);
|
||||
ctxt->event.element_del = ecore_event_handler_add
|
||||
(E_OFONO_EVENT_ELEMENT_DEL, _eofono_event_element_del, ctxt);
|
||||
ctxt->event.element_updated = ecore_event_handler_add
|
||||
(E_OFONO_EVENT_ELEMENT_UPDATED, _eofono_event_element_updated, ctxt);
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_events_unregister(E_Ofono_Module_Context *ctxt)
|
||||
{
|
||||
if (ctxt->event.manager_in)
|
||||
ecore_event_handler_del(ctxt->event.manager_in);
|
||||
if (ctxt->event.manager_out)
|
||||
ecore_event_handler_del(ctxt->event.manager_out);
|
||||
if (ctxt->event.element_add)
|
||||
ecore_event_handler_del(ctxt->event.element_add);
|
||||
if (ctxt->event.element_del)
|
||||
ecore_event_handler_del(ctxt->event.element_del);
|
||||
if (ctxt->event.element_updated)
|
||||
ecore_event_handler_del(ctxt->event.element_updated);
|
||||
}
|
||||
|
||||
EAPI void *
|
||||
e_modapi_init(E_Module *m)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
E_DBus_Connection *c;
|
||||
|
||||
c = e_dbus_bus_get(DBUS_BUS_SYSTEM);
|
||||
if (!c)
|
||||
goto error_dbus_bus_get;
|
||||
if (!e_ofono_system_init(c))
|
||||
goto error_ofono_system_init;
|
||||
|
||||
ctxt = E_NEW(E_Ofono_Module_Context, 1);
|
||||
if (!ctxt)
|
||||
goto error_ofono_context;
|
||||
|
||||
ofono_mod = m;
|
||||
|
||||
if (_e_ofono_module_log_dom < 0)
|
||||
{
|
||||
_e_ofono_module_log_dom = eina_log_domain_register("e_module_ofono",
|
||||
EINA_COLOR_ORANGE);
|
||||
if (_e_ofono_module_log_dom < 0)
|
||||
{
|
||||
EINA_LOG_CRIT("could not register logging domain e_module_ofono");
|
||||
goto error_log_domain;
|
||||
}
|
||||
}
|
||||
|
||||
e_gadcon_provider_register(&_gc_class);
|
||||
|
||||
_ofono_events_register(ctxt);
|
||||
|
||||
return ctxt;
|
||||
|
||||
error_log_domain:
|
||||
_e_ofono_module_log_dom = -1;
|
||||
ofono_mod = NULL;
|
||||
E_FREE(ctxt);
|
||||
error_ofono_context:
|
||||
e_ofono_system_shutdown();
|
||||
error_ofono_system_init:
|
||||
error_dbus_bus_get:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_ofono_instances_free(E_Ofono_Module_Context *ctxt)
|
||||
{
|
||||
while (ctxt->instances)
|
||||
{
|
||||
E_Ofono_Instance *inst;
|
||||
|
||||
inst = ctxt->instances->data;
|
||||
|
||||
if (inst->popup)
|
||||
_ofono_popup_del(inst);
|
||||
if (inst->tip)
|
||||
_ofono_tip_del(inst);
|
||||
|
||||
e_object_del(E_OBJECT(inst->gcc));
|
||||
}
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_modapi_shutdown(E_Module *m)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
E_Ofono_Element *element;
|
||||
|
||||
ctxt = m->data;
|
||||
if (!ctxt)
|
||||
return 0;
|
||||
|
||||
element = e_ofono_manager_get();
|
||||
e_ofono_element_listener_del(element, _ofono_manager_changed, ctxt);
|
||||
|
||||
_ofono_events_unregister(ctxt);
|
||||
|
||||
_ofono_instances_free(ctxt);
|
||||
|
||||
e_gadcon_provider_unregister(&_gc_class);
|
||||
|
||||
if (ctxt->poller.manager_changed)
|
||||
ecore_poller_del(ctxt->poller.manager_changed);
|
||||
|
||||
E_FREE(ctxt);
|
||||
ofono_mod = NULL;
|
||||
|
||||
e_ofono_system_shutdown();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_modapi_save(E_Module *m)
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
|
||||
ctxt = m->data;
|
||||
if (!ctxt)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -1,134 +0,0 @@
|
|||
#ifndef E_MOD_MAIN_H
|
||||
#define E_MOD_MAIN_H
|
||||
|
||||
#include "config.h"
|
||||
#include <e.h>
|
||||
#include <E_Ofono.h>
|
||||
#include <eina_log.h>
|
||||
|
||||
#define MOD_CONF_VERSION 2
|
||||
|
||||
extern int _e_ofono_module_log_dom;
|
||||
#undef DBG
|
||||
#undef WRN
|
||||
#undef CRIT
|
||||
#undef ERR
|
||||
#define DBG(...) EINA_LOG_DOM_DBG(_e_ofono_module_log_dom, __VA_ARGS__)
|
||||
#define WRN(...) EINA_LOG_DOM_WARN(_e_ofono_module_log_dom, __VA_ARGS__)
|
||||
#define CRIT(...) EINA_LOG_DOM_CRIT(_e_ofono_module_log_dom, __VA_ARGS__)
|
||||
#define ERR(...) EINA_LOG_DOM_ERR(_e_ofono_module_log_dom, __VA_ARGS__)
|
||||
|
||||
typedef struct E_Ofono_Instance E_Ofono_Instance;
|
||||
typedef struct E_Ofono_Module_Context E_Ofono_Module_Context;
|
||||
|
||||
struct E_Ofono_Instance
|
||||
{
|
||||
E_Ofono_Module_Context *ctxt;
|
||||
E_Gadcon_Client *gcc;
|
||||
E_Gadcon_Popup *popup;
|
||||
|
||||
struct
|
||||
{
|
||||
Evas_Object *gadget;
|
||||
Evas_Object *table;
|
||||
Evas_Object *name;
|
||||
Evas_Object *powered;
|
||||
struct
|
||||
{
|
||||
Ecore_X_Window win;
|
||||
Ecore_Event_Handler *mouse_up;
|
||||
Ecore_Event_Handler *key_down;
|
||||
} input;
|
||||
} ui;
|
||||
|
||||
E_Gadcon_Popup *tip;
|
||||
Evas_Object *o_tip;
|
||||
|
||||
/* e_dbus ofono element pointers */
|
||||
E_Ofono_Element *modem_element;
|
||||
E_Ofono_Element *netreg_element;
|
||||
|
||||
/* modem data */
|
||||
const char *path;
|
||||
const char *name;
|
||||
const char *status;
|
||||
const char *op;
|
||||
int int_powered; /* used by popup */
|
||||
Eina_Bool powered;
|
||||
uint8_t strength;
|
||||
|
||||
Eina_Bool powered_pending : 1;
|
||||
};
|
||||
|
||||
struct E_Ofono_Module_Context
|
||||
{
|
||||
Eina_List *instances;
|
||||
|
||||
struct
|
||||
{
|
||||
Ecore_Event_Handler *manager_in;
|
||||
Ecore_Event_Handler *manager_out;
|
||||
Ecore_Event_Handler *element_add;
|
||||
Ecore_Event_Handler *element_del;
|
||||
Ecore_Event_Handler *element_updated;
|
||||
} event;
|
||||
|
||||
struct
|
||||
{
|
||||
Ecore_Poller *manager_changed;
|
||||
} poller;
|
||||
|
||||
Eina_Bool has_manager : 1;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
const char *e_ofono_theme_path(void);
|
||||
|
||||
static inline void
|
||||
_ofono_dbus_error_show(const char *msg,
|
||||
const DBusError *error)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
if ((!error) || (!dbus_error_is_set(error)))
|
||||
return;
|
||||
|
||||
name = error->name;
|
||||
if (strncmp(name, "org.ofono.Error.", sizeof("org.ofono.Error.") - 1) == 0)
|
||||
name += sizeof("org.ofono.Error.") - 1;
|
||||
|
||||
e_util_dialog_show(_("Ofono Server Operation Failed"),
|
||||
_("Could not execute remote operation:<br>"
|
||||
"%s<br>"
|
||||
"Server Error <hilight>%s:</hilight> %s"),
|
||||
msg, name, error->message);
|
||||
}
|
||||
|
||||
static inline void
|
||||
_ofono_operation_error_show(const char *msg)
|
||||
{
|
||||
e_util_dialog_show(_("Ofono Operation Failed"),
|
||||
_("Could not execute local operation:<br>%s"),
|
||||
msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @addtogroup Optional_Devices
|
||||
* @{
|
||||
*
|
||||
* @defgroup Module_OFono oFono (Telephony)
|
||||
*
|
||||
* oFono is the Linux Telephony stack and can be used to monitor
|
||||
* network signal, send and receive SMS, connect to GPRS/Edge/3G/4G.
|
||||
*
|
||||
* @note The plugin is barebones and can just show devices, no SMS
|
||||
* management done yet.
|
||||
*
|
||||
* @see http://ofono.org/
|
||||
* @}
|
||||
*/
|
||||
#endif
|
|
@ -1,22 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Type=Link
|
||||
Name=Mobile Modems Manager
|
||||
Name[ru]=Менеджер мобильных модемов
|
||||
Name[pt_BR]=Gerenciador de modems móveis
|
||||
Name[de]=Verwaltung für mobile Modems
|
||||
Name[es]=Gerenciador de modems moviles
|
||||
Name[it]=Gestore di modem mobili
|
||||
Name[fr]=Gestionnaire de modems mobiles
|
||||
Name[pt]=Gestor de modems móveis
|
||||
Name[tr]=Mobil Modem Yöneticisi
|
||||
Icon=e-module-ofono
|
||||
Comment=Control mobile modems.
|
||||
Comment[ru]=Позволяет контролировать мобильные модемы.
|
||||
Comment[pt_BR]=Controla modems móveis.
|
||||
Comment[de]=Mobile Modems kontrollieren.
|
||||
Comment[es]=Controla modems móviles
|
||||
Comment[it]=Controlla i modem mobili.
|
||||
Comment[fr]=Contrôle des modems mobiles.
|
||||
Comment[pt]=Permite-lhe controlar os modems
|
||||
Comment[tr]=Mobil modemlerinizi yönetin.
|
||||
X-Enlightenment-ModuleType=system
|
Loading…
Reference in New Issue