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

📄 gdkinputgxi.h

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 H
📖 第 1 页 / 共 2 页
字号:
	      ((GdkWindowPrivate *)window)->height);#endif            gdk_input_gxi_set_core_pointer(gdkdev);      return FALSE;    }  else    return return_val;}static voidgdk_input_gxi_update_device (GdkDevicePrivate *gdkdev){  GList *t;  if (gdk_input_is_extension_device (gdkdev->info.deviceid))    {      if (!gdkdev->xdevice)	{	  gdkdev->xdevice = XOpenDevice(gdk_display, gdkdev->info.deviceid);	  gdk_input_gxi_select_notify (gdkdev);	  gdkdev->needs_update = 1;	}      if (gdkdev->needs_update && gdkdev->xdevice)	{	  for (t = gdk_input_windows; t; t = t->next)	    gdk_input_common_select_events (((GdkInputWindow *)t->data)->window,					 gdkdev);	  gdkdev->needs_update = 0;	}    }}static gint gdk_input_gxi_window_none_event (GdkEvent *event, XEvent *xevent){  GdkDevicePrivate *gdkdev =     gdk_input_find_device(((XDeviceButtonEvent *)xevent)->deviceid);  if (!gdkdev) {    return -1;			/* we don't handle it - not an XInput event */  }  if (xevent->type == gdkdev->changenotify_type)    {      if (gdk_input_core_pointer != gdkdev)	{#ifdef DEBUG_SWITCHING	  g_print("ChangeNotify from %d to %d:\n",		  gdk_input_core_pointer->info.deviceid,		  gdkdev->info.deviceid);#endif	  gdk_input_gxi_update_device (gdk_input_core_pointer);	  gdk_input_core_pointer = gdkdev;	}    }		  return FALSE;}static gintgdk_input_gxi_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev){  GdkInputWindow *input_window;  input_window = gdk_input_window_find (window);  g_return_val_if_fail (input_window != NULL, FALSE);  if (!gdkdev->claimed)    {      if (gxid_claim_device(gdk_input_gxid_host, gdk_input_gxid_port,			    gdkdev->info.deviceid,			    GDK_WINDOW_XWINDOW(window), FALSE) !=	  GXID_RETURN_OK)	{	  g_warning("Could not get device (is gxid running?)\n");	  return FALSE;	}      gdkdev->claimed = TRUE;    }  if (gdkdev->xdevice && gdkdev != gdk_input_core_pointer)    gdk_input_common_select_events(window, gdkdev);  else    gdkdev->needs_update = TRUE;    return TRUE;}static gintgdk_input_gxi_disable_window(GdkWindow *window, GdkDevicePrivate *gdkdev){  GdkInputWindow *input_window;  input_window = gdk_input_window_find (window);  g_return_val_if_fail (input_window != NULL, FALSE);  if (gdkdev->claimed)    {      gxid_release_device(gdk_input_gxid_host, gdk_input_gxid_port,			  gdkdev->info.deviceid,			  GDK_WINDOW_XWINDOW(window));      gdkdev->claimed = FALSE;    }  if (gdkdev->xdevice && gdkdev != gdk_input_core_pointer)    gdk_input_common_select_events(window, gdkdev);  else    gdkdev->needs_update = TRUE;    return TRUE;}static gintgdk_input_is_obscured(GdkInputWindow *input_window, gdouble x, gdouble y){  int i;  for (i=0;i<input_window->num_obscuring;i++)    {      GdkRectangle *rect = &input_window->obscuring[i];      if ((x >= rect->x) &&	  (y >= rect->y) &&	  (x < rect->x + rect->width) &&	  (y < rect->y + rect->height))	return TRUE;    }  return FALSE;}/* If this routine needs fixing, the corresponding routine   in gxid.c will need it too. */static Window gdk_input_find_root_child(Display *dpy, Window w){  Window root,parent;  Window *children;  int nchildren;  parent = w;  do     {      w = parent;      XQueryTree(dpy,w,&root,&parent,&children,&nchildren);      if (children) XFree(children);    }   while (parent != root);    return w;}voidgdk_input_compute_obscuring(GdkInputWindow *input_window){  int i;  int x,y,width,height;  int xc,yc,widthc,heightc,border_widthc,depthc;  Window root,parent;  Window *children;  int nchildren;  Window w = GDK_WINDOW_XWINDOW(input_window->window);  Window root_child = gdk_input_find_root_child(gdk_display,w);  gdk_input_get_root_relative_geometry(gdk_display,w,&x,&y,&width,&height);  input_window->root_x = x;  input_window->root_y = y;  XQueryTree(gdk_display,GDK_ROOT_WINDOW(),	     &root,&parent,&children,&nchildren);  if (input_window->obscuring)    g_free(input_window->obscuring);  input_window->obscuring = 0;  input_window->num_obscuring = 0;  for (i=0;i<nchildren;i++)    if (children[i] == root_child)      break;  if (i>=nchildren-1)    {      if (nchildren)	XFree(children);      return;    }  input_window->obscuring = g_new(GdkRectangle,(nchildren-i-1));  for (i=i+1;i<nchildren;i++)    {      int xmin, xmax, ymin, ymax;      XGetGeometry(gdk_display,children[i],&root,&xc,&yc,&widthc,&heightc,		   &border_widthc, &depthc);      xmin = xc>x ? xc : x;      xmax = (xc+widthc)<(x+width) ? xc+widthc : x+width;      ymin = yc>y ? yc : y;      ymax = (yc+heightc)<(y+height) ? yc+heightc : y+height;      if ((xmin < xmax) && (ymin < ymax))	{	  XWindowAttributes attributes;	  XGetWindowAttributes(gdk_display,children[i],&attributes);	  if (attributes.map_state == IsViewable)	    {	      GdkRectangle *rect = &input_window->obscuring[input_window->num_obscuring];	      	      /* we store the whole window, not just the obscuring part */	      rect->x = xc - x;	      rect->y = yc - y;	      rect->width = widthc;	      rect->height = heightc;	      input_window->num_obscuring++;	    }	}    }  if (nchildren)    XFree(children);}static void gdk_input_gxi_get_pointer     (GdkWindow       *window,			       guint32	   deviceid,			       gdouble         *x,			       gdouble         *y,			       gdouble         *pressure,			       gdouble         *xtilt,			       gdouble         *ytilt,			       GdkModifierType *mask){  GdkDevicePrivate *gdkdev;  gdkdev = gdk_input_find_device (deviceid);  g_return_if_fail (gdkdev != NULL);  if (gdkdev == gdk_input_core_pointer)    gdk_input_common_get_pointer (window, GDK_CORE_POINTER, x, y,				  pressure, xtilt, ytilt, mask);  else    gdk_input_common_get_pointer (window, deviceid, x, y,				  pressure, xtilt, ytilt, mask);}static GdkTimeCoord *gdk_input_gxi_motion_events (GdkWindow *window,			     guint32 deviceid,			     guint32 start,			     guint32 stop,			     gint *nevents_return){  GdkDevicePrivate *gdkdev;  gdkdev = gdk_input_find_device (deviceid);  g_return_val_if_fail (gdkdev != NULL, NULL);    if (gdkdev == gdk_input_core_pointer)    return gdk_input_motion_events (window, GDK_CORE_POINTER, start, stop,				    nevents_return);  else    return gdk_input_common_motion_events (window, deviceid, start, stop,					   nevents_return);  }static gint gdk_input_gxi_grab_pointer (GdkWindow *     window,			    gint            owner_events,			    GdkEventMask    event_mask,			    GdkWindow *     confine_to,			    guint32         time){  GList *tmp_list;  GdkInputWindow *input_window;  GdkDevicePrivate *gdkdev;  tmp_list = gdk_input_windows;  while (tmp_list)    {      input_window = (GdkInputWindow *)tmp_list->data;      if (input_window->window == window)	input_window->grabbed = TRUE;      else if (input_window->grabbed)	input_window->grabbed = FALSE;      tmp_list = tmp_list->next;    }  tmp_list = gdk_input_devices;  while (tmp_list)    {      gdkdev = (GdkDevicePrivate *)tmp_list->data;      if (gdkdev->info.deviceid != GDK_CORE_POINTER && 	  gdkdev->xdevice &&	  (gdkdev->button_state != 0))	gdkdev->button_state = 0;            tmp_list = tmp_list->next;    }  return Success;}static void gdk_input_gxi_ungrab_pointer (guint32 time){  GdkInputWindow *input_window;  GList *tmp_list;  tmp_list = gdk_input_windows;  while (tmp_list)    {      input_window = (GdkInputWindow *)tmp_list->data;      if (input_window->grabbed)	input_window->grabbed = FALSE;      tmp_list = tmp_list->next;    }}#endif /* XINPUT_GXI */

⌨️ 快捷键说明

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