📄 gdkinputgxi.h
字号:
((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 + -