예제 #1
0
static void
database_handle_dir_exists (DBusConnection *conn,
                            DBusMessage    *message,
                            GConfDatabase  *db)
{
  gboolean     exists;
  gchar       *dir;
  GError      *gerror = NULL;
  DBusMessage *reply;
 
  if (!gconfd_dbus_get_message_args (conn, message, 
				     DBUS_TYPE_STRING, &dir,
				     DBUS_TYPE_INVALID))
    return;

  exists = gconf_database_dir_exists (db, dir, &gerror);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);
  dbus_message_append_args (reply,
			    DBUS_TYPE_BOOLEAN, &exists,
			    DBUS_TYPE_INVALID);
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #2
0
static void
database_handle_set_schema (DBusConnection *conn,
                            DBusMessage    *message,
                            GConfDatabase  *db)
{
  gchar       *key;
  gchar       *schema_key;
  GError      *gerror = NULL;
  DBusMessage *reply;

  if (!gconfd_dbus_get_message_args (conn, message,
				     DBUS_TYPE_STRING, &key,
				     DBUS_TYPE_STRING, &schema_key,
				     DBUS_TYPE_INVALID)) 
    return;

  /* Empty schema key name means unset. */ 
  if (schema_key[0] == '\0')
    schema_key = NULL;
  
  gconf_database_set_schema (db, key, schema_key, &gerror);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #3
0
static void
database_handle_recursive_unset  (DBusConnection *conn,
                                  DBusMessage    *message,
                                  GConfDatabase  *db)
{
  gchar       *key;
  gchar       *locale;
  GError      *gerror = NULL;
  guint32      unset_flags;
  DBusMessage *reply;
  
  if (!gconfd_dbus_get_message_args (conn, message, 
				     DBUS_TYPE_STRING, &key,
				     DBUS_TYPE_STRING, &locale,
				     DBUS_TYPE_UINT32, &unset_flags,
				     DBUS_TYPE_INVALID))
    return;

  if (locale[0] == '\0')
    {
      locale = NULL;
    }
  
  gconf_database_recursive_unset (db, key, locale, unset_flags, &gerror);
  
  gconf_database_sync (db, NULL);
  
  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #4
0
static void
database_handle_set (DBusConnection *conn,
                     DBusMessage    *message,
                     GConfDatabase  *db)
{
  gchar *key;
  GConfValue *value = NULL; 
  GError *gerror = NULL;
  DBusMessage *reply;
  DBusMessageIter iter;

  dbus_message_iter_init (message, &iter);
  dbus_message_iter_get_basic (&iter, &key);

  dbus_message_iter_next (&iter);
  value = gconf_dbus_utils_get_value (&iter);

  gconf_database_set (db, key, value, &gerror);
  gconf_value_free (value);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #5
0
파일: gconfd-dbus.c 프로젝트: BARGAN/gconf
static void
server_real_handle_get_db (DBusConnection *connection,
			   DBusMessage    *message,
			   GSList         *addresses)
{
  GConfDatabase *db;
  DBusMessage   *reply;
  GError        *gerror = NULL;
  const gchar   *str;
 
  if (gconfd_dbus_check_in_shutdown (connection, message))
    return;

  db = gconfd_obtain_database (addresses, &gerror);

  if (gconfd_dbus_set_exception (connection, message, &gerror))
    return;
  
  reply = dbus_message_new_method_return (message);
  if (reply == NULL) 
      g_error ("No memory");

  str = gconf_database_dbus_get_path (db);
  dbus_message_append_args (reply,
			    DBUS_TYPE_OBJECT_PATH, &str,
			    DBUS_TYPE_INVALID);
  
  if (!dbus_connection_send (connection, reply, NULL)) 
    g_error ("No memory");

  dbus_message_unref (reply);
}
예제 #6
0
static void 
database_handle_lookup_ext (DBusConnection *conn,
			    DBusMessage    *message,
			    GConfDatabase  *db)
{
  GConfValue *value;
  gchar *schema_name = NULL;
  gboolean value_is_default;
  gboolean value_is_writable;
  DBusMessage *reply;
  gchar *key;
  gchar *locale;
  GConfLocaleList *locales;
  gboolean use_schema_default;
  GError *gerror = NULL;
  DBusMessageIter iter;
  
  if (!gconfd_dbus_get_message_args (conn, message,
				     DBUS_TYPE_STRING, &key,
				     DBUS_TYPE_STRING, &locale,
				     DBUS_TYPE_BOOLEAN, &use_schema_default,
				     DBUS_TYPE_INVALID))
    return;
  
  locales = gconfd_locale_cache_lookup (locale);
  
  value = gconf_database_query_value (db, key, locales->list,
				      use_schema_default,
				      &schema_name, &value_is_default, 
				      &value_is_writable, &gerror);
  
  if (gconfd_dbus_set_exception (conn, message, &gerror))
    goto fail;
  
  reply = dbus_message_new_method_return (message);

  dbus_message_iter_init_append (reply, &iter);

  if (value)
    gconf_dbus_utils_append_entry_values (&iter,
					  key,
					  value,
					  value_is_default,
					  value_is_writable,
					  schema_name);
  
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);

 fail:
  g_free (schema_name);

  if (value)
    gconf_value_free (value);
}
예제 #7
0
static void
database_handle_get_all_dirs (DBusConnection *conn,
                              DBusMessage    *message,
                              GConfDatabase  *db)
{
  GSList          *dirs, *l;
  gchar           *dir;
  GError          *gerror = NULL;
  DBusMessage     *reply;
  DBusMessageIter  iter;
  DBusMessageIter  array_iter;

  if (!gconfd_dbus_get_message_args (conn, message,
				     DBUS_TYPE_STRING, &dir,
				     DBUS_TYPE_INVALID)) 
    return;

  dirs = gconf_database_all_dirs (db, dir, &gerror);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;
  
  reply = dbus_message_new_method_return (message);

  dbus_message_iter_init_append (reply, &iter);

  dbus_message_iter_open_container (&iter,
				    DBUS_TYPE_ARRAY,
				    DBUS_TYPE_STRING_AS_STRING,
				    &array_iter);
  
  for (l = dirs; l; l = l->next) 
    {
      gchar *str = (gchar *) l->data;

      dbus_message_iter_append_basic (&array_iter,
				      DBUS_TYPE_STRING,
				      &str);
      
      g_free (l->data);
    }

  dbus_message_iter_close_container (&iter, &array_iter);
 
  g_slist_free (dirs);
  
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #8
0
static void
database_handle_suggest_sync (DBusConnection *conn,
		              DBusMessage    *message,
		              GConfDatabase  *db)
{
  GError *gerror = NULL;
  DBusMessage *reply;
  
  gconf_database_sync (db, &gerror);
  
  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);
}
예제 #9
0
static void
database_handle_get_all_entries (DBusConnection *conn,
                                 DBusMessage    *message,
                                 GConfDatabase  *db)
{
  GSList *entries, *l;
  gchar  *dir;
  gchar  *locale;
  GError *gerror = NULL;
  GConfLocaleList* locales;
  DBusMessage *reply;
  DBusMessageIter iter;

  if (!gconfd_dbus_get_message_args (conn, message, 
				     DBUS_TYPE_STRING, &dir,
				     DBUS_TYPE_STRING, &locale,
				     DBUS_TYPE_INVALID)) 
    return;

  locales = gconfd_locale_cache_lookup (locale);

  entries = gconf_database_all_entries (db, dir, 
					locales->list, &gerror);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    return;

  reply = dbus_message_new_method_return (message);

  dbus_message_iter_init_append (reply, &iter);

  gconf_dbus_utils_append_entries (&iter, entries);

  for (l = entries; l; l = l->next)
    {
      GConfEntry *entry = l->data;
      
      gconf_entry_free (entry);
    }
  
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);

  g_slist_free (entries);
}
예제 #10
0
static void 
database_handle_lookup_default (DBusConnection *conn,
				DBusMessage    *message,
				GConfDatabase  *db)
{
  GConfValue *value;
  DBusMessage *reply;
  gchar *key;
  gchar *locale;
  GConfLocaleList *locales;
  GError *gerror = NULL;
  DBusMessageIter iter;
  
  if (!gconfd_dbus_get_message_args (conn, message,
				     DBUS_TYPE_STRING, &key,
				     DBUS_TYPE_STRING, &locale,
				     DBUS_TYPE_INVALID))
    return;

  locales = gconfd_locale_cache_lookup (locale);

  value = gconf_database_query_default_value (db, key, locales->list,
					      NULL,
					      &gerror);

  if (gconfd_dbus_set_exception (conn, message, &gerror))
    goto fail;
  
  reply = dbus_message_new_method_return (message);

  dbus_message_iter_init_append (reply, &iter);

  if (value)
    gconf_dbus_utils_append_value (&iter, value);
  
  dbus_connection_send (conn, reply, NULL);
  dbus_message_unref (reply);

 fail:
  if (value)
    gconf_value_free (value);
}