4
* Copyright (c) 2006 Ryo Dairiki <ryo-dairiki@users.sourceforge.net>
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation and
10
* appearing in the file LICENSE.LGPL included in the package of this file.
11
* You can also redistribute it and/or modify it under the terms of
12
* the GNU General Public License as published by the Free Software Foundation and
13
* appearing in the file LICENSE.GPL included in the package of this file.
15
* This library is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25
#include <sys/types.h>
30
#define Uses_SCIM_CONFIG_PATH
34
#ifndef SCIM_PANEL_PROGRAM
35
#define SCIM_PANEL_PROGRAM (SCIM_LIBEXECDIR "/scim-panel-gtk")
38
#include "scim-bridge-agent-panel-client.h"
39
#include "scim-bridge-output.h"
45
typedef Signal1<void, int> ScimBridgeAgentPanelClientSignalVoid;
46
typedef Signal2<void, int, int> ScimBridgeAgentPanelClientSignalInt;
47
typedef Signal2<void, int, const String&> ScimBridgeAgentPanelClientSignalString;
48
typedef Signal2<void, int, const WideString&> ScimBridgeAgentPanelClientSignalWideString;
49
typedef Signal4<void, int, const String&, const String&, const Transaction&> ScimBridgeAgentPanelClientSignalStringStringTransaction;
50
typedef Signal2<void, int, const KeyEvent&> ScimBridgeAgentPanelClientSignalKeyEvent;
52
class ScimBridgeAgentPanelClientImpl: public ScimBridgeAgentPanelClient
57
ScimBridgeAgentPanelClientImpl (const String &config_name, const ScimBridgeDisplay *display);
58
~ScimBridgeAgentPanelClientImpl ();
60
int open_connection ();
61
void close_connection ();
62
int get_connection_number () const;
63
bool is_connected () const;
65
bool has_pending_event () const;
66
retval_t filter_event ();
68
retval_t prepare (scim_bridge_imcontext_id_t imcontext_id);
73
void update_screen ();
74
void show_help (const String &help);
75
void show_factory_menu (const vector<PanelFactoryInfo> &menu);
76
void focus_in (const scim::String &uuid);
78
void update_factory_info (const PanelFactoryInfo &info);
79
void update_spot_location (int x, int y);
80
void show_preedit_string ();
81
void show_aux_string ();
82
void show_lookup_table ();
83
void hide_preedit_string ();
84
void hide_aux_string ();
85
void hide_lookup_table ();
86
void update_preedit_string (const WideString &str, const AttributeList &attrs);
87
void update_preedit_caret (int cursor_position);
88
void update_aux_string (const WideString &str, const AttributeList &attrs);
89
void update_lookup_table (const LookupTable &table);
90
void register_properties (const PropertyList &properties);
91
void update_property (const Property &property);
92
void start_helper (const String &helper_uuid);
93
void stop_helper (const String &helper_uuid);
94
void send_helper_event (const String &helper_uuid, const Transaction &trans);
95
void register_input_context (const String &uuid);
96
void remove_input_context ();
98
Connection signal_connect_reload_config (ScimBridgeAgentPanelClientSlotVoid *slot);
99
Connection signal_connect_exit (ScimBridgeAgentPanelClientSlotVoid *slot);
100
Connection signal_connect_update_lookup_table_page_size (ScimBridgeAgentPanelClientSlotInt *slot);
101
Connection signal_connect_lookup_table_page_up (ScimBridgeAgentPanelClientSlotVoid *slot);
102
Connection signal_connect_lookup_table_page_down (ScimBridgeAgentPanelClientSlotVoid *slot);
103
Connection signal_connect_trigger_property (ScimBridgeAgentPanelClientSlotString *slot);
104
Connection signal_connect_process_helper_event (ScimBridgeAgentPanelClientSlotStringStringTransaction *slot);
105
Connection signal_connect_move_preedit_caret (ScimBridgeAgentPanelClientSlotInt *slot);
106
Connection signal_connect_select_candidate (ScimBridgeAgentPanelClientSlotInt *slot);
107
Connection signal_connect_process_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot);
108
Connection signal_connect_commit_string (ScimBridgeAgentPanelClientSlotWideString *slot);
109
Connection signal_connect_forward_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot);
110
Connection signal_connect_request_help (ScimBridgeAgentPanelClientSlotVoid *slot);
111
Connection signal_connect_request_factory_menu (ScimBridgeAgentPanelClientSlotVoid *slot);
112
Connection signal_connect_change_factory (ScimBridgeAgentPanelClientSlotString *slot);
117
ScimBridgeDisplay *display;
119
SocketClient socket_client;
121
uint32_t socket_magic_key;
122
Transaction sending_transaction;
123
scim_bridge_imcontext_id_t prepared_imcontext_id;
125
ScimBridgeAgentPanelClientSignalVoid signal_reload_config;
126
ScimBridgeAgentPanelClientSignalVoid signal_exit;
127
ScimBridgeAgentPanelClientSignalInt signal_update_lookup_table_page_size;
128
ScimBridgeAgentPanelClientSignalVoid signal_lookup_table_page_up;
129
ScimBridgeAgentPanelClientSignalVoid signal_lookup_table_page_down;
130
ScimBridgeAgentPanelClientSignalString signal_trigger_property;
131
ScimBridgeAgentPanelClientSignalStringStringTransaction signal_process_helper_event;
132
ScimBridgeAgentPanelClientSignalInt signal_move_preedit_caret;
133
ScimBridgeAgentPanelClientSignalInt signal_select_candidate;
134
ScimBridgeAgentPanelClientSignalKeyEvent signal_process_key_event;
135
ScimBridgeAgentPanelClientSignalWideString signal_commit_string;
136
ScimBridgeAgentPanelClientSignalKeyEvent signal_forward_key_event;
137
ScimBridgeAgentPanelClientSignalVoid signal_request_help;
138
ScimBridgeAgentPanelClientSignalVoid signal_request_factory_menu;
139
ScimBridgeAgentPanelClientSignalString signal_change_factory;
141
retval_t launch_panel ();
145
/* Implementations */
146
ScimBridgeAgentPanelClient *ScimBridgeAgentPanelClient::alloc (const String &config_name, const ScimBridgeDisplay *display)
148
return new ScimBridgeAgentPanelClientImpl (config_name, display);
152
ScimBridgeAgentPanelClient::ScimBridgeAgentPanelClient ()
157
ScimBridgeAgentPanelClient::~ScimBridgeAgentPanelClient ()
162
ScimBridgeAgentPanelClientImpl::ScimBridgeAgentPanelClientImpl (const String &new_config_name, const ScimBridgeDisplay *new_display):
163
config_name (new_config_name), display (NULL), socket_timeout (scim_get_default_socket_timeout ()), socket_magic_key (0), prepared_imcontext_id (-1)
165
display = scim_bridge_alloc_display ();
166
scim_bridge_copy_display (display, new_display);
170
ScimBridgeAgentPanelClientImpl::~ScimBridgeAgentPanelClientImpl ()
172
if (socket_client.is_connected ()) close_connection ();
173
scim_bridge_free_display (display);
177
retval_t ScimBridgeAgentPanelClientImpl::launch_panel ()
179
scim_bridge_pdebugln (7, "launch_panel ()");
181
String panel_program = scim_global_config_read (SCIM_GLOBAL_CONFIG_DEFAULT_PANEL_PROGRAM, String (SCIM_PANEL_PROGRAM));
182
if (panel_program [0] != SCIM_PATH_DELIM) panel_program = String (SCIM_LIBEXECDIR) + String (SCIM_PATH_DELIM_STRING) + panel_program;
184
struct stat stat_buf;
185
if (lstat (panel_program.c_str (), &stat_buf) || !S_ISREG (stat_buf.st_mode) || access (panel_program.c_str (), X_OK)) {
186
panel_program = String (SCIM_PANEL_PROGRAM);
188
scim_bridge_pdebugln (5, "Launch \"%s\"", panel_program.c_str ());
190
if (display != NULL) {
191
const pid_t retval = fork ();
193
if (daemon (0, 0) == 0) {
194
char *display_name_cstr = strdup (scim_bridge_display_get_name (display));
195
char *conf_name_cstr = strdup (config_name.c_str ());
196
char *panel_program_cstr = strdup (panel_program.c_str ());
197
char *my_argv[] = {panel_program_cstr, const_cast<char*>("--no-stay"), const_cast<char*>("--display"), display_name_cstr, const_cast<char*>("-c"), conf_name_cstr, const_cast<char*>("-d"), 0};
198
if (execv (panel_program_cstr, my_argv)) abort ();
200
scim_bridge_perrorln ("Failed to forking for a panel process: %s", errno == 0 ? "Unknown reason":strerror (errno));
203
return RETVAL_FAILED;
204
} else if (retval > 0) {
205
waitpid (retval, NULL, 0);
206
return RETVAL_SUCCEEDED;
208
scim_bridge_perrorln ("Failed to launch a panel: %s", errno == 0 ? "Unknown reason":strerror (errno));
209
return RETVAL_FAILED;
212
scim_bridge_println ("No display for the panel");
213
return RETVAL_FAILED;
218
int ScimBridgeAgentPanelClientImpl::open_connection ()
220
if (socket_client.is_connected ()) close_connection ();
221
SocketAddress address (scim_get_default_panel_socket_address (scim_bridge_display_get_name (display)));
223
if (!socket_client.connect (address)) {
228
// Try to establish the connection six times.
229
for (int i = 0; i < 6; ++i) {
230
if (!socket_client.connect (address)) {
233
if (scim_socket_open_connection (socket_magic_key, String ("FrontEnd"), String ("Panel"), socket_client, socket_timeout)) {
234
return socket_client.get_id ();
237
socket_client.close ();
244
void ScimBridgeAgentPanelClientImpl::close_connection ()
246
socket_client.close ();
247
socket_magic_key = 0;
248
prepared_imcontext_id = -1;
252
int ScimBridgeAgentPanelClientImpl::get_connection_number () const
254
return socket_client.get_id ();
258
bool ScimBridgeAgentPanelClientImpl::is_connected () const
260
return socket_client.is_connected ();
264
bool ScimBridgeAgentPanelClientImpl::has_pending_event () const
266
return socket_client.is_connected () && socket_client.wait_for_data (0) > 0;
270
retval_t ScimBridgeAgentPanelClientImpl::filter_event ()
272
Transaction receiving_transaction;
274
if (!socket_client.is_connected () || !receiving_transaction.read_from_socket (socket_client, socket_timeout)) return RETVAL_FAILED;
277
if (!receiving_transaction.get_command (command) || command != SCIM_TRANS_CMD_REPLY) return RETVAL_SUCCEEDED;
279
// No IMContext ID is available; this is a global command.
280
if (receiving_transaction.get_data_type () == SCIM_TRANS_DATA_COMMAND) {
281
while (receiving_transaction.get_command (command)) {
283
case SCIM_TRANS_CMD_RELOAD_CONFIG:
284
signal_reload_config (-1);
286
case SCIM_TRANS_CMD_EXIT:
296
// Check if there is a command for the specific IMContext.
297
uint32_t imcontext_id;
298
if (!receiving_transaction.get_data (imcontext_id)) return RETVAL_SUCCEEDED;
300
while (receiving_transaction.get_command (command)) {
302
case SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE:
305
if (receiving_transaction.get_data (size)) signal_update_lookup_table_page_size (imcontext_id, (int) size);
308
case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP:
310
signal_lookup_table_page_up (imcontext_id);
313
case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN:
315
signal_lookup_table_page_down (imcontext_id);
318
case SCIM_TRANS_CMD_TRIGGER_PROPERTY:
321
if (receiving_transaction.get_data (property)) signal_trigger_property (imcontext_id, property);
324
case SCIM_TRANS_CMD_PROCESS_HELPER_EVENT:
329
if (receiving_transaction.get_data (target_uuid) && receiving_transaction.get_data (helper_uuid) && receiving_transaction.get_data (trans)) signal_process_helper_event (imcontext_id, target_uuid, helper_uuid, trans);
332
case SCIM_TRANS_CMD_MOVE_PREEDIT_CARET:
335
if (receiving_transaction.get_data (cursor_pos)) signal_move_preedit_caret (imcontext_id, cursor_pos);
338
case SCIM_TRANS_CMD_SELECT_CANDIDATE:
341
if (receiving_transaction.get_data (item)) signal_select_candidate (imcontext_id, item);
344
case SCIM_TRANS_CMD_PROCESS_KEY_EVENT:
347
if (receiving_transaction.get_data (key_event)) signal_process_key_event (imcontext_id, key_event);
350
case SCIM_TRANS_CMD_FORWARD_KEY_EVENT:
353
if (receiving_transaction.get_data (key_event)) signal_forward_key_event (imcontext_id, key_event);
356
case SCIM_TRANS_CMD_COMMIT_STRING:
359
if (receiving_transaction.get_data (wstr)) signal_commit_string (imcontext_id, wstr);
362
case SCIM_TRANS_CMD_PANEL_REQUEST_HELP:
364
signal_request_help (imcontext_id);
367
case SCIM_TRANS_CMD_PANEL_REQUEST_FACTORY_MENU:
369
signal_request_factory_menu (imcontext_id);
372
case SCIM_TRANS_CMD_PANEL_CHANGE_FACTORY:
375
if (receiving_transaction.get_data (factory_uuid)) signal_change_factory (imcontext_id, factory_uuid);
384
return RETVAL_SUCCEEDED;
388
retval_t ScimBridgeAgentPanelClientImpl::prepare (scim_bridge_imcontext_id_t imcontext_id)
390
if (!socket_client.is_connected ()) {
391
if (open_connection ()) return RETVAL_FAILED;
394
if (prepared_imcontext_id == -1) {
395
sending_transaction.clear ();
396
sending_transaction.put_command (SCIM_TRANS_CMD_REQUEST);
397
sending_transaction.put_data (socket_magic_key);
398
sending_transaction.put_data ((uint32_t) imcontext_id);
402
sending_transaction.get_command (command);
403
sending_transaction.get_data (data);
404
sending_transaction.get_data (data);
406
prepared_imcontext_id = imcontext_id;
407
return RETVAL_SUCCEEDED;
409
scim_bridge_pdebugln (8, "The panel client is already prepared!");
410
return RETVAL_FAILED;
415
retval_t ScimBridgeAgentPanelClientImpl::send ()
417
if (!socket_client.is_connected ()) return RETVAL_SUCCEEDED;
419
if (prepared_imcontext_id == -1) return RETVAL_SUCCEEDED;
421
prepared_imcontext_id = -1;
422
if (sending_transaction.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) {
423
return sending_transaction.write_to_socket (socket_client, 0x4d494353);
425
return RETVAL_SUCCEEDED;
430
void ScimBridgeAgentPanelClientImpl::turn_on ()
432
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_TURN_ON);
436
void ScimBridgeAgentPanelClientImpl::turn_off ()
438
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_TURN_OFF);
442
void ScimBridgeAgentPanelClientImpl::update_screen ()
444
if (prepared_imcontext_id != -1 && display != NULL) {
445
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_SCREEN);
446
sending_transaction.put_data ((uint32_t) scim_bridge_display_get_screen_number (display));
451
void ScimBridgeAgentPanelClientImpl::show_help (const String &help)
453
if (prepared_imcontext_id != -1) {
454
sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_SHOW_HELP);
455
sending_transaction.put_data (help);
460
void ScimBridgeAgentPanelClientImpl::show_factory_menu (const vector<PanelFactoryInfo> &menu)
462
if (prepared_imcontext_id != -1) {
463
sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_SHOW_FACTORY_MENU);
464
for (size_t i = 0; i < menu.size (); ++i) {
465
sending_transaction.put_data (menu[i].uuid);
466
sending_transaction.put_data (menu[i].name);
467
sending_transaction.put_data (menu[i].lang);
468
sending_transaction.put_data (menu[i].icon);
474
void ScimBridgeAgentPanelClientImpl::focus_in (const String &uuid)
476
if (prepared_imcontext_id != -1) {
477
sending_transaction.put_command (SCIM_TRANS_CMD_FOCUS_IN);
478
sending_transaction.put_data (uuid);
483
void ScimBridgeAgentPanelClientImpl::focus_out ()
485
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_FOCUS_OUT);
489
void ScimBridgeAgentPanelClientImpl::update_factory_info (const PanelFactoryInfo &info)
491
if (prepared_imcontext_id != -1) {
492
sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_UPDATE_FACTORY_INFO);
493
sending_transaction.put_data (info.uuid);
494
sending_transaction.put_data (info.name);
495
sending_transaction.put_data (info.lang);
496
sending_transaction.put_data (info.icon);
501
void ScimBridgeAgentPanelClientImpl::update_spot_location (int x, int y)
503
if (prepared_imcontext_id != -1) {
504
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_SPOT_LOCATION);
505
sending_transaction.put_data ((uint32_t) x);
506
sending_transaction.put_data ((uint32_t) y);
511
void ScimBridgeAgentPanelClientImpl::show_preedit_string ()
513
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_PREEDIT_STRING);
517
void ScimBridgeAgentPanelClientImpl::show_aux_string ()
519
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_AUX_STRING);
523
void ScimBridgeAgentPanelClientImpl::show_lookup_table ()
525
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_SHOW_LOOKUP_TABLE);
529
void ScimBridgeAgentPanelClientImpl::hide_preedit_string ()
531
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_PREEDIT_STRING);
535
void ScimBridgeAgentPanelClientImpl::hide_aux_string ()
537
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_AUX_STRING);
541
void ScimBridgeAgentPanelClientImpl::hide_lookup_table ()
543
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_HIDE_LOOKUP_TABLE);
547
void ScimBridgeAgentPanelClientImpl::update_preedit_string (const WideString &str, const AttributeList &attrs)
549
if (prepared_imcontext_id != -1) {
550
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_STRING);
551
sending_transaction.put_data (utf8_wcstombs (str));
552
sending_transaction.put_data (attrs);
557
void ScimBridgeAgentPanelClientImpl::update_preedit_caret (int caret)
559
if (prepared_imcontext_id != -1) {
560
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PREEDIT_CARET);
561
sending_transaction.put_data ((uint32_t) caret);
566
void ScimBridgeAgentPanelClientImpl::update_aux_string (const WideString &str, const AttributeList &attrs)
568
if (prepared_imcontext_id != -1) {
569
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_AUX_STRING);
570
sending_transaction.put_data (utf8_wcstombs (str));
571
sending_transaction.put_data (attrs);
576
void ScimBridgeAgentPanelClientImpl::update_lookup_table (const LookupTable &table)
578
if (prepared_imcontext_id != -1) {
579
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE);
580
sending_transaction.put_data (table);
585
void ScimBridgeAgentPanelClientImpl::register_properties (const PropertyList &properties)
587
if (prepared_imcontext_id != -1) {
588
sending_transaction.put_command (SCIM_TRANS_CMD_REGISTER_PROPERTIES);
589
sending_transaction.put_data (properties);
594
void ScimBridgeAgentPanelClientImpl::update_property (const Property &property)
596
if (prepared_imcontext_id != -1) {
597
sending_transaction.put_command (SCIM_TRANS_CMD_UPDATE_PROPERTY);
598
sending_transaction.put_data (property);
603
void ScimBridgeAgentPanelClientImpl::start_helper (const String &helper_uuid)
605
if (prepared_imcontext_id != -1) {
606
sending_transaction.put_command (SCIM_TRANS_CMD_START_HELPER);
607
sending_transaction.put_data (helper_uuid);
612
void ScimBridgeAgentPanelClientImpl::stop_helper (const String &helper_uuid)
614
if (prepared_imcontext_id != -1) {
615
sending_transaction.put_command (SCIM_TRANS_CMD_STOP_HELPER);
616
sending_transaction.put_data (helper_uuid);
621
void ScimBridgeAgentPanelClientImpl::send_helper_event (const String &helper_uuid, const Transaction &trans)
623
if (prepared_imcontext_id != -1) {
624
sending_transaction.put_command (SCIM_TRANS_CMD_SEND_HELPER_EVENT);
625
sending_transaction.put_data (helper_uuid);
626
sending_transaction.put_data (trans);
631
void ScimBridgeAgentPanelClientImpl::register_input_context (const String &uuid)
633
if (prepared_imcontext_id != -1) {
634
sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_REGISTER_INPUT_CONTEXT);
635
sending_transaction.put_data (uuid);
640
void ScimBridgeAgentPanelClientImpl::remove_input_context ()
642
if (prepared_imcontext_id != -1) sending_transaction.put_command (SCIM_TRANS_CMD_PANEL_REMOVE_INPUT_CONTEXT);
646
Connection ScimBridgeAgentPanelClientImpl::signal_connect_reload_config (ScimBridgeAgentPanelClientSlotVoid *slot)
648
return signal_reload_config.connect (slot);
652
Connection ScimBridgeAgentPanelClientImpl::signal_connect_exit (ScimBridgeAgentPanelClientSlotVoid *slot)
654
return signal_exit.connect (slot);
658
Connection ScimBridgeAgentPanelClientImpl::signal_connect_update_lookup_table_page_size (ScimBridgeAgentPanelClientSlotInt *slot)
660
return signal_update_lookup_table_page_size.connect (slot);
664
Connection ScimBridgeAgentPanelClientImpl::signal_connect_lookup_table_page_up (ScimBridgeAgentPanelClientSlotVoid *slot)
666
return signal_lookup_table_page_up.connect (slot);
670
Connection ScimBridgeAgentPanelClientImpl::signal_connect_lookup_table_page_down (ScimBridgeAgentPanelClientSlotVoid *slot)
672
return signal_lookup_table_page_down.connect (slot);
676
Connection ScimBridgeAgentPanelClientImpl::signal_connect_trigger_property (ScimBridgeAgentPanelClientSlotString *slot)
678
return signal_trigger_property.connect (slot);
682
Connection ScimBridgeAgentPanelClientImpl::signal_connect_process_helper_event (ScimBridgeAgentPanelClientSlotStringStringTransaction *slot)
684
return signal_process_helper_event.connect (slot);
688
Connection ScimBridgeAgentPanelClientImpl::signal_connect_move_preedit_caret (ScimBridgeAgentPanelClientSlotInt *slot)
690
return signal_move_preedit_caret.connect (slot);
694
Connection ScimBridgeAgentPanelClientImpl::signal_connect_select_candidate (ScimBridgeAgentPanelClientSlotInt *slot)
696
return signal_select_candidate.connect (slot);
700
Connection ScimBridgeAgentPanelClientImpl::signal_connect_process_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot)
702
return signal_process_key_event.connect (slot);
706
Connection ScimBridgeAgentPanelClientImpl::signal_connect_commit_string (ScimBridgeAgentPanelClientSlotWideString *slot)
708
return signal_commit_string.connect (slot);
712
Connection ScimBridgeAgentPanelClientImpl::signal_connect_forward_key_event (ScimBridgeAgentPanelClientSlotKeyEvent *slot)
714
return signal_forward_key_event.connect (slot);
718
Connection ScimBridgeAgentPanelClientImpl::signal_connect_request_help (ScimBridgeAgentPanelClientSlotVoid *slot)
720
return signal_request_help.connect (slot);
724
Connection ScimBridgeAgentPanelClientImpl::signal_connect_request_factory_menu (ScimBridgeAgentPanelClientSlotVoid *slot)
726
return signal_request_factory_menu.connect (slot);
730
Connection ScimBridgeAgentPanelClientImpl::signal_connect_change_factory (ScimBridgeAgentPanelClientSlotString *slot)
732
return signal_change_factory.connect (slot);