1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_DBUS_IBUS_IBUS_CLIENT_H_
6#define CHROMEOS_DBUS_IBUS_IBUS_CLIENT_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/callback.h"
12#include "chromeos/chromeos_export.h"
13#include "chromeos/dbus/dbus_client_implementation_type.h"
14#include "dbus/object_path.h"
15
16namespace dbus {
17class Bus;
18}  // namespace dbus
19
20namespace chromeos {
21
22class IBusComponent;
23class IBusInputContextClient;
24
25// A class to make the actual DBus calls for IBusBus service.
26// This class only makes calls, result/error handling should be done by
27// callbacks.
28class CHROMEOS_EXPORT IBusClient {
29 public:
30  enum ExitOption {
31    RESTART_IBUS_DAEMON,
32    SHUT_DOWN_IBUS_DAEMON
33  };
34  typedef base::Callback<void(const dbus::ObjectPath&)>
35      CreateInputContextCallback;
36  typedef base::Callback<void()> RegisterComponentCallback;
37  typedef base::Callback<void()> ErrorCallback;
38
39  virtual ~IBusClient();
40
41  // Requests the ibus-daemon to create new input context. If succeeded,
42  // |callback| will be called with an ObjectPath which is used in input context
43  // handling. If failed, |error_callback| is called instead.
44  virtual void CreateInputContext(
45      const std::string& client_name,
46      const CreateInputContextCallback& callback,
47      const ErrorCallback& error_callback) = 0;
48
49  // Requests the ibus-daemon to register new engine object. If succeeded,
50  // |callback| will be called. If failed, |error_callback| is called instead.
51  virtual void RegisterComponent(
52      const IBusComponent& ibus_component,
53      const RegisterComponentCallback& callback,
54      const ErrorCallback& error_callback) = 0;
55
56  // Requests the ibus-daemon to set global engine. If failed, |error_callback|
57  // is called.
58  virtual void SetGlobalEngine(const std::string& engine_name,
59                               const ErrorCallback& error_callback) = 0;
60
61  // Requests the ibus-daemon to exit daemon process. If |option| is
62  // RESTART_IBUS_DAEMON, ibus-daemon will be relaunched. If |option| is
63  // SHUT_DOWN_IBUS_DAEMON, ibus-daemon will not be relaunched. The
64  // |error_callback| is called if an error occurs.
65  virtual void Exit(ExitOption option, const ErrorCallback& error_callback) = 0;
66
67  // Factory function, creates a new instance and returns ownership.
68  // For normal usage, access the singleton via DBusThreadManager::Get().
69  static CHROMEOS_EXPORT IBusClient* Create(DBusClientImplementationType type,
70                                            dbus::Bus* bus);
71
72 protected:
73  // Create() should be used instead.
74  IBusClient();
75
76 private:
77  DISALLOW_COPY_AND_ASSIGN(IBusClient);
78};
79
80}  // namespace chromeos
81
82#endif  // CHROMEOS_DBUS_IBUS_IBUS_CLIENT_H_
83