欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是服务器系列之:【Ubuntu下sublime中文无法输入的处理方案】,下面是详细的分享!
Ubuntu下sublime中文无法输入的处理方案
#include
#include
typedef GdkSegment GdkRegionBox;
struct _GdkRegion
{
long size;
long numRects;
GdkRegionBox *rects;
GdkRegionBox extents;
};
GtkIMContext *local_context;
voidgdk_region_get_clipbox (const GdkRegion *region , GdkRectangle *rectangle)
{
g_return_if_fail (region !=NULL);
g_return_if_fail (rectangle !=NULL);
rectangle->x=region->extents.x1;
rectangle->y=region->extents.y1;
rectangle->width=region->extents.x2 - region->extents.x1;
rectangle->height=region->extents.y2 - region->extents.y1;
GdkRectangle rect;
rect.x=rectangle->x;
rect.y=rectangle->y;
rect.width=0;
rect.height=rectangle->height;
if(rectangle->width==2 && GTK_IS_IM_CONTEXT(local_context)) {
gtk_im_context_set_cursor_location(local_context, rectangle);
}
}
static GdkFilterReturn event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer im_context)
{
XEvent *xev=(XEvent *)xevent;
if(xev->type==KeyRelease && GTK_IS_IM_CONTEXT(im_context)) {
GdkWindow * win=g_object_get_data(G_OBJECT(im_context),"window");
if(GDK_IS_WINDOW(win))
gtk_im_context_set_client_window(im_context, win);
}
return GDK_FILTER_CONTINUE;
}
void gtk_im_context_set_client_window (GtkIMContext *context , GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass=GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
klass->set_client_window (context, window);
if(!GDK_IS_WINDOW (window))
return;
g_object_set_data(G_OBJECT(context),"window",window);
int width=gdk_window_get_width(window);
int height=gdk_window_get_height(window);
if(width !=0 && height !=0) {
gtk_im_context_focus_in(context);
local_context=context;
}
gdk_window_add_filter (window, event_filter, context);
}
以上就是关于Ubuntu下sublime中文无法输入的处理方案的服务器维护教程分享,更多电脑教程请移步到>>电脑教程频道。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
