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

📄 gdkim.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
	  newattr |= GDK_IC_PREEDIT_AREA_NEEDED;	}    }  if (mask & GDK_IC_PREEDIT_FOREGROUND)    {      pattr->preedit_foreground = attr->preedit_foreground;      newattr |= GDK_IC_PREEDIT_FOREGROUND;    }  if (mask & GDK_IC_PREEDIT_BACKGROUND)    {      pattr->preedit_background = attr->preedit_background;      newattr |= GDK_IC_PREEDIT_BACKGROUND;    }  if (mask & GDK_IC_PREEDIT_PIXMAP)    {      if (attr->preedit_pixmap != NULL &&	  ((GdkPixmapPrivate *)attr->preedit_pixmap)->destroyed)	{	  g_warning ("Preedit pixmap is already destroyed.\n");	  error |= GDK_IC_PREEDIT_PIXMAP;	}      else	{	  if (pattr->preedit_pixmap != attr->preedit_pixmap)	    {	      if (pattr->preedit_pixmap != NULL)		gdk_pixmap_unref (pattr->preedit_pixmap);	      if (attr->preedit_pixmap)		gdk_pixmap_ref (attr->preedit_pixmap);	      pattr->preedit_pixmap = attr->preedit_pixmap;	      newattr |= GDK_IC_PREEDIT_PIXMAP;	    }	}    }  if (mask & GDK_IC_PREEDIT_COLORMAP)    {      if (pattr->preedit_colormap != attr->preedit_colormap)	{	  if (pattr->preedit_colormap != NULL)	    gdk_colormap_unref (pattr->preedit_colormap);	  if (attr->preedit_colormap != NULL)	    gdk_colormap_ref (attr->preedit_colormap);	  pattr->preedit_colormap = attr->preedit_colormap;	  newattr |= GDK_IC_PREEDIT_COLORMAP;	}    }  if (mask & GDK_IC_STATUS_FONTSET)    {      if (attr->status_fontset == NULL ||	  attr->status_fontset->type != GDK_FONT_FONTSET)	{	  g_warning ("gdk_font is NULL or not a fontset.\n");	  error |= GDK_IC_STATUS_FONTSET;	}      else if (pattr->status_fontset != attr->status_fontset)	{	  if (pattr->status_fontset != NULL)	    gdk_font_unref (pattr->status_fontset);	  if (attr->status_fontset != NULL)	    gdk_font_ref (attr->status_fontset);	  pattr->status_fontset = attr->status_fontset;	  newattr |= GDK_IC_STATUS_FONTSET;	}    }  if (mask & GDK_IC_STATUS_AREA)    {      pattr->status_area = attr->status_area;      newattr |= GDK_IC_STATUS_AREA;    }  if (mask & GDK_IC_STATUS_AREA_NEEDED)    {      if (attr->status_area_needed.width == 0 ||	  attr->status_area_needed.height == 0)	{	  g_warning ("width and height of status_area_needed must be non 0.\n");	  error |= GDK_IC_STATUS_AREA_NEEDED;	}      else	{	  pattr->status_area_needed = attr->status_area_needed;	  newattr |= GDK_IC_STATUS_AREA_NEEDED;	}    }  if (mask & GDK_IC_STATUS_FOREGROUND)    {      pattr->status_foreground = attr->status_foreground;      newattr |= GDK_IC_STATUS_FOREGROUND;    }  if (mask & GDK_IC_STATUS_BACKGROUND)    {      pattr->status_background = attr->status_background;      newattr |= GDK_IC_STATUS_BACKGROUND;    }  if (mask & GDK_IC_STATUS_PIXMAP)    {      if (attr->status_pixmap != NULL &&	  ((GdkPixmapPrivate *)attr->status_pixmap)->destroyed)	{	  g_warning ("Preedit pixmap is already destroyed.\n");	  error |= GDK_IC_STATUS_PIXMAP;	}      else	{	  if (pattr->status_pixmap != attr->status_pixmap)	    {	      if (pattr->status_pixmap != NULL)		gdk_pixmap_unref (pattr->status_pixmap);	      if (attr->status_pixmap)		gdk_pixmap_ref (attr->status_pixmap);	      pattr->status_pixmap = attr->status_pixmap;	      newattr |= GDK_IC_STATUS_PIXMAP;	    }	}    }  if (mask & GDK_IC_STATUS_COLORMAP)    {      if (pattr->status_colormap != attr->status_colormap)	{	  if (pattr->status_colormap != NULL)	    gdk_colormap_unref (pattr->status_colormap);	  if (attr->status_colormap != NULL)	    gdk_colormap_ref (attr->status_colormap);	  pattr->status_colormap = attr->status_colormap;	  newattr |= GDK_IC_STATUS_COLORMAP;	}    }  if (private->xic == NULL)    return error;  error |= gdk_ic_real_set_attr (ic, pattr, newattr);  return error;}GdkICAttributesTypegdk_ic_get_attr (GdkIC *ic,    		 GdkICAttr *attr,		 GdkICAttributesType mask){  GdkICPrivate *private;  GdkICAttr *pattr;  GdkICAttributesType known, unknown = 0;  g_return_val_if_fail (ic != NULL, -1);  g_return_val_if_fail (attr != NULL, -1);  private = (GdkICPrivate *) ic;  pattr = private->attr;  known = mask & private->mask;  if (known & GDK_IC_STYLE)    attr->style = pattr->style;  if (known & GDK_IC_CLIENT_WINDOW)    attr->client_window = pattr->client_window;  if (known & GDK_IC_FOCUS_WINDOW)    attr->focus_window = pattr->focus_window;  if (known & GDK_IC_FILTER_EVENTS)    attr->filter_events = pattr->filter_events;  if (known & GDK_IC_LINE_SPACING)    attr->line_spacing = pattr->line_spacing;  if (known & GDK_IC_CURSOR)    attr->cursor = pattr->cursor;  if (known & GDK_IC_PREEDIT_FONTSET)    attr->preedit_fontset = pattr->preedit_fontset;  if (known & GDK_IC_PREEDIT_AREA)    attr->preedit_area = pattr->preedit_area;  if (known & GDK_IC_PREEDIT_AREA_NEEDED)    attr->preedit_area_needed = pattr->preedit_area_needed;  if (known & GDK_IC_PREEDIT_FOREGROUND)    attr->preedit_foreground = pattr->preedit_foreground;  if (known & GDK_IC_PREEDIT_BACKGROUND)    attr->preedit_background = pattr->preedit_background;  if (known & GDK_IC_PREEDIT_PIXMAP)    attr->preedit_pixmap = pattr->preedit_pixmap;  if (known & GDK_IC_PREEDIT_COLORMAP)    attr->preedit_colormap = pattr->preedit_colormap;  if (known & GDK_IC_STATUS_FONTSET)    attr->status_fontset = pattr->status_fontset;  if (known & GDK_IC_STATUS_AREA)    attr->status_area = pattr->status_area;  if (known & GDK_IC_STATUS_AREA_NEEDED)    attr->status_area_needed = pattr->status_area_needed;  if (known & GDK_IC_STATUS_FOREGROUND)    attr->status_foreground = pattr->status_foreground;  if (known & GDK_IC_STATUS_BACKGROUND)    attr->status_background = pattr->status_background;  if (known & GDK_IC_STATUS_PIXMAP)    attr->status_pixmap = pattr->status_pixmap;  if (known & GDK_IC_STATUS_COLORMAP)    attr->status_colormap = pattr->status_colormap;  if (private->xic)    {      unknown = mask & ~(private->mask);      if (unknown & GDK_IC_FOCUS_WINDOW)	attr->focus_window = pattr->client_window;      if (unknown & GDK_IC_FILTER_EVENTS)	{	  gdk_ic_get_events (ic);	  attr->filter_events = pattr->filter_events;	}      if (mask & GDK_IC_SPOT_LOCATION)	{	  XPoint point;	  XVaNestedList *list;	  	  list = XVaCreateNestedList (0, XNSpotLocation, &point, NULL);	  if (XGetICValues (private->xic, XNPreeditAttributes, list, NULL))	    unknown &= ~GDK_IC_SPOT_LOCATION;	  else	    {	      pattr->spot_location.x = point.x;	      pattr->spot_location.y = point.y;	      private->mask |= GDK_IC_SPOT_LOCATION;	      attr->spot_location = pattr->spot_location;	    }	  XFree (list);	}      if (unknown & GDK_IC_PREEDIT_AREA_NEEDED)	{	  XRectangle rect;	  XVaNestedList *list;	  list = XVaCreateNestedList (0, XNAreaNeeded, &rect, NULL);	  if (XGetICValues (private->xic, XNPreeditAttributes, list, NULL))	    unknown &= ~GDK_IC_PREEDIT_AREA_NEEDED;	  else	    {	      pattr->preedit_area_needed.x = rect.x;	      pattr->preedit_area_needed.y = rect.y;	      pattr->preedit_area_needed.width = rect.width;	      pattr->preedit_area_needed.height = rect.height;	      private->mask |= GDK_IC_PREEDIT_AREA_NEEDED;	      attr->preedit_area = pattr->preedit_area;	    }	  XFree (list);	}      if (unknown & GDK_IC_STATUS_AREA_NEEDED)	{	  XRectangle rect;	  XVaNestedList *list;	  list = XVaCreateNestedList (0, XNAreaNeeded, &rect, NULL);	  if (XGetICValues (private->xic, XNStatusAttributes, list, NULL))	    unknown &= ~GDK_IC_STATUS_AREA_NEEDED;	  else	    {	      pattr->status_area_needed.x = rect.x;	      pattr->status_area_needed.y = rect.y;	      pattr->status_area_needed.width = rect.width;	      pattr->status_area_needed.height = rect.height;	      private->mask |= GDK_IC_STATUS_AREA_NEEDED;	      attr->status_area = pattr->status_area;	    }	  XFree (list);	}    }  return mask & ~known & ~unknown;}GdkEventMask gdk_ic_get_events (GdkIC *ic){  GdkEventMask mask;  glong xmask;  glong bit;  GdkICPrivate *private;  gint i;    /*  From gdkwindow.c	*/    g_return_val_if_fail (ic != NULL, 0);    private = (GdkICPrivate *) ic;  if (private->mask & GDK_IC_FILTER_EVENTS)    return private->attr->filter_events;    if (XGetICValues (private->xic, XNFilterEvents, &xmask, NULL) != NULL)    {      GDK_NOTE (XIM, g_warning ("Call to XGetICValues: %s failed", XNFilterEvents));      return 0;    }    mask = 0;  for (i=0, bit=2; i < gdk_nevent_masks; i++, bit <<= 1)    if (xmask & gdk_event_mask_table [i])      {	mask |= bit;	xmask &= ~ gdk_event_mask_table [i];      }    if (xmask)    g_warning ("ic requires events not supported by the application (%#04lx)", xmask);    private->attr->filter_events = mask;  private->mask |= GDK_IC_FILTER_EVENTS;  return mask;}void gdk_ic_cleanup (void){  gint destroyed;    destroyed = 0;  while (xim_ic_list != NULL)    {      gdk_ic_destroy ((GdkIC *) xim_ic_list->data);      destroyed ++;    }#ifdef G_ENABLE_DEBUG  if ((gdk_debug_flags & GDK_DEBUG_XIM) && destroyed > 0)    {      g_warning ("Cleaned up %i IC(s)\n", destroyed);    }#endif /* G_ENABLE_DEBUG */}#else /* !USE_XIM */void gdk_im_begin (GdkIC *ic, GdkWindow* window){}void gdk_im_end (void){}GdkIMStylegdk_im_decide_style (GdkIMStyle supported_style){  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;}GdkIMStylegdk_im_set_best_style (GdkIMStyle style){  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;}gint gdk_im_ready (void){  return FALSE;}GdkIC * gdk_ic_new (GdkICAttr *attr, GdkICAttributesType mask){  return NULL;}void gdk_ic_destroy (GdkIC *ic){}GdkIMStylegdk_ic_get_style (GdkIC *ic){  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;}void gdk_ic_set_values (GdkIC *ic, ...){}void gdk_ic_get_values (GdkIC *ic, ...){}GdkICAttributesType gdk_ic_set_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask){  return 0;}GdkICAttributesType gdk_ic_get_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask){  return 0;}GdkEventMask gdk_ic_get_events (GdkIC *ic){  return 0;}#endif /* USE_XIM *//* * gdk_wcstombs  * * Returns a multi-byte string converted from the specified array * of wide characters. The string is newly allocated. The array of * wide characters must be null-terminated. If the conversion is * failed, it returns NULL. */gchar *gdk_wcstombs (const GdkWChar *src){  gchar *mbstr;  if (gdk_use_mb)    {      XTextProperty tpr;      if (sizeof(wchar_t) != sizeof(GdkWChar))	{	  gint i;	  wchar_t *src_alt;	  for (i=0; src[i]; i++);	  src_alt = g_new (wchar_t, i+1);	  for (; i>=0; i--)	    src_alt[i] = src[i];	  if (XwcTextListToTextProperty (gdk_display, &src_alt, 1, XTextStyle, &tpr)	      != Success)	    {	      g_free (src_alt);	      return NULL;	    }	  g_free (src_alt);	}      else	{	  if (XwcTextListToTextProperty (gdk_display, (wchar_t**)&src, 1,					 XTextStyle, &tpr) != Success)	    {	      return NULL;	    }	}      /*       * We must copy the string into an area allocated by glib, because       * the string 'tpr.value' must be freed by XFree().       */      mbstr = g_strdup(tpr.value);      XFree (tpr.value);    }  else    {      gint length = 0;      gint i;      while (src[length] != 0)	length++;            mbstr = g_new (gchar, length + 1);      for (i=0; i<length+1; i++)	mbstr[i] = src[i];    }  return mbstr;}  /* * gdk_mbstowcs * * Converts the specified string into wide characters, and, returns the * number of wide characters written. The string 'src' must be * null-terminated. If the conversion is failed, it returns -1. */gintgdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max){  if (gdk_use_mb)    {      XTextProperty tpr;      wchar_t **wstrs, *wstr_src;      gint num_wstrs;      gint len_cpy;      if (XmbTextListToTextProperty (gdk_display, (char **)&src, 1, XTextStyle,				     &tpr)	  != Success)	{	  /* NoMem or LocaleNotSupp */	  return -1;	}      if (XwcTextPropertyToTextList (gdk_display, &tpr, &wstrs, &num_wstrs)	  != Success)	{	  /* InvalidChar */	  XFree(tpr.value);	  return -1;	}      XFree(tpr.value);      if (num_wstrs == 0)	return 0;      wstr_src = wstrs[0];      for (len_cpy=0; len_cpy<dest_max && wstr_src[len_cpy]; len_cpy++)	dest[len_cpy] = wstr_src[len_cpy];      XwcFreeStringList (wstrs);      return len_cpy;    }  else    {      gint i;      for (i=0; i<dest_max && src[i]; i++)	dest[i] = src[i];      return i;    }}

⌨️ 快捷键说明

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