#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <glib.h>
#include <gtk/gtk.h>
#include "config.h"
#include "erkeyb-client.h"
#include "logging.h"
Go to the source code of this file.
Data Structures | |
struct | _keyb_client |
Defines | |
#define | HOST "127.0.0.1" |
#define | PORT "60666" |
Typedefs | |
typedef struct _keyb_client | keyb_client |
Functions | |
int | erkeyb_client_init (void) |
void | erkeyb_client_show (void) |
void | erkeyb_client_hide (void) |
void | erkeyb_client_term (void) |
Variables | |
static keyb_client | g_keyb_client |
#define HOST "127.0.0.1" |
Copyright (C) 2009 iRex Technologies B.V. All rights reserved.
Definition at line 55 of file erkeyb-client.c.
Referenced by erkeyb_client_init().
#define PORT "60666" |
Definition at line 56 of file erkeyb-client.c.
Referenced by erkeyb_client_init().
typedef struct _keyb_client keyb_client |
Definition at line 62 of file erkeyb-client.c.
void erkeyb_client_hide | ( | void | ) |
Definition at line 161 of file erkeyb-client.c.
References _keyb_client::chan, DBG_ENTRY, DBG_EXIT, erkeyb_client_init(), and _keyb_client::is_closed.
Referenced by cb_sys_set_keyboard(), ergtk_im_context_erkeyb_focus_out(), ergtk_im_context_erkeyb_set_client_window(), go_back_cb(), go_emall_cb(), go_forward_cb(), load_started_cb(), and on_process_exit().
00162 { 00163 DBG_ENTRY; 00164 00165 if ( g_keyb_client.is_closed == TRUE ) 00166 { 00167 erkeyb_client_init(); 00168 } 00169 00170 g_io_channel_write_chars(g_keyb_client.chan, "keyboard-hide\n", -1, NULL, NULL ); 00171 g_io_channel_flush(g_keyb_client.chan, NULL ); 00172 00173 DBG_EXIT; 00174 }
int erkeyb_client_init | ( | void | ) |
Copyright (C) 2009 iRex Technologies B.V. All rights reserved.
Definition at line 87 of file erkeyb-client.c.
References _keyb_client::chan, DBG_ASSERT, DBG_ENTRY, DBG_EXIT, ERR, _keyb_client::hints, HOST, _keyb_client::is_closed, PORT, and _keyb_client::sfd.
Referenced by ergtk_im_context_erkeyb_init(), erkeyb_client_hide(), erkeyb_client_show(), and ipc_set_services().
00088 { 00089 DBG_ENTRY; 00090 struct addrinfo *result, *rp; 00091 int s; 00092 00093 /* Obtain address(es) matching host/port */ 00094 00095 memset(&g_keyb_client, 0x0, sizeof(keyb_client)); 00096 memset(&g_keyb_client.hints, 0x0, sizeof(struct addrinfo)); 00097 00098 g_keyb_client.hints.ai_family = AF_INET; /* Allow IPv4 */ 00099 g_keyb_client.hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ 00100 g_keyb_client.hints.ai_flags = 0; 00101 g_keyb_client.hints.ai_protocol = 0; /* Any protocol */ 00102 00103 s = getaddrinfo(HOST, PORT, &g_keyb_client.hints, &result); 00104 00105 if (s != 0) { 00106 ERR("getaddrinfo: %s\n", gai_strerror(s)); 00107 return 1; 00108 } 00109 00110 for (rp = result; rp != NULL; rp = rp->ai_next) { 00111 g_keyb_client.sfd = socket(rp->ai_family, rp->ai_socktype, 00112 rp->ai_protocol); 00113 if (g_keyb_client.sfd == -1) 00114 continue; 00115 00116 if (connect(g_keyb_client.sfd, rp->ai_addr, rp->ai_addrlen) != -1) 00117 break; /* Success */ 00118 00119 close(g_keyb_client.sfd); 00120 } 00121 00122 if (rp == NULL) { /* No address succeeded */ 00123 ERR("Could not connect\n"); 00124 freeaddrinfo(result); /* No longer needed */ 00125 return 1; 00126 } 00127 00128 freeaddrinfo(result); /* No longer needed */ 00129 00130 00131 /* we have a connection */ 00132 /* so we can setup a GIOChannel */ 00133 00134 g_keyb_client.chan = NULL ; 00135 g_keyb_client.chan = g_io_channel_unix_new( g_keyb_client.sfd); 00136 DBG_ASSERT( g_keyb_client.chan != NULL ) ; 00137 00138 g_io_channel_set_encoding(g_keyb_client.chan, NULL, NULL ); 00139 00140 g_keyb_client.is_closed = FALSE; 00141 00142 DBG_EXIT; 00143 return 0; 00144 }
void erkeyb_client_show | ( | void | ) |
Definition at line 146 of file erkeyb-client.c.
References _keyb_client::chan, DBG_ENTRY, DBG_EXIT, erkeyb_client_init(), and _keyb_client::is_closed.
Referenced by cb_sys_set_keyboard(), and ergtk_im_context_erkeyb_focus_in().
00147 { 00148 DBG_ENTRY; 00149 00150 if ( g_keyb_client.is_closed == TRUE ) 00151 { 00152 erkeyb_client_init(); 00153 } 00154 00155 g_io_channel_write_chars(g_keyb_client.chan, "keyboard-show\n", -1, NULL, NULL ); 00156 g_io_channel_flush(g_keyb_client.chan, NULL ); 00157 00158 DBG_EXIT; 00159 }
void erkeyb_client_term | ( | void | ) |
Definition at line 176 of file erkeyb-client.c.
References _keyb_client::chan, DBG_ENTRY, DBG_EXIT, _keyb_client::is_closed, and _keyb_client::sfd.
Referenced by destroy_cb(), ergtk_im_context_erkeyb_finalize(), and ipc_unset_services().
00177 { 00178 DBG_ENTRY; 00179 00180 if ( g_keyb_client.is_closed == FALSE ) 00181 { 00182 g_io_channel_write_chars(g_keyb_client.chan, "keyboard-hide\n", -1, NULL, NULL ); 00183 g_io_channel_flush(g_keyb_client.chan, NULL ); 00184 00185 g_io_channel_shutdown(g_keyb_client.chan, FALSE, NULL); 00186 g_io_channel_unref(g_keyb_client.chan); 00187 g_keyb_client.chan = NULL ; 00188 close(g_keyb_client.sfd); 00189 g_keyb_client.sfd = -1; 00190 g_keyb_client.is_closed = TRUE; 00191 } 00192 00193 DBG_EXIT; 00194 }
keyb_client g_keyb_client [static] |
Definition at line 75 of file erkeyb-client.c.