[dbus] Implement widget.set method
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
9058bd1fd3
commit
deadca321c
64
dbus.c
64
dbus.c
|
@ -22,16 +22,55 @@
|
||||||
#include <dbus/dbus.h>
|
#include <dbus/dbus.h>
|
||||||
|
|
||||||
#include "dbus.h"
|
#include "dbus.h"
|
||||||
|
#include "statusbar.h"
|
||||||
|
#include "widget.h"
|
||||||
#include "common/util.h"
|
#include "common/util.h"
|
||||||
|
|
||||||
|
extern AwesomeConf globalconf;
|
||||||
|
|
||||||
static DBusError err;
|
static DBusError err;
|
||||||
static DBusConnection *dbus_connection = NULL;
|
static DBusConnection *dbus_connection = NULL;
|
||||||
|
|
||||||
static void
|
/** Check a dbus object path format and its number of element.
|
||||||
a_dbus_process_widget_tell(DBusMessage *req)
|
* \param path The path.
|
||||||
|
* \param nelem The number of element it should have.
|
||||||
|
* \return true if the path is ok, false otherwise.
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
a_dbus_path_check(char **path, int nelem)
|
||||||
{
|
{
|
||||||
char *arg, *path = NULL;
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; path[i]; i++);
|
||||||
|
if(i != nelem)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (!a_strcmp(path[0], "org")&& !a_strcmp(path[1], "awesome"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Process widget.set method call.
|
||||||
|
* \param req The dbus message.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
a_dbus_process_widget_set(DBusMessage *req)
|
||||||
|
{
|
||||||
|
char *arg, **path;
|
||||||
|
int i, screen;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
|
statusbar_t *statusbar;
|
||||||
|
widget_t *widget;
|
||||||
|
|
||||||
|
if(!dbus_message_get_path_decomposed(req, &path)
|
||||||
|
|| !a_dbus_path_check(path, 10)
|
||||||
|
|| a_strcmp(path[2], "screen")
|
||||||
|
|| a_strcmp(path[4], "statusbar")
|
||||||
|
|| a_strcmp(path[6], "widget")
|
||||||
|
|| a_strcmp(path[8], "property"))
|
||||||
|
{
|
||||||
|
warn("invalid object path 2\n");
|
||||||
|
dbus_error_free(&err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!dbus_message_iter_init(req, &iter))
|
if(!dbus_message_iter_init(req, &iter))
|
||||||
{
|
{
|
||||||
|
@ -41,13 +80,26 @@ a_dbus_process_widget_tell(DBusMessage *req)
|
||||||
}
|
}
|
||||||
else if(DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&iter))
|
else if(DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&iter))
|
||||||
{
|
{
|
||||||
warn("argument must be a string");
|
warn("argument must be a string\n");
|
||||||
dbus_error_free(&err);
|
dbus_error_free(&err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dbus_message_iter_get_basic(&iter, &arg);
|
dbus_message_iter_get_basic(&iter, &arg);
|
||||||
|
|
||||||
|
if((screen = atoi(path[3])) >= globalconf.screens_info->nscreen)
|
||||||
|
return warn("bad screen number\n");
|
||||||
|
|
||||||
|
if(!(statusbar = statusbar_getbyname(screen, path[5])))
|
||||||
|
return warn("no such statusbar: %s\n", path[5]);
|
||||||
|
|
||||||
|
if(!(widget = widget_getbyname(statusbar, path[7])))
|
||||||
|
return warn("no such widget: %s in statusbar %s.\n", path[7], statusbar->name);
|
||||||
|
|
||||||
|
widget->tell(widget, path[9], arg);
|
||||||
|
|
||||||
|
for(i = 0; path[i]; i++)
|
||||||
|
p_delete(&path[i]);
|
||||||
p_delete(&path);
|
p_delete(&path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +120,8 @@ a_dbus_process_requests(int *fd)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
if(dbus_message_is_method_call(msg, "org.awesome.statusbar.widget", "tell"))
|
if(dbus_message_is_method_call(msg, "org.awesome.statusbar.widget", "set"))
|
||||||
a_dbus_process_widget_tell(msg);
|
a_dbus_process_widget_set(msg);
|
||||||
else if(dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected"))
|
else if(dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected"))
|
||||||
{
|
{
|
||||||
a_dbus_cleanup();
|
a_dbus_cleanup();
|
||||||
|
|
2
widget.c
2
widget.c
|
@ -90,7 +90,7 @@ widget_calculate_offset(int barwidth, int widgetwidth, int offset, int alignment
|
||||||
* \param name The widget name.
|
* \param name The widget name.
|
||||||
* \return A widget pointer.
|
* \return A widget pointer.
|
||||||
*/
|
*/
|
||||||
static widget_t *
|
widget_t *
|
||||||
widget_getbyname(statusbar_t *sb, char *name)
|
widget_getbyname(statusbar_t *sb, char *name)
|
||||||
{
|
{
|
||||||
widget_t *widget;
|
widget_t *widget;
|
||||||
|
|
1
widget.h
1
widget.h
|
@ -38,6 +38,7 @@ void widget_invalidate_cache(int, int);
|
||||||
int widget_calculate_offset(int, int, int, int);
|
int widget_calculate_offset(int, int, int, int);
|
||||||
void widget_calculate_alignments(widget_t *);
|
void widget_calculate_alignments(widget_t *);
|
||||||
void widget_common_new(widget_t*, statusbar_t *, cfg_t *);
|
void widget_common_new(widget_t*, statusbar_t *, cfg_t *);
|
||||||
|
widget_t * widget_getbyname(statusbar_t *, char *);
|
||||||
|
|
||||||
WidgetConstructor layoutinfo_new;
|
WidgetConstructor layoutinfo_new;
|
||||||
WidgetConstructor taglist_new;
|
WidgetConstructor taglist_new;
|
||||||
|
|
Loading…
Reference in New Issue