~ubuntu-branches/ubuntu/karmic/ibus/karmic-updates

« back to all changes in this revision

Viewing changes to bus/ibusimpl.c

  • Committer: Bazaar Package Importer
  • Author(s): LI Daobing
  • Date: 2009-07-23 20:22:09 UTC
  • mfrom: (1.1.4 upstream) (6.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20090723202209-bmgqa80g1umg8l2p
Tags: 1.2.0.20090723-1
new upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
static void     bus_ibus_impl_set_preload_engines
60
60
                                                (BusIBusImpl        *ibus,
61
61
                                                 GValue             *value);
62
 
static void     _factory_destroy_cb             (BusFactoryProxy      *factory,
63
 
                                                 BusIBusImpl          *ibus);
 
62
static void     bus_ibus_impl_set_use_sys_layout
 
63
                                                (BusIBusImpl        *ibus,
 
64
                                                 GValue             *value);
 
65
static void     _factory_destroy_cb             (BusFactoryProxy    *factory,
 
66
                                                 BusIBusImpl        *ibus);
64
67
 
65
68
static IBusServiceClass  *parent_class = NULL;
66
69
 
240
243
    }
241
244
}
242
245
 
 
246
static void
 
247
bus_ibus_impl_set_use_sys_layout (BusIBusImpl *ibus,
 
248
                                  GValue      *value)
 
249
{
 
250
    if (value != NULL && G_VALUE_TYPE (value) == G_TYPE_BOOLEAN) {
 
251
        ibus->use_sys_layout = g_value_get_boolean (value);
 
252
    }
 
253
}
 
254
 
243
255
static gint
244
256
_engine_desc_cmp (IBusEngineDesc *desc1,
245
257
                  IBusEngineDesc *desc2)
320
332
        { "general/hotkey", "next_engine", bus_ibus_impl_set_next_engine },
321
333
        { "general/hotkey", "prev_engine", bus_ibus_impl_set_prev_engine },
322
334
        { "general", "preload_engines", bus_ibus_impl_set_preload_engines },
 
335
        { "general", "use_system_keyboard_layout", bus_ibus_impl_set_use_sys_layout },
323
336
        { NULL, NULL, NULL },
324
337
    };
325
338
 
362
375
        { "general/hotkey", "next_engine", bus_ibus_impl_set_next_engine },
363
376
        { "general/hotkey", "prev_engine", bus_ibus_impl_set_prev_engine },
364
377
        { "general", "preload_engines",    bus_ibus_impl_set_preload_engines },
 
378
        { "general", "use_system_keyboard_layout", bus_ibus_impl_set_use_sys_layout },
365
379
        { NULL, NULL, NULL },
366
380
    };
367
381
 
485
499
    ibus->config = NULL;
486
500
 
487
501
    ibus->hotkey_profile = ibus_hotkey_profile_new ();
 
502
    ibus->keymap = ibus_keymap_new ("us");
 
503
 
 
504
    ibus->use_sys_layout = FALSE;
488
505
 
489
506
    bus_ibus_impl_reload_config (ibus);
490
507
 
550
567
        ibus->hotkey_profile = NULL;
551
568
    }
552
569
 
 
570
    if (ibus->keymap != NULL) {
 
571
        g_object_unref (ibus->keymap);
 
572
        ibus->keymap = NULL;
 
573
    }
 
574
 
553
575
    bus_server_quit (BUS_DEFAULT_SERVER);
554
576
    ibus_object_destroy ((IBusObject *) BUS_DEFAULT_SERVER);
555
577
    IBUS_OBJECT_CLASS(parent_class)->destroy (IBUS_OBJECT (ibus));
569
591
        "      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
570
592
        "    </method>\n"
571
593
        "  </interface>\n"
572
 
        "  <interface name=\"org.freedesktop.DBus\">\n"
573
 
        "    <method name=\"RequestName\">\n"
574
 
        "      <arg direction=\"in\" type=\"s\"/>\n"
575
 
        "      <arg direction=\"in\" type=\"u\"/>\n"
576
 
        "      <arg direction=\"out\" type=\"u\"/>\n"
577
 
        "    </method>\n"
578
 
        "    <signal name=\"NameOwnerChanged\">\n"
579
 
        "      <arg type=\"s\"/>\n"
580
 
        "      <arg type=\"s\"/>\n"
581
 
        "      <arg type=\"s\"/>\n"
582
 
        "    </signal>\n"
 
594
        "  <interface name=\"org.freedesktop.IBus\">\n"
 
595
        "    <method name=\"GetAddress\">\n"
 
596
        "      <arg name=\"address\" direction=\"out\" type=\"s\"/>\n"
 
597
        "    </method>\n"
 
598
        "    <method name=\"CreateInputContext\">\n"
 
599
        "      <arg name=\"name\" direction=\"in\" type=\"s\"/>\n"
 
600
        "      <arg name=\"context\" direction=\"out\" type=\"o\"/>\n"
 
601
        "    </method>\n"
 
602
        "    <method name=\"RegisterComponent\">\n"
 
603
        "      <arg name=\"components\" direction=\"in\" type=\"v\"/>\n"
 
604
        "    </method>\n"
 
605
        "    <method name=\"ListEngines\">\n"
 
606
        "      <arg name=\"engines\" direction=\"out\" type=\"av\"/>\n"
 
607
        "    </method>\n"
 
608
        "    <method name=\"ListActiveEngines\">\n"
 
609
        "      <arg name=\"engines\" direction=\"out\" type=\"av\"/>\n"
 
