1
# -*- coding: utf-8 -*-
2
# Elisa - Home multimedia server
3
# Copyright (C) 2006-2009 Fluendo Embedded S.L. (www.fluendo.com).
6
# This file is available under one of two license agreements.
8
# This file is licensed under the GPL version 3.
9
# See "LICENSE.GPL" in the root of this distribution including a special
10
# exception to use Elisa with Fluendo's plugins.
12
# The GPL part of Elisa is also available under a commercial licensing
13
# agreement from Fluendo.
14
# See "LICENSE.Elisa" in the root directory of this distribution package
15
# for details on that license.
17
from elisa.core import log
19
class WindowsMessagesHandler(log.Loggable):
21
def __init__(self, viewport):
22
super(WindowsMessagesHandler, self).__init__()
23
self.viewport = viewport
24
self._signal_id = self.viewport.connect("win32-message-event",
25
self._on_windows_message)
28
def add_wndproc(self, signal_id, callback):
30
Add a new window proc handler to the viewport windows messages handler.
32
@param signal_id: windows signal ID
33
@type signal_id: C{int}
34
@param callback: callable(viewport, event) to call when signal is
35
received by the viewport
36
@type callback: C{callable}
38
msg_filter = self.viewport.get_message_filter()
39
if signal_id in msg_filter:
40
raise ValueError("Signal already handled")
42
self._wndprocs[signal_id] = callback
43
msg_filter.append(signal_id)
44
self.viewport.set_message_filter(msg_filter)
46
def remove_wndproc(self, signal_id):
48
Remove a window proc handler from the viewport windows messages handler.
50
@param signal_id: windows signal ID
51
@type signal_id: C{int}
53
msg_filter = self.viewport.get_message_filter()
54
if signal_id in msg_filter:
55
msg_filter.remove(signal_id)
56
self.viewport.set_message_filter(msg_filter)
57
del self._wndprocs[signal_id]
59
def _on_windows_message(self, viewport, event):
60
if event.message in self._wndprocs:
61
return self._wndprocs[event.message](viewport, event)
64
self.viewport.disconnect(self._signal_id)
66
self.viewport.set_message_filter([])