📄 gtk+-2.4.14-xynth.diff
字号:
- return 0;-}--static int-gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,- char *modename)-{- GScanner *scanner;- char *filename;- gint result;- int fd, i;- int retval;-- retval = 0;- - filename = "/etc/fb.modes";- - fd = open (filename, O_RDONLY);- if (fd < 0)- {- g_warning ("Cannot read %s", filename);- return retval;- }- - scanner = g_scanner_new ((GScannerConfig *) &fb_modes_scanner_config);- scanner->input_name = filename;-- for (i = 0; i < sizeof(fb_modes_keywords)/sizeof(fb_modes_keywords[0]); i++)- g_scanner_scope_add_symbol (scanner, 0, fb_modes_keywords[i], GINT_TO_POINTER (i));-- g_scanner_input_file (scanner, fd);- - while (1) {- if (g_scanner_peek_next_token (scanner) == G_TOKEN_EOF) {- break;- } - result = fb_modes_parse_mode (scanner, modeinfo, modename);- - if (result < 0) {- g_warning ("parse error in %s at line %d", filename, scanner->line);- break;- }- if (result > 0)- {- retval = 1;- break;- }- }- - g_scanner_destroy (scanner);- - close (fd);- - return retval;-}- --static int-gdk_fb_set_mode (GdkFBDisplay *display)-{- char *env, *end;- int depth, height, width;- gboolean changed;- - if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)- return -1;-- display->orig_modeinfo = display->modeinfo;-- changed = FALSE;- - env = getenv ("GDK_DISPLAY_MODE");- if (env)- {- if (gdk_fb_setup_mode_from_name (&display->modeinfo, env))- changed = TRUE;- else- g_warning ("Couldn't find mode named '%s'", env);- }-- env = getenv ("GDK_DISPLAY_DEPTH");- if (env)- {- depth = strtol (env, &end, 10);- if (env != end)- {- changed = TRUE;- display->modeinfo.bits_per_pixel = depth;- }- }- - env = getenv ("GDK_DISPLAY_WIDTH");- if (env)- {- width = strtol (env, &end, 10);- if (env != end)- {- changed = TRUE;- display->modeinfo.xres = width;- display->modeinfo.xres_virtual = width;- }- }- - env = getenv ("GDK_DISPLAY_HEIGHT");- if (env)- {- height = strtol (env, &end, 10);- if (env != end)- {- changed = TRUE;- display->modeinfo.yres = height;- display->modeinfo.yres_virtual = height;- }- }-- if (changed &&- (ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0))- {- g_warning ("Couldn't set specified mode");- return -1;- }- - /* ask for info back to make sure of what we got */- if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)- {- g_warning ("Error getting var screen info");- return -1;- }- - if (ioctl (display->fb_fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)- {- g_warning ("Error getting fixed screen info");- return -1;- }- return 0;-}--#ifdef ENABLE_FB_MANAGER-static void-gdk_fb_switch_from (void)-{- g_print ("Switch from\n");- gdk_shadow_fb_stop_updates ();- gdk_fb_mouse_close ();- gdk_fb_keyboard_close ();-}--static void-gdk_fb_switch_to (void)-{- g_print ("switch_to\n");- gdk_shadow_fb_update (0, 0, - gdk_display->fb_width, - gdk_display->fb_height);-- if (!gdk_fb_keyboard_open ())- g_warning ("Failed to re-initialize keyboard");- - if (!gdk_fb_mouse_open ())- g_warning ("Failed to re-initialize mouse");--}---static gboolean-gdk_fb_manager_callback (GIOChannel *gioc,- GIOCondition cond,- gpointer data)-{- struct FBManagerMessage msg;- GdkFBDisplay *display;- int res;-- display = data;-- res = recv (display->manager_fd, &msg, sizeof (msg), 0);-- if (res==0)- {- g_source_remove (gdk_display->manager_tag);- /*g_io_channel_unref (kb->io);*/- close (gdk_display->manager_fd);-- }-- if (res != sizeof (msg))- {- g_warning ("Got wrong size message");- return TRUE;- }- - switch (msg.msg_type)- {- case FB_MANAGER_SWITCH_FROM:- g_print ("Got switch from message\n");- display->manager_blocked = TRUE;- gdk_fb_switch_from ();- msg.msg_type = FB_MANAGER_ACK;- send (display->manager_fd, &msg, sizeof (msg), 0);- break;- case FB_MANAGER_SWITCH_TO:- g_print ("Got switch to message\n");- display->manager_blocked = FALSE;- gdk_fb_switch_to ();- break;- default:- g_warning ("Got unknown message");- }- return TRUE;-}--#endif /* ENABLE_FB_MANAGER */--static void-gdk_fb_manager_connect (GdkFBDisplay *display)-{-#ifdef ENABLE_FB_MANAGER- int fd;- struct sockaddr_un addr;- struct msghdr msg = {0};- struct cmsghdr *cmsg;- struct ucred credentials;- struct FBManagerMessage init_msg;- struct iovec iov;- char buf[CMSG_SPACE (sizeof (credentials))]; /* ancillary data buffer */- int *fdptr;- int res;-- display->manager_blocked = FALSE;- display->manager_fd = -1;-- fd = socket (PF_UNIX, SOCK_STREAM, 0);- - g_print ("socket: %d\n", fd);-- if (fd < 0)- return;-- addr.sun_family = AF_UNIX;- strcpy (addr.sun_path, "/tmp/.fb.manager");-- if (connect(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0) - {- g_print ("connect failed\n");- close (fd);- return;- }- - credentials.pid = getpid ();- credentials.uid = geteuid ();- credentials.gid = getegid ();-- init_msg.msg_type = FB_MANAGER_NEW_CLIENT;- iov.iov_base = &init_msg;- iov.iov_len = sizeof (init_msg);-- msg.msg_name = NULL;- msg.msg_namelen = 0;- msg.msg_iov = &iov;- msg.msg_iovlen = 1;- msg.msg_control = buf;- msg.msg_controllen = sizeof buf;- cmsg = CMSG_FIRSTHDR(&msg);- cmsg->cmsg_level = SOL_SOCKET;- cmsg->cmsg_type = SCM_CREDENTIALS;- cmsg->cmsg_len = CMSG_LEN (sizeof (credentials));- /* Initialize the payload: */- fdptr = (int *)CMSG_DATA (cmsg);- memcpy (fdptr, &credentials, sizeof (credentials));- /* Sum of the length of all control messages in the buffer: */- msg.msg_controllen = cmsg->cmsg_len;-- res = sendmsg (fd, &msg, 0);-- display->manager_fd = fd;- display->manager_blocked = TRUE;-- display->manager_tag = g_io_add_watch (g_io_channel_unix_new (fd),- G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,- gdk_fb_manager_callback,- display);-- init_msg.msg_type = FB_MANAGER_REQUEST_SWITCH_TO_PID;- init_msg.data = getpid ();-- /* Request a switch-to */- send (fd, &init_msg, sizeof (init_msg), 0);-#endif-}--static void-gdk_fb_switch (int sig)-{- if (sig == SIGUSR1)- {- ioctl (gdk_display->tty_fd, VT_RELDISP, 1);- _gdk_fb_is_active_vt = FALSE;- gdk_shadow_fb_stop_updates ();- gdk_fb_mouse_close ();- gdk_fb_keyboard_close ();- }- else- {- GdkColormap *cmap;- ioctl (gdk_display->tty_fd, VT_RELDISP, VT_ACKACQ);- _gdk_fb_is_active_vt = TRUE;-- /* XXX: is it dangerous to put all this stuff in a signal handler? */- cmap = gdk_screen_get_default_colormap (_gdk_screen);- gdk_colormap_change (cmap, cmap->size);-- gdk_shadow_fb_update (0, 0,- gdk_display->fb_width,- gdk_display->fb_height);-- if (!gdk_fb_keyboard_open ())- g_warning ("Failed to re-initialize keyboard");-- if (!gdk_fb_mouse_open ())- g_warning ("Failed to re-initialize mouse");-- gdk_fb_redraw_all ();- }-}--static GdkFBDisplay *-gdk_fb_display_new ()+static GdkFBDisplay * gdk_fb_display_new () {- GdkFBDisplay *display;- gchar *fb_filename;- struct vt_stat vs;- struct vt_mode vtm;- int vt, n;- gchar *s, *send;- char buf[32];-- display = g_new0 (GdkFBDisplay, 1);-- display->console_fd = open ("/dev/console", O_RDWR);- if (display->console_fd < 0)- {- g_warning ("Can't open /dev/console: %s", strerror (errno));- g_free (display);- return NULL;- }- - ioctl (display->console_fd, VT_GETSTATE, &vs);- display->start_vt = vs.v_active;-- vt = display->start_vt;- s = getenv("GDK_VT");- if (s)- {- if (g_ascii_strcasecmp ("new", s)==0)- {- n = ioctl (display->console_fd, VT_OPENQRY, &vt);- if (n < 0 || vt == -1)- g_error("Cannot allocate new VT");- }- else- {- vt = strtol (s, &send, 10);- if (s==send)- {- g_warning ("Cannot parse GDK_VT");- vt = display->start_vt;- }- }- - }-- display->vt = vt;- - /* Switch to the new VT */- if (vt != display->start_vt)- {- ioctl (display->console_fd, VT_ACTIVATE, vt);- ioctl (display->console_fd, VT_WAITACTIVE, vt);- }- - /* Open the tty */- g_snprintf (buf, sizeof(buf), "/dev/tty%d", vt);- display->tty_fd = open (buf, O_RDWR|O_NONBLOCK);- if (display->tty_fd < 0)- {- g_warning ("Can't open %s: %s", buf, strerror (errno));- close (display->console_fd);- g_free (display);- return NULL;- }-- /* set up switch signals */- if (ioctl (display->tty_fd, VT_GETMODE, &vtm) >= 0)- {- signal (SIGUSR1, gdk_fb_switch);- signal (SIGUSR2, gdk_fb_switch);- vtm.mode = VT_PROCESS;- vtm.waitv = 0;- vtm.relsig = SIGUSR1;- vtm.acqsig = SIGUSR2;- ioctl (display->tty_fd, VT_SETMODE, &vtm);- }- _gdk_fb_is_active_vt = TRUE;- - fb_filename = gdk_get_display ();- display->fb_fd = open (fb_filename, O_RDWR);- if (display->fb_fd < 0)- {- g_warning ("Can't open %s: %s", fb_filename, strerror (errno));- g_free (fb_filename);- close (display->tty_fd);- close (display->console_fd);- g_free (display);- return NULL;- }- g_free (fb_filename);+ s_window_t *window;+ GdkFBDisplay *display; - if (gdk_fb_set_mode (display) < 0)- {- close (display->fb_fd);- close (display->tty_fd);- close (display->console_fd);- g_free (display);- return NULL;- }+ display = g_new0(GdkFBDisplay, 1); - /* Disable normal text on the console */- ioctl (display->fb_fd, KDSETMODE, KD_GRAPHICS);+ s_client_init(&window);+ s_window_new(window, WINDOW_MAIN | NO_FORM, NULL);+ s_window_set_coor(window, 0, 0, 0, window->surface->width, window->surface->height); - ioctl (display->fb_fd, FBIOBLANK, 0);+ display->modeinfo.red.length = window->surface->redlength;+ display->modeinfo.green.length = window->surface->greenlength;+ display->modeinfo.blue.length = window->surface->bluelength;+ display->modeinfo.red.offset = window->surface->redoffset;+ display->modeinfo.green.offset = window->surface->greenoffset;+ display->modeinfo.blue.offset = window->surface->blueoffset;+ display->modeinfo.bits_per_pixel = window->surface->bitsperpixel;+ display->modeinfo.xres = window->surface->width;+ display->modeinfo.yres = window->surface->height;+ display->modeinfo.xres_virtual = window->surface->width;+ display->modeinfo.yres_virtual = window->surface->height;+ display->sinfo.line_length = window->surface->width * window->surface->bytesperpixel;+ display->sinfo.smem_len = window->surface->width * window->surface->bytesperpixel;+ display->sinfo.visual = FB_VISUAL_TRUECOLOR; - /* We used to use sinfo.smem_len, but that seemed to be broken in many cases */- display->fb_mmap = mmap (NULL,- display->modeinfo.yres * display->sinfo.line_length,- PROT_READ|PROT_WRITE,- MAP_SHARED,- display->fb_fd,- 0);- g_assert (display->fb_mmap != MAP_FAILED);+ display->fb_mmap = window->surface->vbuf; - if (display->sinfo.visual == FB_VISUAL_TRUECOLOR)- {- display->red_byte = display->modeinfo.red.offset >> 3;- display->green_byte = display->modeinfo.green.offset >> 3;- display->blue_byte = display->modeinfo.blue.offset >> 3;- }+ display->red_byte = display->modeinfo.red.offset >> 3;+ display->green_byte = display->modeinfo.green.offset >> 3;+ display->blue_byte = display->modeinfo.blue.offset >> 3; #ifdef ENABLE_SHADOW_FB- if (_gdk_fb_screen_angle % 2 == 0)- {- display->fb_width = display->modeinfo.xres;- display->fb_height = display->modeinfo.yres;- } - else- {- display->fb_width = display->modeinfo.yres;- display->fb_height = display->modeinfo.xres;- }- display->fb_stride =- display->fb_width * (display->modeinfo.bits_per_pixel / 8);- display->fb_mem = g_malloc(display->fb_height * display->fb_stride);+ if (_gdk_fb_screen_angle % 2 == 0) {+ display->fb_width = display->modeinfo.xres;+ display->fb_height = display->modeinfo.yres;+ } else {+ display->fb_width = display->modeinfo.yres;+ display->fb_height = display->modeinfo.xres;+ }+ display->fb_stride = display->sinfo.line_length;+ display->fb_mem = g_malloc(display->fb_height * display->fb_stride); #else- display->fb_mem = display->fb_mmap;- display->fb_width = display->modeinfo.xres;- display->fb_height = display->modeinfo.yres;- display->fb_stride = display->sinfo.line_length;+ display->fb_mem = display->fb_mmap;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -