ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/main.C
(Generate patch)

Comparing rxvt-unicode/src/main.C (file contents):
Revision 1.254 by ayin, Thu Oct 18 09:11:42 2007 UTC vs.
Revision 1.262 by ayin, Wed Nov 21 09:15:33 2007 UTC

93class rxvt_composite_vec rxvt_composite; 93class rxvt_composite_vec rxvt_composite;
94 94
95text_t rxvt_composite_vec::compose (unicode_t c1, unicode_t c2) 95text_t rxvt_composite_vec::compose (unicode_t c1, unicode_t c2)
96{ 96{
97 compose_char *cc; 97 compose_char *cc;
98 98
99 // break compose chains, as stupid readline really likes to duplicate 99 // break compose chains, as stupid readline really likes to duplicate
100 // composing characters for some reason near the end of a line. 100 // composing characters for some reason near the end of a line.
101 cc = (*this)[c1]; 101 cc = (*this)[c1];
102 while (cc) 102 while (cc)
103 { 103 {
181#endif 181#endif
182#ifdef POINTER_BLANK 182#ifdef POINTER_BLANK
183 pointer_ev (this, &rxvt_term::pointer_cb), 183 pointer_ev (this, &rxvt_term::pointer_cb),
184#endif 184#endif
185#ifdef USE_XIM 185#ifdef USE_XIM
186 im_ev (this, &rxvt_term::im_cb), 186 im_ev (this, &rxvt_term::im_cb),
187#endif 187#endif
188#ifndef NO_BELL 188#ifndef NO_BELL
189 bell_ev (this, &rxvt_term::bell_cb), 189 bell_ev (this, &rxvt_term::bell_cb),
190#endif 190#endif
191 termwin_ev (this, &rxvt_term::x_cb), 191 termwin_ev (this, &rxvt_term::x_cb),
192 vt_ev (this, &rxvt_term::x_cb), 192 vt_ev (this, &rxvt_term::x_cb),
193 child_ev (this, &rxvt_term::child_cb), 193 child_ev (this, &rxvt_term::child_cb),
194 check_ev (this, &rxvt_term::check_cb), 194 prepare_ev (this, &rxvt_term::prepare_cb),
195 flush_ev (this, &rxvt_term::flush_cb), 195 flush_ev (this, &rxvt_term::flush_cb),
196 destroy_ev (this, &rxvt_term::destroy_cb), 196 destroy_ev (this, &rxvt_term::destroy_cb),
197 pty_ev (this, &rxvt_term::pty_cb), 197 pty_ev (this, &rxvt_term::pty_cb),
198 incr_ev (this, &rxvt_term::incr_cb) 198 incr_ev (this, &rxvt_term::incr_cb)
199{ 199{
200 cmdbuf_ptr = cmdbuf_endp = cmdbuf_base; 200 cmdbuf_ptr = cmdbuf_endp = cmdbuf_base;
201 201
202 termlist.push_back (this); 202 termlist.push_back (this);
203 203
284 delete [] pix_colors_focused; 284 delete [] pix_colors_focused;
285#if OFF_FOCUS_FADING 285#if OFF_FOCUS_FADING
286 delete [] pix_colors_unfocused; 286 delete [] pix_colors_unfocused;
287#endif 287#endif
288 288
289#ifdef HAVE_BG_PIXMAP
290 bgPixmap.destroy ();
291#endif
289 displays.put (display); 292 displays.put (display);
290 293
291 scr_release (); 294 scr_release ();
292 295
293 /* clear all resources */ 296 /* clear all resources */
310#endif 313#endif
311} 314}
312 315
313// child has exited, usually destroys 316// child has exited, usually destroys
314void 317void
315rxvt_term::child_cb (child_watcher &w, int status) 318rxvt_term::child_cb (ev::child &w, int status)
316{ 319{
317 HOOK_INVOKE ((this, HOOK_CHILD_EXIT, DT_INT, status, DT_END)); 320 HOOK_INVOKE ((this, HOOK_CHILD_EXIT, DT_INT, status, DT_END));
318 321
319 cmd_pid = 0; 322 cmd_pid = 0;
320 323
348 incr_ev.stop (); 351 incr_ev.stop ();
349 termwin_ev.stop (display); 352 termwin_ev.stop (display);
350 vt_ev.stop (display); 353 vt_ev.stop (display);
351 } 354 }
352 355
353 check_ev.stop (); 356 prepare_ev.stop ();
354 pty_ev.stop (); 357 pty_ev.stop ();
355#ifdef CURSOR_BLINK 358#ifdef CURSOR_BLINK
356 cursor_blink_ev.stop (); 359 cursor_blink_ev.stop ();
357#endif 360#endif
358#ifdef TEXT_BLINK 361#ifdef TEXT_BLINK
366#endif 369#endif
367#ifdef POINTER_BLANK 370#ifdef POINTER_BLANK
368 pointer_ev.stop (); 371 pointer_ev.stop ();
369#endif 372#endif
370 373
371 destroy_ev.start (0); 374 destroy_ev.start ();
372} 375}
373 376
374void 377void
375rxvt_term::destroy_cb (time_watcher &w) 378rxvt_term::destroy_cb (ev::idle &w, int revents)
376{ 379{
377 make_current (); 380 make_current ();
378 381
379 delete this; 382 delete this;
380} 383}
434 else 437 else
435 XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", 438 XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x",
436 mesg, BUFSIZ); 439 mesg, BUFSIZ);
437 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->resourceid); 440 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->resourceid);
438 } 441 }
439 XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", 442 XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d",
440 mesg, BUFSIZ); 443 mesg, BUFSIZ);
441 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->serial); 444 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->serial);
442} 445}
443#endif 446#endif
444 447
518 521
519#ifdef ENABLE_TRANSPARENCY 522#ifdef ENABLE_TRANSPARENCY
520 if (option (Opt_transparent)) 523 if (option (Opt_transparent))
521 { 524 {
522 bgPixmap.set_transparent (); 525 bgPixmap.set_transparent ();
523#ifdef HAVE_AFTERIMAGE 526#ifdef HAVE_AFTERIMAGE
524 if (rs [Rs_blurradius]) 527 if (rs [Rs_blurradius])
525 bgPixmap.set_blur_radius (rs [Rs_blurradius]); 528 bgPixmap.set_blur_radius (rs [Rs_blurradius]);
526#endif 529#endif
527 if (ISSET_PIXCOLOR (Color_tint)) 530 if (ISSET_PIXCOLOR (Color_tint))
528 bgPixmap.set_tint (pix_colors_focused [Color_tint]); 531 bgPixmap.set_tint (pix_colors_focused [Color_tint]);
529 if (rs [Rs_shade]) 532 if (rs [Rs_shade])
530 bgPixmap.set_shade (rs [Rs_shade]); 533 bgPixmap.set_shade (rs [Rs_shade]);
531 534
565 init_command (cmd_argv); 568 init_command (cmd_argv);
566 569
567 free (cmd_argv); 570 free (cmd_argv);
568 571
569 if (pty->pty >= 0) 572 if (pty->pty >= 0)
570 pty_ev.start (pty->pty, EVENT_READ); 573 pty_ev.start (pty->pty, ev::READ);
571 574
572 check_ev.start (); 575 prepare_ev.start ();
573 576
574 HOOK_INVOKE ((this, HOOK_START, DT_END)); 577 HOOK_INVOKE ((this, HOOK_START, DT_END));
575 578
576#if ENABLE_XEMBED 579#if ENABLE_XEMBED
577 if (rs[Rs_embed]) 580 if (rs[Rs_embed])
589 return true; 592 return true;
590} 593}
591 594
592static struct sig_handlers 595static struct sig_handlers
593{ 596{
594 sig_watcher sw_term, sw_int; 597 ev::sig sw_term, sw_int;
595 598
596 /* 599 /*
597 * Catch a fatal signal and tidy up before quitting 600 * Catch a fatal signal and tidy up before quitting
598 */ 601 */
599 void 602 void
600 sig_term (sig_watcher &w) 603 sig_term (ev::sig &w, int revents)
601 { 604 {
602 rxvt_emergency_cleanup (); 605 rxvt_emergency_cleanup ();
603 signal (w.signum, SIG_DFL); 606 w.stop ();
604 kill (getpid (), w.signum); 607 kill (getpid (), w.signum);
605 } 608 }
606 609
607 sig_handlers () 610 sig_handlers ()
608 : sw_term (this, &sig_handlers::sig_term), 611 : sw_term (this, &sig_handlers::sig_term),
616void 619void
617rxvt_init () 620rxvt_init ()
618{ 621{
619 ptytty::init (); 622 ptytty::init ();
620 623
624 if (!ev::ev_default_loop (0))
625 rxvt_fatal ("cannot initialise libev (bad value for LIBEV_METHODS?)\n");
626
621 rxvt_environ = environ; 627 rxvt_environ = environ;
622 628
623 signal (SIGHUP, SIG_IGN); 629 signal (SIGHUP, SIG_IGN);
624 signal (SIGPIPE, SIG_IGN); 630 signal (SIGPIPE, SIG_IGN);
625 631
626 sig_handlers.sw_term.start (SIGTERM); 632 sig_handlers.sw_term.start (SIGTERM); ev::ev_unref ();
627 sig_handlers.sw_int.start (SIGINT); 633 sig_handlers.sw_int.start (SIGINT); ev::ev_unref ();
628 634
629 /* need to trap SIGURG for SVR4 (Unixware) rlogin */ 635 /* need to trap SIGURG for SVR4 (Unixware) rlogin */
630 /* signal (SIGURG, SIG_DFL); */ 636 /* signal (SIGURG, SIG_DFL); */
631 637
632 old_xerror_handler = XSetErrorHandler ((XErrorHandler) rxvt_xerror_handler); 638 old_xerror_handler = XSetErrorHandler ((XErrorHandler) rxvt_xerror_handler);
902 if (parent[0]) 908 if (parent[0])
903 { 909 {
904 resize_all_windows (0, 0, 0); 910 resize_all_windows (0, 0, 0);
905 scr_remap_chars (); 911 scr_remap_chars ();
906 scr_touch (true); 912 scr_touch (true);
907 } 913 }
908 914
909 return true; 915 return true;
910} 916}
911 917
912void 918void
956rxvt_term::set_window_color (int idx, const char *color) 962rxvt_term::set_window_color (int idx, const char *color)
957{ 963{
958#ifdef XTERM_COLOR_CHANGE 964#ifdef XTERM_COLOR_CHANGE
959 rxvt_color xcol; 965 rxvt_color xcol;
960 int i; 966 int i;
961 967
962 if (color == NULL || *color == '\0') 968 if (color == NULL || *color == '\0')
963 return; 969 return;
964 970
965 color = strdup (color); 971 color = strdup (color);
966 allocated.push_back ((void *)color); 972 allocated.push_back ((void *)color);
1000 /*TODO: handle Color_BD, scrollbar background, etc. */ 1006 /*TODO: handle Color_BD, scrollbar background, etc. */
1001 1007
1002 update_fade_color (idx); 1008 update_fade_color (idx);
1003 recolour_cursor (); 1009 recolour_cursor ();
1004 scr_recolour (); 1010 scr_recolour ();
1005#endif /* XTERM_COLOR_CHANGE */ 1011#endif /* XTERM_COLOR_CHANGE */
1006} 1012}
1007 1013
1008void 1014void
1009rxvt_term::recolour_cursor () 1015rxvt_term::recolour_cursor ()
1010{ 1016{
1347 if (term->rs[Rs_imLocale]) 1353 if (term->rs[Rs_imLocale])
1348 SET_LOCALE (term->locale); 1354 SET_LOCALE (term->locale);
1349 } 1355 }
1350 else 1356 else
1351 str = (void *)text->string.wide_char; 1357 str = (void *)text->string.wide_char;
1352 1358
1353 HOOK_INVOKE ((term, HOOK_XIM_PREEDIT_DRAW, 1359 HOOK_INVOKE ((term, HOOK_XIM_PREEDIT_DRAW,
1354 DT_INT, call_data->caret, 1360 DT_INT, call_data->caret,
1355 DT_INT, call_data->chg_first, 1361 DT_INT, call_data->chg_first,
1356 DT_INT, call_data->chg_length, 1362 DT_INT, call_data->chg_length,
1357 DT_LCS_LEN, (void *)text->feedback, text->feedback ? (int)text->length : 0, 1363 DT_LCS_LEN, (void *)text->feedback, text->feedback ? (int)text->length : 0,
1676 1682
1677 if (input_style & XIMPreeditPosition) 1683 if (input_style & XIMPreeditPosition)
1678 { 1684 {
1679 im_set_size (preedit_rect); 1685 im_set_size (preedit_rect);
1680 preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL); 1686 preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL);
1681 1687
1682 XSetICValues (Input_Context, 1688 XSetICValues (Input_Context,
1683 XNPreeditAttributes, preedit_attr, NULL); 1689 XNPreeditAttributes, preedit_attr, NULL);
1684 } 1690 }
1685 else 1691 else
1686 { 1692 {
1703 XFree (status_attr); 1709 XFree (status_attr);
1704 } 1710 }
1705 1711
1706 XFree (preedit_attr); 1712 XFree (preedit_attr);
1707} 1713}
1708#endif /* USE_XIM */ 1714#endif /* USE_XIM */
1709 1715
1710void 1716void
1711rxvt_term::get_window_origin (int &x, int &y) 1717rxvt_term::get_window_origin (int &x, int &y)
1712{ 1718{
1713 Window cr; 1719 Window cr;
1735 } 1741 }
1736 return None; 1742 return None;
1737} 1743}
1738 1744
1739#ifdef HAVE_BG_PIXMAP 1745#ifdef HAVE_BG_PIXMAP
1746# if TRACE_PIXMAPS
1747# undef update_background
1748int rxvt_term::trace_update_background (const char* file, int line)
1749{
1750 fprintf (stderr, "%s:%d:update_background()\n", file, line);
1751 update_background ();
1752}
1753# endif
1740int 1754int
1741rxvt_term::update_background () 1755rxvt_term::update_background ()
1742{ 1756{
1743 bgPixmap.invalidate (); 1757 bgPixmap.invalidate ();
1744 1758
1745 /* no chance of real time refresh if we are blurring ! */ 1759 /* no chance of real time refresh if we are blurring! */
1746 if (bgPixmap.invalid_since + 0.5 < NOW && !(bgPixmap.flags & bgPixmap_t::blurNeeded)) 1760 if (bgPixmap.invalid_since + 0.5 < ev::now () && !(bgPixmap.flags & bgPixmap_t::blurNeeded))
1747 bgPixmap.render (); 1761 bgPixmap.render ();
1748 else 1762 else
1749 { 1763 {
1750 update_background_ev.stop (); 1764 update_background_ev.stop ();
1765
1751 if (!bgPixmap.need_client_side_rendering()) 1766 if (!bgPixmap.need_client_side_rendering())
1752 update_background_ev.start (NOW + .05); 1767 update_background_ev.start (.05);
1753 else if (bgPixmap.flags & bgPixmap_t::blurNeeded) 1768 else if (bgPixmap.flags & bgPixmap_t::blurNeeded)
1754 update_background_ev.start (NOW + .2); /* very slow !!! */ 1769 update_background_ev.start (.20); /* very slow !!! */
1755 else 1770 else
1756 update_background_ev.start (NOW + .07); 1771 update_background_ev.start (.07);
1757 } 1772 }
1773
1758 return 0; 1774 return 0;
1759} 1775}
1760 1776
1761void 1777void
1762rxvt_term::update_background_cb (time_watcher &w) 1778rxvt_term::update_background_cb (ev::timer &w, int revents)
1763{ 1779{
1764 bgPixmap.render (); 1780 bgPixmap.render ();
1765} 1781}
1766 1782
1767#endif /* HAVE_BG_PIXMAP */ 1783#endif /* HAVE_BG_PIXMAP */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines