diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-03-22 16:32:01 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2012-03-22 16:32:01 +0100 |
commit | caa1f49279f2cf1b034a592d67c46b9df5428f65 (patch) | |
tree | b6010c691df3ec93deb4f3bb1b987cb725af1d92 /DBus.py | |
parent | 58cf425fb02cd3adc5d5fa96af865e9732914e29 (diff) | |
download | pylock-caa1f49279f2cf1b034a592d67c46b9df5428f65.tar pylock-caa1f49279f2cf1b034a592d67c46b9df5428f65.zip |
Throw out DBus, add X11 based lock activation
Diffstat (limited to 'DBus.py')
-rw-r--r-- | DBus.py | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/DBus.py b/DBus.py deleted file mode 100644 index 6f24694..0000000 --- a/DBus.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (c) 2012, Matthias Schiffer <mschiffer@universe-factory.net> -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -from gi.repository import GLib, Gio - -from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, pointer -from ctypes import c_void_p, c_char_p, c_bool -from ctypes.util import find_library - -from functools import partial - - -dbus_xml = ''' -<node> - <interface name="net.universe_factory.Pylock"> - <method name="Lock"/> - </interface> -</node> -''' - -gio = CDLL(find_library('gio-2.0')) - -nodeInfo = Gio.DBusNodeInfo.new_for_xml(dbus_xml) -interfaceInfo = nodeInfo.lookup_interface('net.universe_factory.Pylock') - -METHOD_CALL_FUNC = CFUNCTYPE(None, c_void_p, c_char_p, c_char_p, c_char_p, c_char_p, c_void_p, c_void_p, c_void_p) -GET_PROPERTY_FUNC = CFUNCTYPE(c_void_p, c_void_p, c_char_p, c_char_p, c_char_p, c_char_p, c_void_p, c_void_p) -SET_PROPERTY_FUNC = CFUNCTYPE(c_bool, c_void_p, c_char_p, c_char_p, c_char_p, c_char_p, c_void_p, c_void_p, c_void_p) - -def method_call(locker, connection, sender, object_path, interface_name, method_name, parameters, invocation, user_data): - assert str(method_name, 'ascii') == 'Lock' - - locker.lock() - gio.g_dbus_method_invocation_return_value(invocation, hash(GLib.Variant.new_tuple())) - -@GET_PROPERTY_FUNC -def get_property(connection, sender, object_path, interface_name, property_name, error, user_data): - assert False - -@SET_PROPERTY_FUNC -def set_property(connection, sender, object_path, interface_name, property_name, value, error, user_data): - assert False - -class VTable(Structure): - _fields_ = [ - ("method_call", METHOD_CALL_FUNC), - ("get_property", GET_PROPERTY_FUNC), - ("set_property", SET_PROPERTY_FUNC) - ] - - def __init__(self, locker): - Structure.__init__(self) - self.method_call = METHOD_CALL_FUNC(partial(method_call, locker)) - self.get_property = get_property - self.set_property = set_property - -gio.g_dbus_connection_register_object.argtypes = [c_void_p, c_char_p, c_void_p, POINTER(VTable), c_void_p, c_void_p, c_void_p] -gio.g_dbus_method_invocation_return_value.argtypes = [c_void_p, c_void_p] - - -class DBus(object): - def __init__(self, locker): - self.vtable = VTable(locker) - - Gio.bus_own_name(Gio.BusType.SESSION, 'net.universe_factory.Pylock', Gio.BusNameOwnerFlags.NONE, self.bus_aquired, None, None) - - def bus_aquired(self, connection, name): - b = lambda s: bytes(s, 'ascii') - gio.g_dbus_connection_register_object(c_void_p(hash(connection)), b('/net/universe_factory/Pylock'), c_void_p(hash(interfaceInfo)), pointer(self.vtable), None, None, None) |