📄 gdkmain-fb.c
字号:
gdk_display_pointer_is_grabbed (GdkDisplay *display){ return _gdk_fb_pointer_grab_window != NULL;}/* *-------------------------------------------------------------- * gdk_keyboard_grab * * Grabs the keyboard to a specific window * * Arguments: * "window" is the window which will receive the grab * "owner_events" specifies whether events will be reported as is, * or relative to "window" * "time" specifies the time * * Results: * * Side effects: * requires a corresponding call to gdk_keyboard_ungrab * *-------------------------------------------------------------- */GdkGrabStatusgdk_keyboard_grab (GdkWindow *window, gint owner_events, guint32 time){ g_return_val_if_fail (window != NULL, 0); g_return_val_if_fail (GDK_IS_WINDOW (window), 0); if (_gdk_fb_pointer_grab_window) gdk_keyboard_ungrab (time); _gdk_fb_keyboard_grab_window = gdk_window_ref (window); _gdk_fb_keyboard_grab_owner_events = owner_events; return GDK_GRAB_SUCCESS;}/* *-------------------------------------------------------------- * gdk_display_keyboard_ungrab * * Releases any keyboard grab * * Arguments: * * Results: * * Side effects: * *-------------------------------------------------------------- */voidgdk_display_keyboard_ungrab (GdkDisplay *display, guint32 time){ if (_gdk_fb_keyboard_grab_window) gdk_window_unref (_gdk_fb_keyboard_grab_window); _gdk_fb_keyboard_grab_window = NULL;}gbooleangdk_pointer_grab_info_libgtk_only (GdkDisplay *display, GdkWindow **grab_window, gboolean *owner_events){ if (_gdk_fb_pointer_grab_window) { if (grab_window) *grab_window = (GdkWindow *)_gdk_fb_pointer_grab_window; if (owner_events) *owner_events = _gdk_fb_pointer_grab_owner_events; return TRUE; } else return FALSE;}gbooleangdk_keyboard_grab_info_libgtk_only (GdkDisplay *display, GdkWindow **grab_window, gboolean *owner_events){ if (_gdk_fb_keyboard_grab_window) { if (grab_window) *grab_window = (GdkWindow *)_gdk_fb_keyboard_grab_window; if (owner_events) *owner_events = _gdk_fb_keyboard_grab_owner_events; return TRUE; } else return FALSE;}/* *-------------------------------------------------------------- * gdk_screen_get_width * * Return the width of the screen. * * Arguments: * * Results: * * Side effects: * *-------------------------------------------------------------- */gintgdk_screen_get_width (GdkScreen *screen){ return gdk_display->fb_width;}/* *-------------------------------------------------------------- * gdk_screen_get_height * * Return the height of the screen. * * Arguments: * * Results: * * Side effects: * *-------------------------------------------------------------- */gintgdk_screen_get_height (GdkScreen *screen){ return gdk_display->fb_height;}/* *-------------------------------------------------------------- * gdk_screen_get_width_mm * * Return the width of the screen in millimeters. * * Arguments: * * Results: * * Side effects: * *-------------------------------------------------------------- */gintgdk_screen_get_width_mm (GdkScreen *screen){ return 0.5 + gdk_screen_width () * (25.4 / 72.);}/* *-------------------------------------------------------------- * gdk_screen_get_height_mm * * Return the height of the screen in millimeters. * * Arguments: * * Results: * * Side effects: * *-------------------------------------------------------------- */gintgdk_screen_get_height_mm (GdkScreen *screen){ return 0.5 + gdk_screen_height () * (25.4 / 72.);}void_gdk_windowing_display_set_sm_client_id (GdkDisplay* display, const gchar* sm_client_id){}extern void keyboard_shutdown(void);void_gdk_windowing_exit (void){ struct sigaction action; /* don't get interrupted while exiting * (cf. gdkrender-fb.c:gdk_shadow_fb_init) */ action.sa_handler = SIG_IGN; sigemptyset (&action.sa_mask); action.sa_flags = 0; gdk_fb_mouse_close (); /*leak g_free (gdk_fb_mouse);*/ gdk_fb_keyboard_close (); /*leak g_free (gdk_fb_keyboard);*/ gdk_fb_display_destroy (gdk_display); gdk_display = NULL;}gchar *gdk_get_display(void){ gchar *s; s = getenv ("GDK_DISPLAY"); if (s==0) s = "/dev/fb0"; return g_strdup (s);}voidgdk_display_beep (GdkDisplay *display){ static int pitch = 600, duration = 100; gulong arg; /* Thank you XFree86 */ arg = ((1193190 / pitch) & 0xffff) | (((unsigned long)duration) << 16); ioctl (gdk_display->tty_fd, KDMKTONE, arg);}/* utils */static const guint type_masks[] = { GDK_SUBSTRUCTURE_MASK, /* GDK_DELETE = 0, */ GDK_STRUCTURE_MASK, /* GDK_DESTROY = 1, */ GDK_EXPOSURE_MASK, /* GDK_EXPOSE = 2, */ GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY = 3, */ GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS = 4, */ GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS = 5, */ GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS = 6, */ GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE = 7, */ GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8, */ GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE = 9, */ GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY = 10, */ GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY = 11, */ GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE = 12, */ GDK_STRUCTURE_MASK, /* GDK_CONFIGURE = 13, */ GDK_VISIBILITY_NOTIFY_MASK, /* GDK_MAP = 14, */ GDK_VISIBILITY_NOTIFY_MASK, /* GDK_UNMAP = 15, */ GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY = 16, */ GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR = 17, */ GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18, */ GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY = 19, */ GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN = 20, */ GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21, */ GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER = 22, */ GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE = 23, */ GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION = 24, */ GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS = 25, */ GDK_ALL_EVENTS_MASK, /* GDK_DROP_START = 26, */ GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED = 27, */ GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT = 28, */ GDK_VISIBILITY_NOTIFY_MASK, /* GDK_VISIBILITY_NOTIFY = 29, */ GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE = 30, */ GDK_SCROLL_MASK /* GDK_SCROLL = 31 */};GdkWindow *gdk_fb_other_event_window (GdkWindow *window, GdkEventType type){ guint32 evmask; GdkWindow *w; w = window; while (w != _gdk_parent_root) { /* Huge hack, so that we don't propagate events to GtkWindow->frame */ if ((w != window) && (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) && (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler"))) break; evmask = GDK_WINDOW_OBJECT(window)->event_mask; if (evmask & type_masks[type]) return w; w = gdk_window_get_parent (w); } return NULL;}GdkWindow *gdk_fb_pointer_event_window (GdkWindow *window, GdkEventType type){ guint evmask; GdkModifierType mask; GdkWindow *w; gdk_fb_mouse_get_info (NULL, NULL, &mask); if (_gdk_fb_pointer_grab_window && !_gdk_fb_pointer_grab_owner_events) { evmask = _gdk_fb_pointer_grab_events; if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK)) { if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) || ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) || ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK))) evmask |= GDK_POINTER_MOTION_MASK; } if (evmask & type_masks[type]) return _gdk_fb_pointer_grab_window; else return NULL; } w = window; while (w != _gdk_parent_root) { /* Huge hack, so that we don't propagate events to GtkWindow->frame */ if ((w != window) && (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) && (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler"))) break; evmask = GDK_WINDOW_OBJECT(window)->event_mask; if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK)) { if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) || ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) || ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK))) evmask |= GDK_POINTER_MOTION_MASK; } if (evmask & type_masks[type]) return w; w = gdk_window_get_parent (w); } if (_gdk_fb_pointer_grab_window && _gdk_fb_pointer_grab_owner_events) { evmask = _gdk_fb_pointer_grab_events; if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK)) { if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) || ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) || ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK))) evmask |= GDK_POINTER_MOTION_MASK; } if (evmask & type_masks[type]) return _gdk_fb_pointer_grab_window; } return NULL;}GdkWindow *gdk_fb_keyboard_event_window (GdkWindow *window, GdkEventType type){ guint32 evmask; GdkWindow *w; if (_gdk_fb_keyboard_grab_window && !_gdk_fb_keyboard_grab_owner_events) { return _gdk_fb_keyboard_grab_window; } w = window; while (w != _gdk_parent_root) { /* Huge hack, so that we don't propagate events to GtkWindow->frame */ if ((w != window) && (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) && (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler"))) break; evmask = GDK_WINDOW_OBJECT(window)->event_mask; if (evmask & type_masks[type]) return w; w = gdk_window_get_parent (w); } if (_gdk_fb_keyboard_grab_window && _gdk_fb_keyboard_grab_owner_events) { return _gdk_fb_keyboard_grab_window; } return NULL;}GdkEvent *gdk_event_make (GdkWindow *window, GdkEventType type, gboolean append_to_queue){ GdkEvent *event = gdk_event_new (type); guint32 the_time; the_time = gdk_fb_get_time (); event->any.window = gdk_window_ref (window); event->any.send_event = FALSE; switch (type) { case GDK_MOTION_NOTIFY: event->motion.time = the_time; event->motion.axes = NULL; break; case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_BUTTON_RELEASE: event->button.time = the_time; event->button.axes = NULL; break; case GDK_KEY_PRESS: case GDK_KEY_RELEASE: event->key.time = the_time; break; case GDK_ENTER_NOTIFY: case GDK_LEAVE_NOTIFY: event->crossing.time = the_time; break; case GDK_PROPERTY_NOTIFY: event->property.time = the_time; break; case GDK_SELECTION_CLEAR: case GDK_SELECTION_REQUEST: case GDK_SELECTION_NOTIFY: event->selection.time = the_time; break; case GDK_PROXIMITY_IN: case GDK_PROXIMITY_OUT: event->proximity.time = the_time; break; case GDK_DRAG_ENTER: case GDK_DRAG_LEAVE: case GDK_DRAG_MOTION: case GDK_DRAG_STATUS: case GDK_DROP_START: case GDK_DROP_FINISHED: event->dnd.time = the_time; break; case GDK_FOCUS_CHANGE: case GDK_CONFIGURE: case GDK_MAP: case GDK_UNMAP: case GDK_CLIENT_EVENT: case GDK_VISIBILITY_NOTIFY: case GDK_NO_EXPOSE: case GDK_SCROLL: case GDK_DELETE: case GDK_DESTROY: case GDK_EXPOSE: default: break; } if (append_to_queue) _gdk_event_queue_append (gdk_display_get_default (), event); return event;}voidgdk_fb_set_rotation (GdkFBAngle angle){ if (angle == _gdk_fb_screen_angle) return; #ifdef ENABLE_SHADOW_FB if (gdk_display) { gdk_shadow_fb_stop_updates (); gdk_fb_cursor_hide (); _gdk_fb_screen_angle = angle; if (angle % 2 == 0) { gdk_display->fb_width = gdk_display->modeinfo.xres; gdk_display->fb_height = gdk_display->modeinfo.yres; } else { gdk_display->fb_width = gdk_display->modeinfo.yres; gdk_display->fb_height = gdk_display->modeinfo.xres; } gdk_display->fb_stride = gdk_display->fb_width * (gdk_display->modeinfo.bits_per_pixel / 8); gdk_fb_recompute_all(); gdk_fb_redraw_all (); gdk_fb_cursor_unhide (); } else _gdk_fb_screen_angle = angle;#else g_warning ("Screen rotation without shadow fb not supported.");#endif}voidgdk_error_trap_push (void){}gintgdk_error_trap_pop (void){ return 0;}voidgdk_notify_startup_complete (void){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -