fork is done
[livewp] / applet / src / livewp-dbus.c
1 /* vim: set sw=4 ts=4 et: */
2 /*
3  * This file is part of Live Wallpaper (livewp)
4  * 
5  * Copyright (C) 2010 Vlad Vasiliev
6  * Copyright (C) 2010 Tanya Makova
7  *       for the code
8  * 
9  * This software is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1 of
12  * the License, or (at your option) any later version.
13  * 
14  * This software is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  * 
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this software; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22  * 02110-1301 USA
23 */
24
25 /*******************************************************************************/
26 #include "livewp-common.h"
27 #include "livewp-dbus.h"
28 /*******************************************************************************/
29 void
30 livewp_initialize_dbus(Animation_WallpaperPrivate *priv){
31     gchar       *filter_string;
32     DBusError   error;
33
34     dbus_error_init (&error);
35     /* Add D-BUS signal handler for 'status_changed' */
36     priv->dbus_conn = (DBusConnection *) osso_get_sys_dbus_connection(priv->osso);
37     priv->dbus_conn_session = (DBusConnection *) osso_get_dbus_connection(priv->osso);
38
39     if (priv->dbus_conn_session){
40         filter_string =
41             g_strdup_printf("type='signal', interface='%s'", LIVEWP_SIGNAL_INTERFACE);
42         dbus_bus_add_match(priv->dbus_conn_session, filter_string, &error);
43         if (dbus_error_is_set(&error)){
44              fprintf(stderr,"dbus_bus_add_match failed: %s", error.message);
45              dbus_error_free(&error);
46         }
47         g_free(filter_string);
48         /* add the callback */
49         dbus_connection_add_filter(priv->dbus_conn_session,
50                                    (DBusHandleMessageFunction)get_livewp_signal_cb,
51                                    priv, NULL);
52        filter_string =
53             g_strdup_printf("type='signal', interface='%s'", NOTIFY_SIGNAL_INTERFACE);
54         dbus_bus_add_match(priv->dbus_conn_session, filter_string, &error);
55         if (dbus_error_is_set(&error)){
56              fprintf(stderr,"dbus_bus_add_match failed: %s", error.message);
57              dbus_error_free(&error);
58         }
59         g_free(filter_string);
60         /* add the callback */
61         dbus_connection_add_filter(priv->dbus_conn_session,
62                                    (DBusHandleMessageFunction)get_livewp_signal_cb,
63                                    priv, NULL);
64
65     }
66 }
67 /*******************************************************************************/
68 void
69 livewp_deinitialize_dbus(Animation_WallpaperPrivate *priv){
70
71     gchar       *filter_string;
72     DBusError   error;
73
74     if (priv->dbus_conn_session){
75         filter_string =
76                 g_strdup_printf("type='signal', interface='%s'", LIVEWP_SIGNAL_INTERFACE);
77
78         dbus_error_init (&error);
79         dbus_bus_remove_match(priv->dbus_conn_session, filter_string, &error);
80         if (!dbus_error_is_set(&error)){
81             dbus_connection_remove_filter(priv->dbus_conn_session,
82                                           (DBusHandleMessageFunction)get_livewp_signal_cb, 
83                                           NULL);
84         }else{
85       
86             fprintf(stderr,"dbus_bus_add_match failed: %s", error.message);
87             dbus_error_free(&error);
88         }
89
90          g_free(filter_string);
91          filter_string =
92                 g_strdup_printf("type='signal', interface='%s'", NOTIFY_SIGNAL_INTERFACE);
93
94         dbus_error_init (&error);
95         dbus_bus_remove_match(priv->dbus_conn_session, filter_string, &error);
96         if (!dbus_error_is_set(&error)){
97             dbus_connection_remove_filter(priv->dbus_conn_session,
98                                           (DBusHandleMessageFunction)get_livewp_signal_cb, 
99                                           NULL);
100         }else{
101       
102             fprintf(stderr,"dbus_bus_add_match failed: %s", error.message);
103             dbus_error_free(&error);
104         }
105
106          g_free(filter_string);
107
108     }
109
110 }
111 /*******************************************************************************/
112 void
113 send_dbus_signal (Animation_WallpaperPrivate *priv,
114                   const gchar *interface,
115                   const gchar *path,
116                   const gchar *member)
117 {
118   gboolean       success;
119   
120   DBusMessage *message = dbus_message_new (DBUS_MESSAGE_TYPE_SIGNAL);
121   dbus_message_set_interface (message, interface);
122   dbus_message_set_path (message, path);
123   dbus_message_set_member (message, member);
124   success = dbus_connection_send (priv->dbus_conn_session, message, NULL);
125   dbus_message_unref (message);
126   
127 #if 0
128   fprintf (stderr, "%s '%s' message.\n",
129                                  success ? "Sent" : "Failed to send",
130                                  member);
131 #endif
132
133 }
134
135 /*******************************************************************************/
136 DBusHandlerResult
137 get_livewp_signal_cb(DBusConnection *conn, DBusMessage *msg, Animation_WallpaperPrivate *priv)
138 {
139
140 #ifdef DEBUGFUNCTIONCALL
141     START_FUNCTION;
142 #endif
143
144 /*    fprintf (stderr, "PATH11111111111111111111 %s %s %s\n",   dbus_message_get_path(msg),   dbus_message_get_interface (msg), dbus_message_get_member (msg)); */
145     if (dbus_message_is_signal(msg, LIVEWP_SIGNAL_INTERFACE, LIVEWP_RELOAD_CONFIG)){
146         if(read_config(priv)){
147                 fprintf(stderr, "\nCan not read config file.\n");
148         }else{
149             read_config(priv);
150 #if  !(defined APPLICATION || defined CONTROLPANEL)
151             reload_scene(priv->desktop_plugin);
152 #endif
153         }
154     }
155 #if  defined APPLICATION
156     fprintf(stderr, "VIEW %i\n", priv->view);
157     if ((priv->view == 1 && dbus_message_is_signal(msg, LIVEWP_SIGNAL_INTERFACE, LIVEWP_STOP_LIVEBG_ON_VIEW1))||
158         (priv->view == 2 && dbus_message_is_signal(msg, LIVEWP_SIGNAL_INTERFACE, LIVEWP_STOP_LIVEBG_ON_VIEW2))||   
159         (priv->view == 3 && dbus_message_is_signal(msg, LIVEWP_SIGNAL_INTERFACE, LIVEWP_STOP_LIVEBG_ON_VIEW3))||   
160         (priv->view == 4 && dbus_message_is_signal(msg, LIVEWP_SIGNAL_INTERFACE, LIVEWP_STOP_LIVEBG_ON_VIEW4))){
161
162         quit_from_program(priv);
163     }
164 #endif
165     //fprintf(stderr, "Type %i\n", dbus_message_get_type (msg));
166     if (dbus_message_is_method_call(msg, NOTIFY_SIGNAL_INTERFACE, NOTIFY_MEMBER)){
167         //fprintf(stderr,"read notifications.db notify\n");    
168         //read_notification(priv->desktop_plugin);
169         priv->scene->notification = time(NULL) + 5;
170     }
171     if (dbus_message_is_signal(msg, NOTIFY_SIGNAL_INTERFACE, CLOSENOTIFY_MEMBER)){
172         //fprintf(stderr,"read notifications.db close notify\n");    
173         //read_notification(priv->desktop_plugin);
174         priv->scene->notification = time(NULL) + 5;
175     }
176
177     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
178 }
179