📄 gdkmain-x11.c
字号:
while (tmp && tmp != private) tmp = tmp->parent; if (tmp) display_x11->pointer_xgrab_window = NULL; } if (display_x11->keyboard_xgrab_window && serial >= display_x11->keyboard_xgrab_serial) { GdkWindowObject *private = GDK_WINDOW_OBJECT (window); GdkWindowObject *tmp = display_x11->keyboard_xgrab_window; while (tmp && tmp != private) tmp = tmp->parent; if (tmp) display_x11->keyboard_xgrab_window = NULL; }}/** * _gdk_xgrab_check_destroy: * @window: a #GdkWindow * * Checks to see if window is the current grab window, and if * so, clear the current grab window. **/void_gdk_xgrab_check_destroy (GdkWindow *window){ GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (gdk_drawable_get_display (window)); if ((GdkWindowObject *)window == display_x11->pointer_xgrab_window) display_x11->pointer_xgrab_window = NULL; if ((GdkWindowObject *)window == display_x11->keyboard_xgrab_window) display_x11->keyboard_xgrab_window = NULL;}void_gdk_windowing_display_set_sm_client_id (GdkDisplay *display, const gchar *sm_client_id){ GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display); if (display->closed) return; if (sm_client_id && strcmp (sm_client_id, "")) { XChangeProperty (display_x11->xdisplay, display_x11->leader_window, gdk_x11_get_xatom_by_name_for_display (display, "SM_CLIENT_ID"), XA_STRING, 8, PropModeReplace, sm_client_id, strlen (sm_client_id)); } else XDeleteProperty (display_x11->xdisplay, display_x11->leader_window, gdk_x11_get_xatom_by_name_for_display (display, "SM_CLIENT_ID"));}/* Close all open displays */void_gdk_windowing_exit (void){ GSList *tmp_list = _gdk_displays; while (tmp_list) { XCloseDisplay (GDK_DISPLAY_XDISPLAY (tmp_list->data)); tmp_list = tmp_list->next; }}/* *-------------------------------------------------------------- * 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) { gchar buf[64]; gchar *msg; XGetErrorText (display, error->error_code, buf, 63); msg = g_strdup_printf ("The program '%s' received an X Window System error.\n" "This probably reflects a bug in the program.\n" "The error was '%s'.\n" " (Details: serial %ld error_code %d request_code %d minor_code %d)\n" " (Note to programmers: normally, X errors are reported asynchronously;\n" " that is, you will receive the error a while after causing it.\n" " To debug your program, run it with the --sync command line\n" " option to change this behavior. You can then get a meaningful\n" " backtrace from your debugger if you break on the gdk_x_error() function.)", g_get_prgname (), buf, error->serial, error->error_code, error->request_code, error->minor_code); #ifdef G_ENABLE_DEBUG g_error ("%s", msg);#else /* !G_ENABLE_DEBUG */ g_fprintf (stderr, "%s\n", msg); 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) { g_fprintf (stderr, "The application '%s' lost its connection to the display %s;\n" "most likely the X server was shut down or you killed/destroyed\n" "the application.\n", g_get_prgname (), display ? DisplayString (display) : gdk_get_display_arg_name ()); } else { g_fprintf (stderr, "%s: Fatal IO error %d (%s) on X server %s.\n", g_get_prgname (), errno, g_strerror (errno), display ? DisplayString (display) : gdk_get_display_arg_name ()); } exit(1);}/************************************************************* * 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->old_handler = XSetErrorHandler (gdk_x_error); 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; XSetErrorHandler (trap->old_handler); return result;}gchar *gdk_get_display (void){ return g_strdup (gdk_display_get_name (gdk_display_get_default ()));}/** * _gdk_send_xevent: * @display: #GdkDisplay which @window is on * @window: window ID to which to send the event * @propagate: %TRUE if the event should be propagated if the target window * doesn't handle it. * @event_mask: event mask to match against, or 0 to send it to @window * without regard to event masks. * @event_send: #XEvent to send * * Send an event, like XSendEvent(), but trap errors and check * the result. * * Return value: %TRUE if sending the event succeeded. **/gint _gdk_send_xevent (GdkDisplay *display, Window window, gboolean propagate, glong event_mask, XEvent *event_send){ gboolean result; if (display->closed) return FALSE; gdk_error_trap_push (); result = XSendEvent (GDK_DISPLAY_XDISPLAY (display), window, propagate, event_mask, event_send); XSync (GDK_DISPLAY_XDISPLAY (display), False); return result && gdk_error_trap_pop() == Success;}void_gdk_region_get_xrectangles (GdkRegion *region, gint x_offset, gint y_offset, XRectangle **rects, gint *n_rects){ XRectangle *rectangles = g_new (XRectangle, region->numRects); GdkRegionBox *boxes = region->rects; gint i; for (i = 0; i < region->numRects; i++) { rectangles[i].x = CLAMP (boxes[i].x1 + x_offset, G_MINSHORT, G_MAXSHORT); rectangles[i].y = CLAMP (boxes[i].y1 + y_offset, G_MINSHORT, G_MAXSHORT); rectangles[i].width = CLAMP (boxes[i].x2 + x_offset, G_MINSHORT, G_MAXSHORT) - rectangles[i].x; rectangles[i].height = CLAMP (boxes[i].y2 + y_offset, G_MINSHORT, G_MAXSHORT) - rectangles[i].y; } *rects = rectangles; *n_rects = region->numRects;}/** * gdk_x11_grab_server: * * Call gdk_x11_display_grab() on the default display. * To ungrab the server again, use gdk_x11_ungrab_server(). * * gdk_x11_grab_server()/gdk_x11_ungrab_server() calls can be nested. **/ voidgdk_x11_grab_server (void){ gdk_x11_display_grab (gdk_display_get_default ());}/** * gdk_x11_ungrab_server: * * Ungrab the default display after it has been grabbed with * gdk_x11_grab_server(). **/voidgdk_x11_ungrab_server (void){ gdk_x11_display_ungrab (gdk_display_get_default ());}/** * gdk_x11_get_default_screen: * * Gets the default GTK+ screen number. * * Return value: returns the screen number specified by * the --display command line option or the DISPLAY environment * variable when gdk_init() calls XOpenDisplay(). **/gintgdk_x11_get_default_screen (void){ return gdk_screen_get_number (gdk_screen_get_default ());}/** * gdk_x11_get_default_root_xwindow: * * Gets the root window of the default screen * (see gdk_x11_get_default_screen()). * * Return value: an Xlib <type>Window</type>. **/Windowgdk_x11_get_default_root_xwindow (void){ return GDK_SCREEN_XROOTWIN (gdk_screen_get_default ());}/** * gdk_x11_get_default_xdisplay: * * Gets the default GTK+ display. * * Return value: the Xlib <type>Display*</type> for the display * specified in the <option>--display</option> command line option * or the <envar>DISPLAY</envar> environment variable. **/Display *gdk_x11_get_default_xdisplay (void){ return GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());}#define __GDK_MAIN_X11_C__#include "gdkaliasdef.c"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -