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

📄 gdk.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 3 页
字号:
voidgdk_key_repeat_restore (void){  if (autorepeat)    XAutoRepeatOn (gdk_display);  else    XAutoRepeatOff (gdk_display);}voidgdk_beep (void){  XBell(gdk_display, 100);}/* *-------------------------------------------------------------- * gdk_exit_func * *   This is the "atexit" function that makes sure the *   library gets a chance to cleanup. * * Arguments: * * Results: * * Side effects: *   The library is un-initialized and the program exits. * *-------------------------------------------------------------- */static voidgdk_exit_func (void){  static gboolean in_gdk_exit_func = FALSE;    /* This is to avoid an infinite loop if a program segfaults in     an atexit() handler (and yes, it does happen, especially if a program     has trounced over memory too badly for even g_message to work) */  if (in_gdk_exit_func == TRUE)    return;  in_gdk_exit_func = TRUE;    if (gdk_initialized)    {#ifdef USE_XIM      /* cleanup IC */      gdk_ic_cleanup ();      /* close IM */      gdk_im_close ();#endif      gdk_image_exit ();      gdk_input_exit ();      gdk_key_repeat_restore ();            XCloseDisplay (gdk_display);      gdk_initialized = 0;    }}/* *-------------------------------------------------------------- * gdk_x_error * *   The X error handling routine. * * Arguments: *   "display" is the X display the error orignated from. *   "error" is the XErrorEvent that we are handling. * * Results: *   Either we were expecting some sort of error to occur, *   in which case we set the "gdk_error_code" flag, or this *   error was unexpected, in which case we will print an *   error message and exit. (Since trying to continue will *   most likely simply lead to more errors). * * Side effects: * *-------------------------------------------------------------- */static intgdk_x_error (Display	 *display,	     XErrorEvent *error){  if (error->error_code)    {      if (gdk_error_warnings)	{	  char buf[64];	  	  XGetErrorText (display, error->error_code, buf, 63);#ifdef G_ENABLE_DEBUG	  	  g_error ("%s\n  serial %ld error_code %d request_code %d minor_code %d\n", 		   buf, 		   error->serial, 		   error->error_code, 		   error->request_code,		   error->minor_code);#else /* !G_ENABLE_DEBUG */	  fprintf (stderr, "Gdk-ERROR **: %s\n  serial %ld error_code %d request_code %d minor_code %d\n",		   buf, 		   error->serial, 		   error->error_code, 		   error->request_code,		   error->minor_code);	  exit(1);#endif /* G_ENABLE_DEBUG */	}      gdk_error_code = error->error_code;    }    return 0;}/* *-------------------------------------------------------------- * gdk_x_io_error * *   The X I/O error handling routine. * * Arguments: *   "display" is the X display the error orignated from. * * Results: *   An X I/O error basically means we lost our connection *   to the X server. There is not much we can do to *   continue, so simply print an error message and exit. * * Side effects: * *-------------------------------------------------------------- */static intgdk_x_io_error (Display *display){  /* This is basically modelled after the code in XLib. We need   * an explicit error handler here, so we can disable our atexit()   * which would otherwise cause a nice segfault.   * We fprintf(stderr, instead of g_warning() because g_warning()   * could possibly be redirected to a dialog   */  if (errno == EPIPE)    {      fprintf (stderr, "Gdk-ERROR **: X connection to %s broken (explicit kill or server shutdown).\n", gdk_display ? DisplayString (gdk_display) : gdk_get_display());    }  else    {      fprintf (stderr, "Gdk-ERROR **: Fatal IO error %d (%s) on X server %s.\n",	       errno, g_strerror (errno),	       gdk_display ? DisplayString (gdk_display) : gdk_get_display());    }  /* Disable the atexit shutdown for GDK */  gdk_initialized = 0;    exit(1);}gchar *gdk_get_display (void){  return (gchar *)XDisplayName (gdk_display_name);}/************************************************************* * gdk_error_trap_push: *     Push an error trap. X errors will be trapped until *     the corresponding gdk_error_pop(), which will return *     the error code, if any. *   arguments: *      *   results: *************************************************************/voidgdk_error_trap_push (void){  GSList *node;  GdkErrorTrap *trap;  if (gdk_error_trap_free_list)    {      node = gdk_error_trap_free_list;      gdk_error_trap_free_list = gdk_error_trap_free_list->next;    }  else    {      node = g_slist_alloc ();      node->data = g_new (GdkErrorTrap, 1);    }  node->next = gdk_error_traps;  gdk_error_traps = node;    trap = node->data;  trap->error_code = gdk_error_code;  trap->error_warnings = gdk_error_warnings;  gdk_error_code = 0;  gdk_error_warnings = 0;}/************************************************************* * gdk_error_trap_pop: *     Pop an error trap added with gdk_error_push() *   arguments: *      *   results: *     0, if no error occured, otherwise the error code. *************************************************************/gintgdk_error_trap_pop (void){  GSList *node;  GdkErrorTrap *trap;  gint result;  g_return_val_if_fail (gdk_error_traps != NULL, 0);  node = gdk_error_traps;  gdk_error_traps = gdk_error_traps->next;  node->next = gdk_error_trap_free_list;  gdk_error_trap_free_list = node;    result = gdk_error_code;    trap = node->data;  gdk_error_code = trap->error_code;  gdk_error_warnings = trap->error_warnings;    return result;}gint gdk_send_xevent (Window window, gboolean propagate, glong event_mask,		 XEvent *event_send){  Status result;  gint old_warnings = gdk_error_warnings;    gdk_error_code = 0;    gdk_error_warnings = 0;  result = XSendEvent (gdk_display, window, propagate, event_mask, event_send);  XSync (gdk_display, False);  gdk_error_warnings = old_warnings;    return result && !gdk_error_code;}#ifndef HAVE_XCONVERTCASE/* compatibility function from X11R6.3, since XConvertCase is not * supplied by X11R5. */static voidgdkx_XConvertCase (KeySym symbol,		   KeySym *lower,		   KeySym *upper){  register KeySym sym = symbol;    g_return_if_fail (lower != NULL);  g_return_if_fail (upper != NULL);    *lower = sym;  *upper = sym;    switch (sym >> 8)    {#if	defined (GDK_A) && defined (GDK_Ooblique)    case 0: /* Latin 1 */      if ((sym >= GDK_A) && (sym <= GDK_Z))	*lower += (GDK_a - GDK_A);      else if ((sym >= GDK_a) && (sym <= GDK_z))	*upper -= (GDK_a - GDK_A);      else if ((sym >= GDK_Agrave) && (sym <= GDK_Odiaeresis))	*lower += (GDK_agrave - GDK_Agrave);      else if ((sym >= GDK_agrave) && (sym <= GDK_odiaeresis))	*upper -= (GDK_agrave - GDK_Agrave);      else if ((sym >= GDK_Ooblique) && (sym <= GDK_Thorn))	*lower += (GDK_oslash - GDK_Ooblique);      else if ((sym >= GDK_oslash) && (sym <= GDK_thorn))	*upper -= (GDK_oslash - GDK_Ooblique);      break;#endif	/* LATIN1 */      #if	defined (GDK_Aogonek) && defined (GDK_tcedilla)    case 1: /* Latin 2 */      /* Assume the KeySym is a legal value (ignore discontinuities) */      if (sym == GDK_Aogonek)	*lower = GDK_aogonek;      else if (sym >= GDK_Lstroke && sym <= GDK_Sacute)	*lower += (GDK_lstroke - GDK_Lstroke);      else if (sym >= GDK_Scaron && sym <= GDK_Zacute)	*lower += (GDK_scaron - GDK_Scaron);      else if (sym >= GDK_Zcaron && sym <= GDK_Zabovedot)	*lower += (GDK_zcaron - GDK_Zcaron);      else if (sym == GDK_aogonek)	*upper = GDK_Aogonek;      else if (sym >= GDK_lstroke && sym <= GDK_sacute)	*upper -= (GDK_lstroke - GDK_Lstroke);      else if (sym >= GDK_scaron && sym <= GDK_zacute)	*upper -= (GDK_scaron - GDK_Scaron);      else if (sym >= GDK_zcaron && sym <= GDK_zabovedot)	*upper -= (GDK_zcaron - GDK_Zcaron);      else if (sym >= GDK_Racute && sym <= GDK_Tcedilla)	*lower += (GDK_racute - GDK_Racute);      else if (sym >= GDK_racute && sym <= GDK_tcedilla)	*upper -= (GDK_racute - GDK_Racute);      break;#endif	/* LATIN2 */      #if	defined (GDK_Hstroke) && defined (GDK_Cabovedot)    case 2: /* Latin 3 */      /* Assume the KeySym is a legal value (ignore discontinuities) */      if (sym >= GDK_Hstroke && sym <= GDK_Hcircumflex)	*lower += (GDK_hstroke - GDK_Hstroke);      else if (sym >= GDK_Gbreve && sym <= GDK_Jcircumflex)	*lower += (GDK_gbreve - GDK_Gbreve);      else if (sym >= GDK_hstroke && sym <= GDK_hcircumflex)	*upper -= (GDK_hstroke - GDK_Hstroke);      else if (sym >= GDK_gbreve && sym <= GDK_jcircumflex)	*upper -= (GDK_gbreve - GDK_Gbreve);      else if (sym >= GDK_Cabovedot && sym <= GDK_Scircumflex)	*lower += (GDK_cabovedot - GDK_Cabovedot);      else if (sym >= GDK_cabovedot && sym <= GDK_scircumflex)	*upper -= (GDK_cabovedot - GDK_Cabovedot);      break;#endif	/* LATIN3 */      #if	defined (GDK_Rcedilla) && defined (GDK_Amacron)    case 3: /* Latin 4 */      /* Assume the KeySym is a legal value (ignore discontinuities) */      if (sym >= GDK_Rcedilla && sym <= GDK_Tslash)	*lower += (GDK_rcedilla - GDK_Rcedilla);      else if (sym >= GDK_rcedilla && sym <= GDK_tslash)	*upper -= (GDK_rcedilla - GDK_Rcedilla);      else if (sym == GDK_ENG)	*lower = GDK_eng;      else if (sym == GDK_eng)	*upper = GDK_ENG;      else if (sym >= GDK_Amacron && sym <= GDK_Umacron)	*lower += (GDK_amacron - GDK_Amacron);      else if (sym >= GDK_amacron && sym <= GDK_umacron)	*upper -= (GDK_amacron - GDK_Amacron);      break;#endif	/* LATIN4 */      #if	defined (GDK_Serbian_DJE) && defined (GDK_Cyrillic_yu)    case 6: /* Cyrillic */      /* Assume the KeySym is a legal value (ignore discontinuities) */      if (sym >= GDK_Serbian_DJE && sym <= GDK_Serbian_DZE)	*lower -= (GDK_Serbian_DJE - GDK_Serbian_dje);      else if (sym >= GDK_Serbian_dje && sym <= GDK_Serbian_dze)	*upper += (GDK_Serbian_DJE - GDK_Serbian_dje);      else if (sym >= GDK_Cyrillic_YU && sym <= GDK_Cyrillic_HARDSIGN)	*lower -= (GDK_Cyrillic_YU - GDK_Cyrillic_yu);      else if (sym >= GDK_Cyrillic_yu && sym <= GDK_Cyrillic_hardsign)	*upper += (GDK_Cyrillic_YU - GDK_Cyrillic_yu);      break;#endif	/* CYRILLIC */      #if	defined (GDK_Greek_ALPHAaccent) && defined (GDK_Greek_finalsmallsigma)    case 7: /* Greek */      /* Assume the KeySym is a legal value (ignore discontinuities) */      if (sym >= GDK_Greek_ALPHAaccent && sym <= GDK_Greek_OMEGAaccent)	*lower += (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);      else if (sym >= GDK_Greek_alphaaccent && sym <= GDK_Greek_omegaaccent &&	       sym != GDK_Greek_iotaaccentdieresis &&	       sym != GDK_Greek_upsilonaccentdieresis)	*upper -= (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);      else if (sym >= GDK_Greek_ALPHA && sym <= GDK_Greek_OMEGA)	*lower += (GDK_Greek_alpha - GDK_Greek_ALPHA);      else if (sym >= GDK_Greek_alpha && sym <= GDK_Greek_omega &&	       sym != GDK_Greek_finalsmallsigma)	*upper -= (GDK_Greek_alpha - GDK_Greek_ALPHA);      break;#endif	/* GREEK */    }}#endifgchar*gdk_keyval_name (guint	      keyval){  return XKeysymToString (keyval);}guintgdk_keyval_from_name (const gchar *keyval_name){  g_return_val_if_fail (keyval_name != NULL, 0);    return XStringToKeysym (keyval_name);}guintgdk_keyval_to_upper (guint	  keyval){  if (keyval)    {      KeySym lower_val = 0;      KeySym upper_val = 0;            XConvertCase (keyval, &lower_val, &upper_val);      return upper_val;    }  return 0;}guintgdk_keyval_to_lower (guint	  keyval){  if (keyval)    {      KeySym lower_val = 0;      KeySym upper_val = 0;            XConvertCase (keyval, &lower_val, &upper_val);      return lower_val;    }  return 0;}gbooleangdk_keyval_is_upper (guint	  keyval){  if (keyval)    {      KeySym lower_val = 0;      KeySym upper_val = 0;            XConvertCase (keyval, &lower_val, &upper_val);      return upper_val == keyval;    }  return TRUE;}gbooleangdk_keyval_is_lower (guint	  keyval){  if (keyval)    {      KeySym lower_val = 0;      KeySym upper_val = 0;            XConvertCase (keyval, &lower_val, &upper_val);      return lower_val == keyval;    }  return TRUE;}voidgdk_threads_enter (){  GDK_THREADS_ENTER ();}voidgdk_threads_leave (){  GDK_THREADS_LEAVE ();}

⌨️ 快捷键说明

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