Add minimalistic protected-headers support
[gpgol.git] / src / explorers-events.cpp
1 /* explorer-events.cpp - Event handling for the application.
2  * Copyright (C) 2016 by Bundesamt für Sicherheit in der Informationstechnik
3  * Software engineering by Intevation GmbH
4  *
5  * This file is part of GpgOL.
6  *
7  * GpgOL is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * GpgOL is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 /* The event handler classes defined in this file follow the
22    general pattern that they implment the IDispatch interface
23    through the eventsink macros and handle event invocations
24    in their invoke methods.
25 */
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include "eventsink.h"
31 #include "eventsinks.h"
32 #include "ocidl.h"
33 #include "common.h"
34 #include "oomhelp.h"
35 #include "mail.h"
36 #include "gpgoladdin.h"
37
38 /* Explorers Events */
39 BEGIN_EVENT_SINK(ExplorersEvents, IDispatch)
40 EVENT_SINK_DEFAULT_CTOR(ExplorersEvents)
41 EVENT_SINK_DEFAULT_DTOR(ExplorersEvents)
42 typedef enum
43   {
44     NewExplorer = 0xF001,
45   } ExplorersEvent;
46
47 /* Don't confuse with ExplorerEvents. ExplorerEvents is
48    the actual event sink for explorer events. This just
49    ensures that we create such a sink for each new explorer. */
50 EVENT_SINK_INVOKE(ExplorersEvents)
51 {
52   USE_INVOKE_ARGS
53   switch(dispid)
54     {
55       case NewExplorer:
56         {
57           if (parms->cArgs != 1 || !(parms->rgvarg[0].vt & VT_DISPATCH))
58             {
59               log_debug ("%s:%s: No explorer in new Explorer.",
60                          SRCNAME, __func__);
61               break;
62             }
63           LPDISPATCH expSink = install_ExplorerEvents_sink (parms->rgvarg[0].pdispVal);
64           if (!expSink)
65             {
66               log_error ("%s:%s: Failed to install Explorer event sink.",
67                          SRCNAME, __func__);
68               break;
69             }
70           GpgolAddin::get_instance()->registerExplorerSink (expSink);
71         }
72       default:
73         break;
74     }
75   return S_OK;
76 }
77 END_EVENT_SINK(ExplorersEvents, IID_ExplorersEvents)