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.218 by root, Thu Feb 2 18:04:46 2006 UTC vs.
Revision 1.229 by root, Fri Aug 18 23:03:31 2006 UTC

1/*--------------------------------*-C-*---------------------------------* 1/*----------------------------------------------------------------------*
2 * File: main.C 2 * File: main.C
3 *----------------------------------------------------------------------* 3 *----------------------------------------------------------------------*
4 * 4 *
5 * All portions of code are copyright by their respective author/s. 5 * All portions of code are copyright by their respective author/s.
6 * Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk> 6 * Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk>
56static char curlocale[128], savelocale[128]; 56static char curlocale[128], savelocale[128];
57 57
58bool 58bool
59rxvt_set_locale (const char *locale) NOTHROW 59rxvt_set_locale (const char *locale) NOTHROW
60{ 60{
61 int size = strlen (locale) + 1;
62
63 if (size > sizeof (curlocale))
64 rxvt_fatal ("locale string too long, aborting.\n");
65
61 if (!locale || !strncmp (locale, curlocale, 128)) 66 if (!locale || !memcmp (locale, curlocale, size))
62 return false; 67 return false;
63 68
64 strncpy (curlocale, locale, 128); 69 memcpy (curlocale, locale, size);
65 setlocale (LC_CTYPE, curlocale); 70 setlocale (LC_CTYPE, curlocale);
66 return true; 71 return true;
67} 72}
68 73
69void 74void
143} 148}
144#endif 149#endif
145 150
146rxvt_term::rxvt_term () 151rxvt_term::rxvt_term ()
147 : 152 :
148#if TRANSPARENT 153#if TRANSPARENT || ENABLE_PERL
149 rootwin_ev (this, &rxvt_term::rootwin_cb), 154 rootwin_ev (this, &rxvt_term::rootwin_cb),
150#endif 155#endif
151#ifdef HAVE_SCROLLBARS 156#ifdef HAVE_SCROLLBARS
152 scrollbar_ev (this, &rxvt_term::x_cb), 157 scrollbar_ev (this, &rxvt_term::x_cb),
153#endif 158#endif
198void rxvt_term::emergency_cleanup () 203void rxvt_term::emergency_cleanup ()
199{ 204{
200 if (cmd_pid) 205 if (cmd_pid)
201 kill (-cmd_pid, SIGHUP); 206 kill (-cmd_pid, SIGHUP);
202 207
208 pty_ev.stop ();
203 delete pty; pty = 0; 209 delete pty; pty = 0;
204} 210}
205 211
206rxvt_term::~rxvt_term () 212rxvt_term::~rxvt_term ()
207{ 213{
264 } 270 }
265 271
266 clear (); 272 clear ();
267 } 273 }
268 274
269 delete pix_colors_focused; 275 delete [] pix_colors_focused;
270#if OFF_FOCUS_FADING 276#if OFF_FOCUS_FADING
271 delete pix_colors_unfocused; 277 delete [] pix_colors_unfocused;
272#endif 278#endif
273 279
274 displays.put (display); 280 displays.put (display);
275 281
276 scr_release (); 282 scr_release ();
325 im_ev.stop (display); 331 im_ev.stop (display);
326#endif 332#endif
327#if HAVE_SCROLLBARS 333#if HAVE_SCROLLBARS
328 scrollbar_ev.stop (display); 334 scrollbar_ev.stop (display);
329#endif 335#endif
330#if TRANSPARENT 336#if TRANSPARENT || ENABLE_PERL
331 rootwin_ev.stop (display); 337 rootwin_ev.stop (display);
332#endif 338#endif
333 incr_ev.stop (); 339 incr_ev.stop ();
334 termwin_ev.stop (display); 340 termwin_ev.stop (display);
335 vt_ev.stop (display); 341 vt_ev.stop (display);
503 XSelectInput (dpy, display->root, PropertyChangeMask); 509 XSelectInput (dpy, display->root, PropertyChangeMask);
504 check_our_parents (); 510 check_our_parents ();
505 rootwin_ev.start (display, display->root); 511 rootwin_ev.start (display, display->root);
506 } 512 }
507#endif 513#endif
514#if ENABLE_PERL
515 rootwin_ev.start (display, display->root);
516#endif
508 517
509 set_colorfgbg (); 518 set_colorfgbg ();
510 519
511 init_command (cmd_argv); 520 init_command (cmd_argv);
512 521
704 713
705 if (!OPTION (Opt_scrollBar_right)) 714 if (!OPTION (Opt_scrollBar_right))
706 window_vt_x += sb_w; 715 window_vt_x += sb_w;
707 } 716 }
708 717
709 szHint.width_inc = fwidth; 718 szHint.width_inc = fwidth;
710 szHint.height_inc = fheight; 719 szHint.height_inc = fheight;
711 szHint.min_width = szHint.base_width + szHint.width_inc; 720 szHint.min_width = szHint.base_width + szHint.width_inc;
712 szHint.min_height = szHint.base_height + szHint.height_inc; 721 szHint.min_height = szHint.base_height + szHint.height_inc;
713 722
714 if (newwidth && newwidth - szHint.base_width < max_width) 723 if (newwidth && newwidth - szHint.base_width < max_width)
715 { 724 {
716 szHint.width = newwidth; 725 szHint.width = newwidth;
935 pix_colors_focused[idx] = xcol; 944 pix_colors_focused[idx] = xcol;
936 945
937 /* XSetWindowAttributes attr; */ 946 /* XSetWindowAttributes attr; */
938 /* Cursor cursor; */ 947 /* Cursor cursor; */
939done: 948done:
940
941#if OFF_FOCUS_FADING
942 if (rs[Rs_fade])
943 {
944 rgba c;
945 pix_colors [Color_fade].get (c);
946 pix_colors_focused [idx].fade (this, atoi (rs[Rs_fade]), pix_colors_unfocused [idx], c);
947 }
948#endif
949
950 /*TODO: handle Color_BD, scrollbar background, etc. */ 949 /*TODO: handle Color_BD, scrollbar background, etc. */
951 950
951 update_fade_color (idx);
952 recolour_cursor (); 952 recolour_cursor ();
953 scr_recolour (); 953 scr_recolour ();
954} 954}
955 955
956#else 956#else
1033 int fix_screen; 1033 int fix_screen;
1034 int old_width = szHint.width; 1034 int old_width = szHint.width;
1035 int old_height = szHint.height; 1035 int old_height = szHint.height;
1036 1036
1037 window_calc (newwidth, newheight); 1037 window_calc (newwidth, newheight);
1038
1039 if (!HOOK_INVOKE ((this, HOOK_RESIZE_ALL_WINDOWS, DT_INT, newwidth, DT_INT, newheight, DT_END)))
1038 XSetWMNormalHints (dpy, parent[0], &szHint); 1040 XSetWMNormalHints (dpy, parent[0], &szHint);
1039 1041
1040 if (!ignoreparent) 1042 if (!ignoreparent)
1041 { 1043 {
1042#ifdef SMART_RESIZE 1044#ifdef SMART_RESIZE
1043 /* 1045 /*
1117 if (pixmap) 1119 if (pixmap)
1118 scr_touch (false); 1120 scr_touch (false);
1119#endif 1121#endif
1120 1122
1121#ifdef USE_XIM 1123#ifdef USE_XIM
1122 IMSetStatusPosition (); 1124 IMSetPosition ();
1123#endif 1125#endif
1124} 1126}
1125 1127
1126/* 1128/*
1127 * Set the width/height of the vt window in characters. Units are pixels. 1129 * Set the width/height of the vt window in characters. Units are pixels.
1524 preedit_attr, 1526 preedit_attr,
1525 status_attr ? XNStatusAttributes : NULL, 1527 status_attr ? XNStatusAttributes : NULL,
1526 status_attr, NULL); 1528 status_attr, NULL);
1527 1529
1528 if (preedit_attr) XFree (preedit_attr); 1530 if (preedit_attr) XFree (preedit_attr);
1529 if (status_attr) XFree (status_attr); 1531 if (status_attr) XFree (status_attr);
1530 if (fs) XFreeFontSet (dpy, fs); 1532 if (fs) XFreeFontSet (dpy, fs);
1531 1533
1532 if (Input_Context == NULL) 1534 if (Input_Context == NULL)
1533 { 1535 {
1534 rxvt_warn ("failed to create input context, continuing without XIM.\n"); 1536 rxvt_warn ("failed to create input context, continuing without XIM.\n");
1535 im_destroy (); 1537 im_destroy ();
1540 // unfortunately, only the focus window is used by XIM, hard to fix 1542 // unfortunately, only the focus window is used by XIM, hard to fix
1541 if (!XGetICValues (Input_Context, XNFilterEvents, &vt_emask_xim, NULL)) 1543 if (!XGetICValues (Input_Context, XNFilterEvents, &vt_emask_xim, NULL))
1542 vt_select_input (); 1544 vt_select_input ();
1543#endif 1545#endif
1544 1546
1545 if (input_style & XIMPreeditArea)
1546 IMSetStatusPosition (); 1547 IMSetPosition ();
1547 1548
1548 return true; 1549 return true;
1549} 1550}
1550 1551
1551void 1552void
1609 SET_LOCALE (locale); 1610 SET_LOCALE (locale);
1610#endif 1611#endif
1611} 1612}
1612 1613
1613void 1614void
1614rxvt_term::IMSetStatusPosition () 1615rxvt_term::IMSetPosition ()
1615{ 1616{
1616 XRectangle preedit_rect, status_rect, *needed_rect; 1617 XRectangle preedit_rect, status_rect, *needed_rect;
1617 XVaNestedList preedit_attr, status_attr; 1618 XVaNestedList preedit_attr, status_attr;
1618 1619
1619 if (!Input_Context 1620 if (!Input_Context
1620 || !focus 1621 || !focus
1621 || !(input_style & XIMPreeditArea) 1622 || !(input_style & (XIMPreeditArea | XIMPreeditPosition))
1622 || !IMisRunning ()) 1623 || !IMisRunning ())
1623 return; 1624 return;
1624 1625
1626 if (input_style & XIMPreeditPosition)
1627 {
1628 im_set_size (preedit_rect);
1629 preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL);
1630
1631 XSetICValues (Input_Context,
1632 XNPreeditAttributes, preedit_attr, NULL);
1633 }
1634 else
1635 {
1625 /* Getting the necessary width of preedit area */ 1636 /* Getting the necessary width of preedit area */
1626 status_attr = XVaCreateNestedList (0, XNAreaNeeded, &needed_rect, NULL); 1637 status_attr = XVaCreateNestedList (0, XNAreaNeeded, &needed_rect, NULL);
1627 XGetICValues (Input_Context, XNStatusAttributes, status_attr, NULL); 1638 XGetICValues (Input_Context, XNStatusAttributes, status_attr, NULL);
1628 XFree (status_attr); 1639 XFree (status_attr);
1629 1640
1630 im_set_preedit_area (preedit_rect, status_rect, *needed_rect); 1641 im_set_preedit_area (preedit_rect, status_rect, *needed_rect);
1631 XFree (needed_rect); 1642 XFree (needed_rect);
1632 1643
1633 preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL); 1644 preedit_attr = XVaCreateNestedList (0, XNArea, &preedit_rect, NULL);
1634 status_attr = XVaCreateNestedList (0, XNArea, &status_rect, NULL); 1645 status_attr = XVaCreateNestedList (0, XNArea, &status_rect, NULL);
1635 1646
1636 XSetICValues (Input_Context, 1647 XSetICValues (Input_Context,
1637 XNPreeditAttributes, preedit_attr, 1648 XNPreeditAttributes, preedit_attr,
1638 XNStatusAttributes, status_attr, NULL); 1649 XNStatusAttributes, status_attr,
1650 NULL);
1639 1651
1652 XFree (status_attr);
1653 }
1654
1640 XFree (preedit_attr); 1655 XFree (preedit_attr);
1641 XFree (status_attr);
1642} 1656}
1643#endif /* USE_XIM */ 1657#endif /* USE_XIM */
1644 1658
1645/*----------------------- end-of-file (C source) -----------------------*/ 1659/*----------------------- end-of-file (C source) -----------------------*/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines