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); }