⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdkim.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
			      XNPreeditAttributes,			      preedit_attr,			      XNStatusAttributes,			      status_attr,			      NULL);  else if (preedit_attr != NULL)    private->xic = XCreateIC (xim_im,			      XNInputStyle,			      attr->style,			      XNClientWindow,			      GDK_WINDOW_XWINDOW(attr->client_window),			      XNPreeditAttributes,			      preedit_attr,			      NULL);  else if (status_attr != NULL)    private->xic = XCreateIC (xim_im,			      XNInputStyle,			      attr->style,			      XNClientWindow,			      GDK_WINDOW_XWINDOW(attr->client_window),			      XNStatusAttributes,			      status_attr,			      NULL);  else    private->xic = XCreateIC (xim_im,			      XNInputStyle,			      attr->style,			      XNClientWindow,			      GDK_WINDOW_XWINDOW(attr->client_window),			      NULL);  if (preedit_attr)    XFree (preedit_attr);  if (status_attr)    XFree (status_attr);  if (private->xic == NULL)    g_warning ("can not create input context with specified input style.");  else    gdk_ic_real_set_attr (ic, private->attr, private->mask & ~mask);}GdkIC *gdk_ic_new (GdkICAttr *attr, GdkICAttributesType mask){  GdkICPrivate *private;  gboolean error = 0;  GdkICAttributesType invalid_mask;  GdkICAttr *pattr;  g_return_val_if_fail (attr != NULL, NULL);  g_return_val_if_fail ((mask & GDK_IC_ALL_REQ) == GDK_IC_ALL_REQ, NULL);  switch (attr->style & GDK_IM_PREEDIT_MASK)    {    case 0:      g_warning ("preedit style is not specified.\n");      error = 1;      break;    case GDK_IM_PREEDIT_AREA:      if ((mask & GDK_IC_PREEDIT_AREA_REQ) != GDK_IC_PREEDIT_AREA_REQ)	error = 4;      break;    case GDK_IM_PREEDIT_POSITION:      if ((mask & GDK_IC_PREEDIT_POSITION_REQ) != GDK_IC_PREEDIT_POSITION_REQ)	error = 4;      break;    }  switch (attr->style & GDK_IM_STATUS_MASK)    {    case 0:      g_warning ("status style is not specified.\n");      error = 2;      break;    case GDK_IM_STATUS_AREA:      if ((mask & GDK_IC_STATUS_AREA_REQ) != GDK_IC_STATUS_AREA_REQ)	error = 8;      break;    }  if (error)    {      if (error & 12)	g_warning ("IC attribute is not enough to required input style.\n");      return NULL;    }  if (attr->client_window == NULL ||      ((GdkWindowPrivate *)attr->client_window)->destroyed)    {      g_warning ("Client_window is null or already destroyed.\n");      return NULL;    }  private = g_new0 (GdkICPrivate, 1);  private->attr = pattr = gdk_ic_attr_new ();  gdk_window_ref (attr->client_window);  pattr->client_window = attr->client_window;  pattr->style = attr->style;  private->mask = GDK_IC_STYLE | GDK_IC_CLIENT_WINDOW;    /* XIC is still not created, so following call only copies attributes */  invalid_mask = gdk_ic_set_attr ((GdkIC *)private, attr, mask & ~GDK_IC_ALL_REQ);  switch (attr->style & GDK_IM_PREEDIT_MASK)    {    case GDK_IM_PREEDIT_AREA:      if (invalid_mask & GDK_IC_PREEDIT_AREA_REQ)	error = TRUE;      break;    case GDK_IM_PREEDIT_POSITION:      if (invalid_mask & GDK_IC_PREEDIT_POSITION_REQ)	error = TRUE;      break;    }  switch (attr->style & GDK_IM_STATUS_MASK)    {    case GDK_IM_STATUS_AREA:      if (invalid_mask & GDK_IC_STATUS_AREA_REQ)	error = TRUE;      break;    }  if (error == TRUE)    {      g_warning ("Essential attributes for required style are invalid.\n");      gdk_ic_destroy ((GdkIC *)private);      return NULL;    }  if (gdk_im_ready ())    gdk_ic_real_new ((GdkIC *)private);  xim_ic_list = g_list_append (xim_ic_list, private);    return (GdkIC *)private;}void gdk_ic_destroy (GdkIC *ic){  GdkICPrivate *private;    g_return_if_fail (ic != NULL);    private = (GdkICPrivate *) ic;    if (gdk_xim_ic == private)    gdk_im_end ();    GDK_NOTE (XIM, g_message ("ic_destroy %p\n", private->xic));  if (private->xic != NULL)    XDestroyIC (private->xic);  if (private->mask & GDK_IC_CLIENT_WINDOW)    gdk_window_unref (private->attr->client_window);  if (private->mask & GDK_IC_FOCUS_WINDOW)    gdk_window_unref (private->attr->focus_window);  if (private->mask & GDK_IC_PREEDIT_FONTSET)    gdk_font_unref (private->attr->preedit_fontset);  if (private->mask & GDK_IC_PREEDIT_PIXMAP)    gdk_pixmap_unref (private->attr->preedit_pixmap);  if (private->mask & GDK_IC_PREEDIT_COLORMAP)    gdk_colormap_unref (private->attr->preedit_colormap);  if (private->mask & GDK_IC_STATUS_FONTSET)    gdk_font_unref (private->attr->status_fontset);  if (private->mask & GDK_IC_STATUS_PIXMAP)    gdk_pixmap_unref (private->attr->status_pixmap);  if (private->mask & GDK_IC_STATUS_COLORMAP)    gdk_colormap_unref (private->attr->status_colormap);  xim_ic_list = g_list_remove (xim_ic_list, private);  gdk_ic_attr_destroy (private->attr);  g_free (private);}GdkIMStylegdk_ic_get_style (GdkIC *ic){  GdkICPrivate *private;    g_return_val_if_fail (ic != NULL, 0);    private = (GdkICPrivate *) ic;    return private->attr->style;}/* * for keeping binary compatibility if member of ic attributes is added. */GdkICAttr *gdk_ic_attr_new (void){  return g_new0 (GdkICAttr, 1);}voidgdk_ic_attr_destroy (GdkICAttr *attr){  g_return_if_fail (attr != NULL);  g_free (attr);}static GdkICAttributesTypegdk_ic_real_set_attr (GdkIC *ic,    		      GdkICAttr *attr,		      GdkICAttributesType mask){  GdkICPrivate *private = (GdkICPrivate *)ic;  XIC xic = private->xic;  GdkICAttributesType error = 0;  GdkImArg arg[2] = {{NULL, NULL}, {NULL, NULL}};  if (mask & GDK_IC_FOCUS_WINDOW)    {      if (XSetICValues (xic, XNFocusWindow,			GDK_WINDOW_XWINDOW(attr->focus_window), NULL) != NULL)	error |= GDK_IC_FOCUS_WINDOW;    }  if (mask & GDK_IC_SPOT_LOCATION)    {      XPoint point;      point.x = attr->spot_location.x;      point.y = attr->spot_location.y;      arg->name = XNSpotLocation;      arg->value = (gpointer) &point;      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_SPOT_LOCATION;    }  if (mask & GDK_IC_LINE_SPACING)    {      arg->name = XNLineSpace;      arg->value = GINT_TO_POINTER( attr->line_spacing );      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_LINE_SPACING;    }  if (mask & GDK_IC_CURSOR)    {      GdkCursorPrivate *cursor = (GdkCursorPrivate *) attr->cursor;      if (XSetICValues (xic, XNCursor, cursor->xcursor, NULL))	error |= GDK_IC_CURSOR;    }  if (mask & GDK_IC_PREEDIT_FONTSET)    {      arg->name = XNFontSet;      arg->value = (gpointer) GDK_FONT_XFONT(attr->preedit_fontset);      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_FONTSET;    }  if (mask & GDK_IC_PREEDIT_AREA)    {      XRectangle rect;      rect.x = attr->preedit_area.x;      rect.y = attr->preedit_area.y;      rect.width = attr->preedit_area.width;      rect.height = attr->preedit_area.height;      arg->name = XNArea;      arg->value = (gpointer) ▭      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_AREA;    }  if (mask & GDK_IC_PREEDIT_AREA_NEEDED)    {      XRectangle rect;      rect.x = attr->preedit_area_needed.x;      rect.y = attr->preedit_area_needed.y;      rect.width = attr->preedit_area_needed.width;      rect.height = attr->preedit_area_needed.height;      arg->name = XNArea;      arg->value = (gpointer) ▭      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_AREA_NEEDED;      else	private->mask &= ~GDK_IC_PREEDIT_AREA_NEEDED;    }  if (mask & GDK_IC_PREEDIT_FOREGROUND)    {      arg->name = XNForeground;      arg->value = (gpointer) attr->preedit_foreground.pixel;      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_FOREGROUND;    }  if (mask & GDK_IC_PREEDIT_BACKGROUND)    {      arg->name = XNBackground;      arg->value = (gpointer) attr->preedit_background.pixel;      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_BACKGROUND;    }  if (mask & GDK_IC_PREEDIT_PIXMAP)    {      arg->name = XNBackgroundPixmap;      arg->value = (gpointer) GDK_WINDOW_XWINDOW(attr->preedit_pixmap);      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_PIXMAP;    }  if (mask & GDK_IC_PREEDIT_COLORMAP)    {      arg->name = XNColormap;      arg->value = (gpointer) GDK_COLORMAP_XCOLORMAP(attr->preedit_colormap);      if (XSetICValues (xic, XNPreeditAttributes, arg, NULL))	error |= GDK_IC_PREEDIT_COLORMAP;    }  if (mask & GDK_IC_STATUS_FONTSET)    {      arg->name = XNFontSet;      arg->value = (gpointer) GDK_FONT_XFONT(attr->status_fontset);      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_FONTSET;    }  if (mask & GDK_IC_STATUS_AREA)    {      XRectangle rect;      rect.x = attr->status_area.x;      rect.y = attr->status_area.y;      rect.width = attr->status_area.width;      rect.height = attr->status_area.height;      arg->name = XNArea;      arg->value = (gpointer) ▭      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_AREA;    }  if (mask & GDK_IC_STATUS_AREA_NEEDED)    {      XRectangle rect;      rect.x = attr->status_area_needed.x;      rect.y = attr->status_area_needed.y;      rect.width = attr->status_area_needed.width;      rect.height = attr->status_area_needed.height;      arg->name = XNArea;      arg->value = (gpointer) ▭      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_AREA_NEEDED;      else	private->mask &= ~GDK_IC_STATUS_AREA_NEEDED;    }  if (mask & GDK_IC_STATUS_FOREGROUND)    {      arg->name = XNForeground;      arg->value = (gpointer) attr->status_foreground.pixel;      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_FOREGROUND;    }  if (mask & GDK_IC_STATUS_BACKGROUND)    {      arg->name = XNBackground;      arg->value = (gpointer) attr->status_background.pixel;      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_BACKGROUND;    }  if (mask & GDK_IC_STATUS_PIXMAP)    {      arg->name = XNBackgroundPixmap;      arg->value = (gpointer) GDK_WINDOW_XWINDOW(attr->status_pixmap);      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_PIXMAP;    }  if (mask & GDK_IC_STATUS_COLORMAP)    {      arg->name = XNColormap;      arg->value = (gpointer) GDK_COLORMAP_XCOLORMAP(attr->status_colormap);      if (XSetICValues (xic, XNStatusAttributes, arg, NULL))	error |= GDK_IC_STATUS_COLORMAP;    }  return error;}GdkICAttributesTypegdk_ic_set_attr (GdkIC *ic,    		 GdkICAttr *attr,		 GdkICAttributesType mask){  GdkICPrivate *private;  GdkICAttr *pattr;  GdkICAttributesType error = 0;  GdkICAttributesType newattr = 0;  g_return_val_if_fail (ic != NULL, 0);  g_return_val_if_fail (attr != NULL, 0);  private = (GdkICPrivate *) ic;  pattr = private->attr;  /* Check and copy new attributes */  if (mask & GDK_IC_STYLE)    {      g_warning ("input style can be specified only when creating new ic.\n");      error |= GDK_IC_STYLE;    }  if (mask & GDK_IC_FILTER_EVENTS)    {      g_warning ("filter events is read only attributes.\n");      error |= GDK_IC_FILTER_EVENTS;    }  if (mask & GDK_IC_CLIENT_WINDOW)    {      g_warning ("client window can be specified only when creating new ic.\n");      error |= GDK_IC_CLIENT_WINDOW;    }  if (mask & GDK_IC_FOCUS_WINDOW)    {      if (attr->focus_window == NULL)	{	  g_warning ("specified focus_window is invalid.\n");	  error |= GDK_IC_FOCUS_WINDOW;	}      else if (pattr->focus_window != attr->focus_window)	{	  if (pattr->focus_window != NULL)	    gdk_window_unref (pattr->focus_window);	  if (attr->focus_window != NULL)	    gdk_window_ref (attr->focus_window);	  pattr->focus_window = attr->focus_window;	  newattr |= GDK_IC_FOCUS_WINDOW;	}    }  if (mask & GDK_IC_SPOT_LOCATION)    {      pattr->spot_location = attr->spot_location;      newattr |= GDK_IC_SPOT_LOCATION;    }  if (mask & GDK_IC_LINE_SPACING)    {      pattr->line_spacing = attr->line_spacing;      newattr |= GDK_IC_LINE_SPACING;    }  if (mask & GDK_IC_CURSOR)    {      pattr->cursor = attr->cursor;      newattr |= GDK_IC_CURSOR;    }  if (mask & GDK_IC_PREEDIT_FONTSET)    {      if (attr->preedit_fontset == NULL ||	  attr->preedit_fontset->type != GDK_FONT_FONTSET)	{	  g_warning ("gdk_font is NULL or not a fontset.\n");	  error |= GDK_IC_PREEDIT_FONTSET;	}      else if (pattr->preedit_fontset != attr->preedit_fontset)	{	  if (pattr->preedit_fontset != NULL)	    gdk_font_unref (pattr->preedit_fontset);	  if (attr->preedit_fontset != NULL)	    gdk_font_ref (attr->preedit_fontset);	  pattr->preedit_fontset = attr->preedit_fontset;	  newattr |= GDK_IC_PREEDIT_FONTSET;	}    }  if (mask & GDK_IC_PREEDIT_AREA)    {      pattr->preedit_area = attr->preedit_area;      newattr |= GDK_IC_PREEDIT_AREA;    }  if (mask & GDK_IC_PREEDIT_AREA_NEEDED)    {      if (attr->preedit_area_needed.width == 0 ||	  attr->preedit_area_needed.height == 0)	{	  g_warning ("width and height of preedit_area_needed must be non 0.\n");	  error |= GDK_IC_PREEDIT_AREA_NEEDED;	}      else	{	  pattr->preedit_area_needed = attr->preedit_area_needed;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -