Ubuntu下sublime中文无法输入的处理方案
注:
只测试了了fcitx,没有测试ibus
因为不是新手教程,所以安装sublime,fcitx,gcc等等的就不说了
若看不懂请留言
下面为实现过程:
copy下列代码,保存为sublime_fix.c
#include<gtk/gtk.h>
#include<gdk/gdkx.h>
typedefGdkSegmentGdkRegionBox;
struct_GdkRegion
{
longsize;
longnumRects;
GdkRegionBox*rects;
GdkRegionBoxextents;
};
GtkIMContext*local_context;
voidgdk_region_get_clipbox(constGdkRegion*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;
GdkRectanglerect;
rect.x=rectangle->x;
rect.y=rectangle->y;
rect.width=0;
rect.height=rectangle->height;
if(rectangle->width==2&>K_IS_IM_CONTEXT(local_context)){
gtk_im_context_set_cursor_location(local_context,rectangle);
}
}
staticGdkFilterReturnevent_filter(GdkXEvent*xevent,GdkEvent*event,gpointerim_context) { XEvent*xev=(XEvent*)xevent; if(xev->type==KeyRelease&>K_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); } returnGDK_FILTER_CONTINUE; } voidgtk_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); intwidth=gdk_window_get_width(window); intheight=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); }