From d2d122f63270348fb98252675a778101c40157d5 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 17 Aug 2011 00:34:28 +0000 Subject: [PATCH] Added a plug-in to lock and unlock the screen automatically --- Makefile | 1 + include/Phone/phone.h | 8 ---- src/phone.c | 6 --- src/plugins/Makefile | 21 +++++++-- src/plugins/debug.c | 1 - src/plugins/locker.c | 98 ++++++++++++++++++++++++++++++++++++++++ src/plugins/project.conf | 13 +++++- 7 files changed, 128 insertions(+), 20 deletions(-) create mode 100644 src/plugins/locker.c diff --git a/Makefile b/Makefile index 2a6aef5..d6dec0c 100644 --- a/Makefile +++ b/Makefile @@ -99,6 +99,7 @@ dist: $(PACKAGE)-$(VERSION)/src/plugins/debug.c \ $(PACKAGE)-$(VERSION)/src/plugins/engineering.c \ $(PACKAGE)-$(VERSION)/src/plugins/gprs.c \ + $(PACKAGE)-$(VERSION)/src/plugins/locker.c \ $(PACKAGE)-$(VERSION)/src/plugins/openmoko.c \ $(PACKAGE)-$(VERSION)/src/plugins/oss.c \ $(PACKAGE)-$(VERSION)/src/plugins/panel.c \ diff --git a/include/Phone/phone.h b/include/Phone/phone.h index fe1ed3e..ac2a684 100644 --- a/include/Phone/phone.h +++ b/include/Phone/phone.h @@ -47,7 +47,6 @@ typedef enum _PhoneEncoding typedef enum _PhoneEventType { - PHONE_EVENT_TYPE_CALLING, /* char const * number */ PHONE_EVENT_TYPE_KEY_TONE, PHONE_EVENT_TYPE_MODEM_EVENT, /* ModemEvent * event */ PHONE_EVENT_TYPE_NOTIFICATION_OFF, @@ -74,13 +73,6 @@ typedef union _PhoneEvent { PhoneEventType type; - /* PHONE_EVENT_TYPE_CALLING */ - struct - { - PhoneEventType type; - char const * number; - } calling; - /* PHONE_EVENT_TYPE_MODEM_EVENT */ struct { diff --git a/src/phone.c b/src/phone.c index 56e805b..d20ef8c 100644 --- a/src/phone.c +++ b/src/phone.c @@ -2955,7 +2955,6 @@ void phone_write_send(Phone * phone) /* phone_call_number */ static int _phone_call_number(Phone * phone, char const * number) { - PhoneEvent event; GtkTreeIter iter; time_t date; struct tm t; @@ -2963,11 +2962,6 @@ static int _phone_call_number(Phone * phone, char const * number) if(number == NULL) return -1; - memset(&event, 0, sizeof(event)); - event.type = PHONE_EVENT_TYPE_CALLING; - event.calling.number = number; - if(phone_event(phone, &event) != 0) - return -1; modem_request_type(phone->modem, MODEM_REQUEST_CALL, MODEM_CALL_TYPE_VOICE, number, 0); phone_show_call(phone, TRUE, PHONE_CALL_OUTGOING, "", number); diff --git a/src/plugins/Makefile b/src/plugins/Makefile index c843f62..974ec46 100644 --- a/src/plugins/Makefile +++ b/src/plugins/Makefile @@ -1,5 +1,5 @@ SUBDIRS = 16x16 24x24 32x32 48x48 -TARGETS = blacklist.so debug.so engineering.so gprs.so openmoko.so oss.so panel.so profiles.so smscrypt.so +TARGETS = blacklist.so debug.so engineering.so gprs.so locker.so openmoko.so oss.so panel.so profiles.so smscrypt.so PREFIX = /usr/local DESTDIR = LIBDIR = $(PREFIX)/lib @@ -50,6 +50,13 @@ gprs_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) gprs.so: $(gprs_OBJS) $(LD) -o gprs.so $(gprs_OBJS) $(gprs_LDFLAGS) +locker_OBJS = locker.o +locker_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS) +locker_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) + +locker.so: $(locker_OBJS) + $(LD) -o locker.so $(locker_OBJS) $(locker_LDFLAGS) + openmoko_OBJS = openmoko.o openmoko_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) -I../modems $(CFLAGSF) $(CFLAGS) `pkg-config --cflags alsa` openmoko_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs alsa` @@ -94,9 +101,12 @@ debug.o: debug.c ../../include/Phone.h engineering.o: engineering.c ../../include/Phone.h $(CC) $(engineering_CFLAGS) -c engineering.c -gprs.o: gprs.c +gprs.o: gprs.c ../../include/Phone.h $(CC) $(gprs_CFLAGS) -c gprs.c +locker.o: locker.c ../../include/Phone.h + $(CC) $(locker_CFLAGS) -c locker.c + openmoko.o: openmoko.c ../../include/Phone.h $(CC) $(openmoko_CFLAGS) -c openmoko.c @@ -114,11 +124,11 @@ smscrypt.o: smscrypt.c ../../include/Phone.h clean: @for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean) || exit; done - $(RM) -- $(blacklist_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) + $(RM) -- $(blacklist_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(locker_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) distclean: @for i in $(SUBDIRS); do (cd $$i && $(MAKE) distclean) || exit; done - $(RM) -- $(blacklist_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) + $(RM) -- $(blacklist_OBJS) $(debug_OBJS) $(engineering_OBJS) $(gprs_OBJS) $(locker_OBJS) $(openmoko_OBJS) $(oss_OBJS) $(panel_OBJS) $(profiles_OBJS) $(smscrypt_OBJS) $(RM) -- $(TARGETS) install: $(TARGETS) @@ -132,6 +142,8 @@ install: $(TARGETS) $(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins $(INSTALL) -m 0644 -- gprs.so $(DESTDIR)$(LIBDIR)/Phone/plugins/gprs.so $(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins + $(INSTALL) -m 0644 -- locker.so $(DESTDIR)$(LIBDIR)/Phone/plugins/locker.so + $(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins $(INSTALL) -m 0644 -- openmoko.so $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so $(MKDIR) $(DESTDIR)$(LIBDIR)/Phone/plugins $(INSTALL) -m 0644 -- panel.so $(DESTDIR)$(LIBDIR)/Phone/plugins/panel.so @@ -146,6 +158,7 @@ uninstall: $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/debug.so $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/engineering.so $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/gprs.so + $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/locker.so $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/openmoko.so $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/panel.so $(RM) -- $(DESTDIR)$(LIBDIR)/Phone/plugins/profiles.so diff --git a/src/plugins/debug.c b/src/plugins/debug.c index 51a2f41..5ace014 100644 --- a/src/plugins/debug.c +++ b/src/plugins/debug.c @@ -59,7 +59,6 @@ static struct static DebugPhoneEvents _debug_phone_events[] = { - { PHONE_EVENT_TYPE_CALLING, "CALLING" }, { PHONE_EVENT_TYPE_KEY_TONE, "KEY_TONE" }, { PHONE_EVENT_TYPE_MODEM_EVENT, "MODEM_EVENT" }, { PHONE_EVENT_TYPE_NOTIFICATION_OFF, "NOTIFICATION_OFF" }, diff --git a/src/plugins/locker.c b/src/plugins/locker.c new file mode 100644 index 0000000..49a0eeb --- /dev/null +++ b/src/plugins/locker.c @@ -0,0 +1,98 @@ +/* $Id$ */ +/* Copyright (c) 2011 Pierre Pronchery */ +/* This file is part of DeforaOS Desktop Phone */ +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + + + +#include +#include +#include "Phone.h" + + +/* Locker */ +/* private */ +/* prototypes */ +/* plug-in */ +static int _locker_event(PhonePlugin * plugin, PhoneEvent * event); + +/* useful */ +static int _locker_action(LockerAction action); + + +/* public */ +/* variables */ +PhonePlugin plugin = +{ + NULL, + "Locker", + NULL, + NULL, + NULL, + _locker_event, + NULL, + NULL +}; + + +/* private */ +/* functions */ +/* locker_event */ +static int _event_modem(ModemEvent * event); + +static int _locker_event(PhonePlugin * plugin, PhoneEvent * event) +{ + switch(event->type) + { + case PHONE_EVENT_TYPE_MODEM_EVENT: + return _event_modem(event->modem_event.event); + case PHONE_EVENT_TYPE_SUSPEND: + return _locker_action(LOCKER_ACTION_LOCK); + default: /* not relevant */ + break; + } + return 0; +} + +static int _event_modem(ModemEvent * event) +{ + switch(event->call.direction) + { + case MODEM_CALL_DIRECTION_INCOMING: + return _locker_action(LOCKER_ACTION_UNLOCK); + default: /* not relevant */ + break; + } + return 0; +} + + +/* useful */ +/* locker_action */ +static int _locker_action(LockerAction action) +{ + GdkEvent event; + GdkEventClient * client = &event.client; + + memset(&event, 0, sizeof(event)); + client->type = GDK_CLIENT_EVENT; + client->window = NULL; + client->send_event = TRUE; + client->message_type = gdk_atom_intern(LOCKER_CLIENT_MESSAGE, FALSE); + client->data_format = 8; + client->data.b[0] = LOCKER_MESSAGE_ACTION; + client->data.b[1] = action; + client->data.b[2] = TRUE; + gdk_event_send_clientmessage_toall(&event); + return 0; +} diff --git a/src/plugins/project.conf b/src/plugins/project.conf index d3ac5b6..6a90f3c 100644 --- a/src/plugins/project.conf +++ b/src/plugins/project.conf @@ -1,5 +1,5 @@ subdirs=16x16,24x24,32x32,48x48 -targets=blacklist,debug,engineering,gprs,openmoko,oss,panel,profiles,smscrypt +targets=blacklist,debug,engineering,gprs,locker,openmoko,oss,panel,profiles,smscrypt cppflags_force=-I ../../include cppflags= cflags_force=-W `pkg-config --cflags libSystem gtk+-2.0` @@ -35,6 +35,17 @@ type=plugin sources=gprs.c install=$(LIBDIR)/Phone/plugins +[gprs.c] +depends=../../include/Phone.h + +[locker] +type=plugin +sources=locker.c +install=$(LIBDIR)/Phone/plugins + +[locker.c] +depends=../../include/Phone.h + [openmoko] type=plugin sources=openmoko.c