610
        "    </method>\n"
 
611
        "    <method name=\"Exit\">\n"
 
612
        "      <arg name=\"restart\" direction=\"in\" type=\"b\"/>\n"
 
613
        "    </method>\n"
 
614
        "    <method name=\"Ping\">\n"
 
615
        "      <arg name=\"data\" direction=\"in\" type=\"v\"/>\n"
 
616
        "      <arg name=\"data\" direction=\"out\" type=\"v\"/>\n"
 
617
        "    </method>\n"
583
618
        "  </interface>\n"
584
619
        "</node>\n";
585
620
 
1091
1126
    return NULL;
1092
1127
}
1093
1128
 
 
1129
static IBusMessage *
 
1130
_ibus_ping (BusIBusImpl     *ibus,
 
1131
            IBusMessage     *message,
 
1132
            BusConnection   *connection)
 
1133
{
 
1134
    IBusMessage *reply;
 
1135
    IBusMessageIter src, dst;
 
1136
 
 
1137
    reply = ibus_message_new_method_return (message);
 
1138
 
 
1139
    ibus_message_iter_init (message, &src);
 
1140
    ibus_message_iter_init_append (reply, &dst);
 
1141
 
 
1142
    ibus_message_iter_copy_data (&dst, &src);
 
1143
 
 
1144
    return reply;
 
1145
}
 
1146
 
1094
1147
static gboolean
1095
1148
bus_ibus_impl_ibus_message (BusIBusImpl     *ibus,
1096
1149
                            BusConnection   *connection,
1110
1163
    } handlers[] =  {
1111
1164
        /* Introspectable interface */
1112
1165
        { DBUS_INTERFACE_INTROSPECTABLE,
1113
 
                               "Introspect", _ibus_introspect },
 
1166
                               "Introspect",            _ibus_introspect },
1114
1167
        /* IBus interface */
1115
1168
        { IBUS_INTERFACE_IBUS, "GetAddress",            _ibus_get_address },
1116
1169
        { IBUS_INTERFACE_IBUS, "CreateInputContext",    _ibus_create_input_context },
1118
1171
        { IBUS_INTERFACE_IBUS, "ListEngines",           _ibus_list_engines },
1119
1172
        { IBUS_INTERFACE_IBUS, "ListActiveEngines",     _ibus_list_active_engines },
1120
1173
        { IBUS_INTERFACE_IBUS, "Exit",                  _ibus_exit },
 
1174
        { IBUS_INTERFACE_IBUS, "Ping",                  _ibus_ping },
1121
1175
        { NULL, NULL, NULL }
1122
1176
    };
1123
1177
 
1124
1178
    ibus_message_set_sender (message, bus_connection_get_unique_name (connection));
1125
1179
    ibus_message_set_destination (message, DBUS_SERVICE_DBUS);
1126
1180
 
1127
 
    for (i = 0; handlers[i].interface != NULL; i++) {
1128
 
        if (ibus_message_is_method_call (message,
1129
 
                                         handlers[i].interface,
1130
 
                                         handlers[i].name)) {
1131
 
 
1132
 
            reply_message = handlers[i].handler (ibus, message, connection);
1133
 
            if (reply_message) {
1134
 
 
1135
 
                ibus_message_set_sender (reply_message, DBUS_SERVICE_DBUS);
1136
 
                ibus_message_set_destination (reply_message, bus_connection_get_unique_name (connection));
1137
 
                ibus_message_set_no_reply (reply_message, TRUE);
1138
 
 
1139
 
                ibus_connection_send ((IBusConnection *) connection, reply_message);
1140
 
                ibus_message_unref (reply_message);
 
1181
    if (ibus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_CALL) {
 
1182
        g_debug ("Member = %s", ibus_message_get_member (message));
 
1183
        for (i = 0; handlers[i].interface != NULL; i++) {
 
1184
            if (ibus_message_is_method_call (message,
 
1185
                                             handlers[i].interface,
 
1186
                                             handlers[i].name)) {
 
1187
 
 
1188
                reply_message = handlers[i].handler (ibus, message, connection);
 
1189
                if (reply_message) {
 
1190
 
 
1191
                    ibus_message_set_sender (reply_message, DBUS_SERVICE_DBUS);
 
1192
                    ibus_message_set_destination (reply_message, bus_connection_get_unique_name (connection));
 
1193
                    ibus_message_set_no_reply (reply_message, TRUE);
 
1194
 
 
1195
                    ibus_connection_send ((IBusConnection *) connection, reply_message);
 
1196
                    ibus_message_unref (reply_message);
 
1197
                }
 
1198
 
 
1199
                g_signal_stop_emission_by_name (ibus, "ibus-message");
 
1200
                return TRUE;
1141
1201
            }
1142
 
 
1143
 
            g_signal_stop_emission_by_name (ibus, "ibus-message");
1144
 
            return TRUE;
1145
1202
        }
1146
1203
    }
1147
1204
 
1171
1228
    return ibus->hotkey_profile;
1172
1229
}
1173
1230
 
 
1231
IBusKeymap *
 
1232
bus_ibus_impl_get_keymap (BusIBusImpl *ibus)
 
1233
{
 
1234
 
 
1235
    g_assert (BUS_IS_IBUS_IMPL (ibus));
 
1236
 
 
1237
    return ibus->keymap;
 
1238
}
 
1239
 
1174
1240
BusRegistry *
1175
1241
bus_ibus_impl_get_registry (BusIBusImpl *ibus)
1176
1242
{