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

📄 gdkscreen-x11.c

📁 linux下电话本所依赖的一些图形库
💻 C
📖 第 1 页 / 共 2 页
字号:
 * * Since: 2.2 **/void gdk_screen_get_monitor_geometry (GdkScreen    *screen,				 gint          monitor_num,				 GdkRectangle *dest){  g_return_if_fail (GDK_IS_SCREEN (screen));  g_return_if_fail (monitor_num < GDK_SCREEN_X11 (screen)->num_monitors);  g_return_if_fail (monitor_num >= 0);  *dest = GDK_SCREEN_X11 (screen)->monitors[monitor_num];}/** * gdk_x11_screen_get_xscreen: * @screen: a #GdkScreen. * @returns: an Xlib <type>Screen*</type> * * Returns the screen of a #GdkScreen. * * Since: 2.2 */Screen *gdk_x11_screen_get_xscreen (GdkScreen *screen){  return GDK_SCREEN_X11 (screen)->xscreen;}/** * gdk_x11_screen_get_screen_number: * @screen: a #GdkScreen. * @returns: the position of @screen among the screens of *   its display. * * Returns the index of a #GdkScreen. * * Since: 2.2 */intgdk_x11_screen_get_screen_number (GdkScreen *screen){  return GDK_SCREEN_X11 (screen)->screen_num;}GdkScreen *_gdk_x11_screen_new (GdkDisplay *display,		     gint	 screen_number) {  GdkScreen *screen;  GdkScreenX11 *screen_x11;  GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display);  screen = g_object_new (GDK_TYPE_SCREEN_X11, NULL);  screen_x11 = GDK_SCREEN_X11 (screen);  screen_x11->display = display;  screen_x11->xdisplay = display_x11->xdisplay;  screen_x11->xscreen = ScreenOfDisplay (display_x11->xdisplay, screen_number);  screen_x11->screen_num = screen_number;  screen_x11->xroot_window = RootWindow (display_x11->xdisplay,screen_number);  screen_x11->wmspec_check_window = None;  /* we want this to be always non-null */  screen_x11->window_manager_name = g_strdup ("unknown");    init_xinerama_support (screen);  init_randr_support (screen);    _gdk_visual_init (screen);  _gdk_windowing_window_init (screen);  return screen;}#ifdef HAVE_XINERAMAstatic gbooleancheck_solaris_xinerama (GdkScreen *screen){#ifdef HAVE_SOLARIS_XINERAMA    if (XineramaGetState (GDK_SCREEN_XDISPLAY (screen),			gdk_screen_get_number (screen)))    {      XRectangle monitors[MAXFRAMEBUFFERS];      unsigned char hints[16];      gint result;      GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);      result = XineramaGetInfo (GDK_SCREEN_XDISPLAY (screen),				gdk_screen_get_number (screen),				monitors, hints,				&screen_x11->num_monitors);      /* Yes I know it should be Success but the current implementation           returns the num of monitor*/      if (result == 0)	{	  /* FIXME: We need to trap errors, since XINERAMA isn't always XINERAMA.	   */ 	  g_error ("error while retrieving Xinerama information");	}      else	{	  int i;	  screen_x11->monitors = g_new0 (GdkRectangle, screen_x11->num_monitors);	  	  for (i = 0; i < screen_x11->num_monitors; i++)	    {	      screen_x11->monitors[i].x = monitors[i].x;	      screen_x11->monitors[i].y = monitors[i].y;	      screen_x11->monitors[i].width = monitors[i].width;	      screen_x11->monitors[i].height = monitors[i].height;	    }	  return TRUE;	}    }#endif /* HAVE_SOLARIS_XINERAMA */    return FALSE;}static gbooleancheck_xfree_xinerama (GdkScreen *screen){#ifdef HAVE_XFREE_XINERAMA  if (XineramaIsActive (GDK_SCREEN_XDISPLAY (screen)))    {      GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);      XineramaScreenInfo *monitors = XineramaQueryScreens (GDK_SCREEN_XDISPLAY (screen),							   &screen_x11->num_monitors);      if (screen_x11->num_monitors <= 0)	{	  /* FIXME: We need to trap errors, since XINERAMA isn't always XINERAMA.	   *        I don't think the num_monitors <= 0 check has any validity.	   */ 	  g_error ("error while retrieving Xinerama information");	}      else	{	  int i;	  screen_x11->monitors = g_new0 (GdkRectangle, screen_x11->num_monitors);	  	  for (i = 0; i < screen_x11->num_monitors; i++)	    {	      screen_x11->monitors[i].x = monitors[i].x_org;	      screen_x11->monitors[i].y = monitors[i].y_org;	      screen_x11->monitors[i].width = monitors[i].width;	      screen_x11->monitors[i].height = monitors[i].height;	    }	  XFree (monitors);	  return TRUE;	}    }#endif /* HAVE_XFREE_XINERAMA */    return FALSE;}#endif /* HAVE_XINERAMA */static voidinit_xinerama_support (GdkScreen * screen){  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);#ifdef HAVE_XINERAMA  int opcode, firstevent, firsterror;#endif  if (screen_x11->monitors)    g_free (screen_x11->monitors);  #ifdef HAVE_XINERAMA    if (XQueryExtension (GDK_SCREEN_XDISPLAY (screen), "XINERAMA",		       &opcode, &firstevent, &firsterror))    {      if (check_solaris_xinerama (screen) ||	  check_xfree_xinerama (screen))	return;    }#endif /* HAVE_XINERAMA */  /* No Xinerama   */#ifdef G_ENABLE_DEBUG  if (_gdk_debug_flags & GDK_DEBUG_XINERAMA)    {      /* Fake Xinerama mode by splitting the screen into 4 monitors.       * Also draw a little cross to make the monitor boundaries visible.       */      XSetWindowAttributes atts;      Window win;      gint w, h;      w = WidthOfScreen (screen_x11->xscreen);      h = HeightOfScreen (screen_x11->xscreen);      screen_x11->num_monitors = 4;      screen_x11->monitors = g_new0 (GdkRectangle, 4);      screen_x11->monitors[0].x = 0;      screen_x11->monitors[0].y = 0;      screen_x11->monitors[0].width = w / 2;      screen_x11->monitors[0].height = h / 2;      screen_x11->monitors[1].x = w / 2;      screen_x11->monitors[1].y = 0;      screen_x11->monitors[1].width = w / 2;      screen_x11->monitors[1].height = h / 2;      screen_x11->monitors[2].x = 0;      screen_x11->monitors[2].y = h / 2;      screen_x11->monitors[2].width = w / 2;      screen_x11->monitors[2].height = h / 2;      screen_x11->monitors[3].x = w / 2;      screen_x11->monitors[3].y = h / 2;      screen_x11->monitors[3].width = w / 2;      screen_x11->monitors[3].height = h / 2;      atts.override_redirect = 1;      atts.background_pixel = WhitePixel(GDK_SCREEN_XDISPLAY (screen), 					 screen_x11->screen_num);      win = XCreateWindow(GDK_SCREEN_XDISPLAY (screen), 			  screen_x11->xroot_window, 0, h / 2, w, 1, 0, 			  DefaultDepth(GDK_SCREEN_XDISPLAY (screen), 				       screen_x11->screen_num),			  InputOutput, 			  DefaultVisual(GDK_SCREEN_XDISPLAY (screen), 					screen_x11->screen_num),			  CWOverrideRedirect|CWBackPixel, 			  &atts);      XMapRaised(GDK_SCREEN_XDISPLAY (screen), win);       win = XCreateWindow(GDK_SCREEN_XDISPLAY (screen), 			  screen_x11->xroot_window, w/2 , 0, 1, h, 0, 			  DefaultDepth(GDK_SCREEN_XDISPLAY (screen), 				       screen_x11->screen_num),			  InputOutput, 			  DefaultVisual(GDK_SCREEN_XDISPLAY (screen), 					screen_x11->screen_num),			  CWOverrideRedirect|CWBackPixel, 			  &atts);      XMapRaised(GDK_SCREEN_XDISPLAY (screen), win);     }  else#endif    {       screen_x11->num_monitors = 1;       screen_x11->monitors = g_new0 (GdkRectangle, 1);       screen_x11->monitors[0].x = 0;       screen_x11->monitors[0].y = 0;       screen_x11->monitors[0].width = WidthOfScreen (screen_x11->xscreen);       screen_x11->monitors[0].height = HeightOfScreen (screen_x11->xscreen);    }}static voidinit_randr_support (GdkScreen * screen){  GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);    XSelectInput (GDK_SCREEN_XDISPLAY (screen),		screen_x11->xroot_window,		StructureNotifyMask);}void_gdk_x11_screen_size_changed (GdkScreen *screen,			      XEvent    *event){#ifdef HAVE_RANDR  if (!XRRUpdateConfiguration (event))    return;#else  if (event->type == ConfigureNotify)    {      XConfigureEvent *rcevent = (XConfigureEvent *) event;      Screen	    *xscreen = gdk_x11_screen_get_xscreen (screen);            xscreen->width   = rcevent->width;      xscreen->height  = rcevent->height;    }  else    return;#endif    init_xinerama_support (screen);  g_signal_emit_by_name (screen, "size_changed");}void_gdk_x11_screen_window_manager_changed (GdkScreen *screen){  g_signal_emit (screen, signals[WINDOW_MANAGER_CHANGED], 0);}/** * _gdk_windowing_substitute_screen_number: * @display_name : The name of a display, in the form used by  *                 gdk_display_open (). If %NULL a default value *                 will be used. On X11, this is derived from the DISPLAY *                 environment variable. * @screen_number : The number of a screen within the display *                  referred to by @display_name. * * Modifies a @display_name to make @screen_number the default * screen when the display is opened. * * Return value: a newly allocated string holding the resulting *   display name. Free with g_free(). */gchar * _gdk_windowing_substitute_screen_number (const gchar *display_name,					 gint         screen_number){  GString *str;  gchar   *p;  if (!display_name)    display_name = getenv ("DISPLAY");  if (!display_name)    return NULL;  str = g_string_new (display_name);  p = strrchr (str->str, '.');  if (p && p >	strchr (str->str, ':'))    g_string_truncate (str, p - str->str);  g_string_append_printf (str, ".%d", screen_number);  return g_string_free (str, FALSE);}/** * gdk_screen_make_display_name: * @screen: a #GdkScreen *  * Determines the name to pass to gdk_display_open() to get * a #GdkDisplay with this screen as the default screen. *  * Return value: a newly allocated string, free with g_free() * * Since: 2.2 **/gchar *gdk_screen_make_display_name (GdkScreen *screen){  const gchar *old_display;  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);  old_display = gdk_display_get_name (gdk_screen_get_display (screen));  return _gdk_windowing_substitute_screen_number (old_display, 						  gdk_screen_get_number (screen));}#define __GDK_SCREEN_X11_C__#include "gdkaliasdef.c"

⌨️ 快捷键说明

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