1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*
* Copyright (C) 2013 Zoran Pericic <zpericic@netst.org>
*
* 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; either version 2, or (at your option)
* any later version.
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "ka-plugin-gnomelock.h"
#include <gmodule.h>
#include <gio/gio.h>
G_DEFINE_TYPE (KaPluginGnomeLock, ka_plugin_gnomelock, KA_TYPE_PLUGIN)
#define GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), KA_TYPE_PLUGIN_GNOMELOCK, KaPluginGnomeLockPrivate))
int ka_plugin_major_version = KA_PLUGIN_MAJOR_VERSION;
int ka_plugin_minor_version = KA_PLUGIN_MINOR_VERSION;
G_MODULE_EXPORT KaPlugin *
ka_plugin_create (void)
{
return KA_PLUGIN (ka_plugin_gnomelock_new ());
}
typedef struct _KaPluginGnomeLockPrivate KaPluginGnomeLockPrivate;
struct _KaPluginGnomeLockPrivate {
gulong handler;
};
static void
event_cb (gpointer *applet, gchar *princ, guint when, gpointer user_data)
{
GError *error = NULL;
GDBusProxyFlags flags= G_DBUS_PROXY_FLAGS_NONE;
GDBusProxy *proxy = NULL;
proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
flags,
NULL, /* GDBusInterfaceInfo */
"org.gnome.ScreenSaver",
"/org/gnome/ScreenSaver",
"org.gnome.ScreenSaver",
NULL, /* GCancellable */
&error
);
if (proxy == NULL) {
g_warning ("Error creating proxy: %s\n", error->message);
g_error_free (error);
return;
}
g_dbus_proxy_call_sync (proxy,
"Lock",
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
if (error) {
g_warning ("Error calling lock: %s\n", error->message);
g_error_free (error);
}
if (proxy != NULL)
g_object_unref (proxy);
}
static void
ka_plugin_gnomelock_finalize (GObject *object)
{
G_OBJECT_CLASS (ka_plugin_gnomelock_parent_class)->finalize (object);
}
static void
ka_plugin_gnomelock_activate (KaPlugin *self, KaApplet *applet)
{
KaPluginGnomeLockPrivate *priv = GET_PRIVATE (self);
priv->handler = g_signal_connect (applet,
"krb-tgt-expired",
G_CALLBACK (event_cb), "Expired");
}
static void
ka_plugin_gnomelock_deactivate (KaPlugin *self, KaApplet *applet)
{
int i;
KaPluginGnomeLockPrivate *priv = GET_PRIVATE (self);
g_signal_handler_disconnect (applet, priv->handler);
}
static void
ka_plugin_gnomelock_class_init (KaPluginGnomeLockClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
KaPluginClass *plugin_class = KA_PLUGIN_CLASS (klass);
g_type_class_add_private (klass, sizeof (KaPluginGnomeLockPrivate));
plugin_class->activate = ka_plugin_gnomelock_activate;
plugin_class->deactivate = ka_plugin_gnomelock_deactivate;
object_class->finalize = ka_plugin_gnomelock_finalize;
}
static void
ka_plugin_gnomelock_init (KaPluginGnomeLock *self)
{
}
KaPluginGnomeLock *
ka_plugin_gnomelock_new (void)
{
return g_object_new (KA_TYPE_PLUGIN_GNOMELOCK, KA_PLUGIN_PROP_NAME,
"gnomelock", NULL);
}
|