… | |
… | |
368 | { |
368 | { |
369 | for (rxvt_term **t = rxvt_term::termlist.begin (); t < rxvt_term::termlist.end (); t++) |
369 | for (rxvt_term **t = rxvt_term::termlist.begin (); t < rxvt_term::termlist.end (); t++) |
370 | (*t)->emergency_cleanup (); |
370 | (*t)->emergency_cleanup (); |
371 | } |
371 | } |
372 | |
372 | |
373 | #if ENABLE_FRILLS |
373 | #if !ENABLE_MINIMAL |
374 | static void |
374 | static void |
375 | print_x_error (Display *dpy, XErrorEvent *event) |
375 | print_x_error (Display *dpy, XErrorEvent *event) |
376 | { |
376 | { |
377 | char buffer[BUFSIZ]; |
377 | char buffer[BUFSIZ]; |
378 | char mesg[BUFSIZ]; |
378 | char mesg[BUFSIZ]; |
… | |
… | |
426 | GET_R->allowedxerror = event->error_code; |
426 | GET_R->allowedxerror = event->error_code; |
427 | else |
427 | else |
428 | { |
428 | { |
429 | // GET_R is most likely not the terminal which caused the error, |
429 | // GET_R is most likely not the terminal which caused the error, |
430 | // so just output the error and continue |
430 | // so just output the error and continue |
431 | #if ENABLE_FRILLS |
431 | #if ENABLE_MINIMAL |
|
|
432 | old_xerror_handler (display, event); |
|
|
433 | #else |
432 | print_x_error (display, event); |
434 | print_x_error (display, event); |
433 | #else |
|
|
434 | old_xerror_handler (display, event); |
|
|
435 | #endif |
435 | #endif |
436 | } |
436 | } |
437 | |
437 | |
438 | return 0; |
438 | return 0; |
439 | } |
439 | } |
… | |
… | |
514 | #if ENABLE_XEMBED |
514 | #if ENABLE_XEMBED |
515 | if (rs[Rs_embed]) |
515 | if (rs[Rs_embed]) |
516 | { |
516 | { |
517 | long info[2] = { 0, XEMBED_MAPPED }; |
517 | long info[2] = { 0, XEMBED_MAPPED }; |
518 | |
518 | |
519 | XChangeProperty (display->display, parent[0], xa[XA_XEMBED_INFO], xa[XA_XEMBED_INFO], |
519 | XChangeProperty (xdisp, parent[0], xa[XA_XEMBED_INFO], xa[XA_XEMBED_INFO], |
520 | 32, PropModeReplace, (unsigned char *)&info, 2); |
520 | 32, PropModeReplace, (unsigned char *)&info, 2); |
521 | } |
521 | } |
522 | #endif |
522 | #endif |
523 | |
523 | |
524 | XMapWindow (xdisp, vt); |
524 | XMapWindow (xdisp, vt); |
… | |
… | |
691 | |
691 | |
692 | if (scrollBar.state) |
692 | if (scrollBar.state) |
693 | { |
693 | { |
694 | sb_w = scrollbar_TotalWidth (); |
694 | sb_w = scrollbar_TotalWidth (); |
695 | szHint.base_width += sb_w; |
695 | szHint.base_width += sb_w; |
|
|
696 | |
696 | if (!OPTION (Opt_scrollBar_right)) |
697 | if (!OPTION (Opt_scrollBar_right)) |
697 | window_vt_x += sb_w; |
698 | window_vt_x += sb_w; |
698 | } |
699 | } |
699 | |
700 | |
700 | szHint.width_inc = fwidth; |
701 | szHint.width_inc = fwidth; |
… | |
… | |
842 | return true; |
843 | return true; |
843 | } |
844 | } |
844 | |
845 | |
845 | void rxvt_term::set_string_property (Atom prop, const char *str, int len) |
846 | void rxvt_term::set_string_property (Atom prop, const char *str, int len) |
846 | { |
847 | { |
847 | XChangeProperty (display->display, parent[0], |
848 | XChangeProperty (xdisp, parent[0], |
848 | prop, XA_STRING, 8, PropModeReplace, |
849 | prop, XA_STRING, 8, PropModeReplace, |
849 | (const unsigned char *)str, len >= 0 ? len : strlen (str)); |
850 | (const unsigned char *)str, len >= 0 ? len : strlen (str)); |
850 | } |
851 | } |
851 | |
852 | |
852 | void rxvt_term::set_utf8_property (Atom prop, const char *str, int len) |
853 | void rxvt_term::set_utf8_property (Atom prop, const char *str, int len) |
853 | { |
854 | { |
854 | wchar_t *ws = rxvt_mbstowcs (str, len); |
855 | wchar_t *ws = rxvt_mbstowcs (str, len); |
855 | char *s = rxvt_wcstoutf8 (ws); |
856 | char *s = rxvt_wcstoutf8 (ws); |
856 | |
857 | |
857 | XChangeProperty (display->display, parent[0], |
858 | XChangeProperty (xdisp, parent[0], |
858 | prop, xa[XA_UTF8_STRING], 8, PropModeReplace, |
859 | prop, xa[XA_UTF8_STRING], 8, PropModeReplace, |
859 | (const unsigned char *)s, strlen (s)); |
860 | (const unsigned char *)s, strlen (s)); |
860 | |
861 | |
861 | free (s); |
862 | free (s); |
862 | free (ws); |
863 | free (ws); |
… | |
… | |
887 | void |
888 | void |
888 | rxvt_term::set_window_color (int idx, const char *color) |
889 | rxvt_term::set_window_color (int idx, const char *color) |
889 | { |
890 | { |
890 | rxvt_color xcol; |
891 | rxvt_color xcol; |
891 | int i; |
892 | int i; |
892 | |
893 | |
893 | if (color == NULL || *color == '\0') |
894 | if (color == NULL || *color == '\0') |
894 | return; |
895 | return; |
|
|
896 | |
|
|
897 | color = strdup (color); |
|
|
898 | allocated.push_back ((void *)color); |
|
|
899 | rs[Rs_color + idx] = color; |
895 | |
900 | |
896 | /* handle color aliases */ |
901 | /* handle color aliases */ |
897 | if (isdigit (*color)) |
902 | if (isdigit (*color)) |
898 | { |
903 | { |
899 | i = atoi (color); |
904 | i = atoi (color); |
900 | |
905 | |
901 | if (i >= 8 && i <= 15) |
906 | if (i >= 8 && i <= 15) |
902 | { /* bright colors */ |
907 | { /* bright colors */ |
903 | i -= 8; |
908 | i -= 8; |
904 | pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; |
909 | pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; |
905 | SET_PIXCOLOR (idx); |
|
|
906 | goto done; |
910 | goto done; |
907 | } |
911 | } |
908 | |
912 | |
909 | if (i >= 0 && i <= 7) |
913 | if (i >= 0 && i <= 7) |
910 | { /* normal colors */ |
914 | { /* normal colors */ |
911 | pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; |
915 | pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; |
912 | SET_PIXCOLOR (idx); |
|
|
913 | goto done; |
916 | goto done; |
914 | } |
917 | } |
915 | } |
918 | } |
916 | |
919 | |
917 | if (!rXParseAllocColor (&xcol, color)) |
920 | set_color (xcol, color); |
918 | return; |
|
|
919 | |
|
|
920 | /* XStoreColor (display->display, display->cmap, XColor*); */ |
|
|
921 | |
921 | |
922 | /* |
922 | /* |
923 | * FIXME: should free colors here, but no idea how to do it so instead, |
923 | * FIXME: should free colors here, but no idea how to do it so instead, |
924 | * so just keep gobbling up the colormap |
924 | * so just keep gobbling up the colormap |
925 | */ |
925 | */ |
926 | # if 0 |
|
|
927 | for (i = Color_Black; i <= Color_White; i++) |
|
|
928 | if (pix_colors[idx] == pix_colors[i]) |
|
|
929 | break; |
|
|
930 | if (i > Color_White) |
|
|
931 | { |
|
|
932 | /* fprintf (stderr, "XFreeColors: pix_colors [%d] = %lu\n", idx, pix_colors [idx]); */ |
|
|
933 | XFreeColors (display->display, display->cmap, (pix_colors + idx), 1, |
|
|
934 | DisplayPlanes (display->display, display->screen)); |
|
|
935 | } |
|
|
936 | # endif |
|
|
937 | |
926 | |
938 | pix_colors_focused[idx] = xcol; |
927 | pix_colors_focused[idx] = xcol; |
939 | SET_PIXCOLOR (idx); |
|
|
940 | |
928 | |
941 | /* XSetWindowAttributes attr; */ |
929 | /* XSetWindowAttributes attr; */ |
942 | /* Cursor cursor; */ |
930 | /* Cursor cursor; */ |
943 | done: |
931 | done: |
944 | |
932 | |
945 | #if OFF_FOCUS_FADING |
933 | #if OFF_FOCUS_FADING |
946 | if (rs[Rs_fade]) |
934 | if (rs[Rs_fade]) |
947 | pix_colors_unfocused[idx] = pix_colors_focused[idx].fade (this, atoi (rs[Rs_fade]), pix_colors[Color_fade]); |
935 | { |
|
|
936 | rgba c; |
|
|
937 | pix_colors [Color_fade].get (c); |
|
|
938 | pix_colors_focused [idx].fade (this, atoi (rs[Rs_fade]), pix_colors_unfocused [idx], c); |
|
|
939 | } |
948 | #endif |
940 | #endif |
949 | |
941 | |
950 | /*TODO: handle Color_BD, scrollbar background, etc. */ |
942 | /*TODO: handle Color_BD, scrollbar background, etc. */ |
951 | |
943 | |
952 | recolour_cursor (); |
944 | recolour_cursor (); |
… | |
… | |
958 | #endif /* XTERM_COLOR_CHANGE */ |
950 | #endif /* XTERM_COLOR_CHANGE */ |
959 | |
951 | |
960 | void |
952 | void |
961 | rxvt_term::recolour_cursor () |
953 | rxvt_term::recolour_cursor () |
962 | { |
954 | { |
963 | XColor xcol[2]; |
955 | XColor fg, bg; |
964 | |
956 | |
965 | xcol[0].pixel = ISSET_PIXCOLOR (Color_pointer_fg) |
957 | (ISSET_PIXCOLOR (Color_pointer_fg) |
966 | ? pix_colors_focused[Color_pointer_fg] |
958 | ? pix_colors_focused[Color_pointer_fg] |
967 | : pix_colors_focused[Color_fg]; |
959 | : pix_colors_focused[Color_fg]).get (fg); |
|
|
960 | |
968 | xcol[1].pixel = ISSET_PIXCOLOR (Color_pointer_bg) |
961 | (ISSET_PIXCOLOR (Color_pointer_bg) |
969 | ? pix_colors_focused[Color_pointer_bg] |
962 | ? pix_colors_focused[Color_pointer_bg] |
970 | : pix_colors_focused[Color_bg]; |
963 | : pix_colors_focused[Color_bg]).get (bg); |
971 | |
964 | |
972 | XQueryColors (display->display, cmap, xcol, 2); |
965 | XRecolorCursor (xdisp, TermWin_cursor, &fg, &bg); |
973 | XRecolorCursor (display->display, TermWin_cursor, xcol + 0, xcol + 1); |
|
|
974 | } |
966 | } |
975 | |
967 | |
976 | /*----------------------------------------------------------------------*/ |
968 | /*----------------------------------------------------------------------*/ |
977 | /* |
969 | /* |
978 | * find if fg/bg matches any of the normal (low-intensity) colors |
970 | * find if fg/bg matches any of the normal (low-intensity) colors |
… | |
… | |
1006 | sprintf (env_colorfgbg, "COLORFGBG=%s;%s%s", fstr, xpmb, bstr); |
998 | sprintf (env_colorfgbg, "COLORFGBG=%s;%s%s", fstr, xpmb, bstr); |
1007 | } |
999 | } |
1008 | |
1000 | |
1009 | /*----------------------------------------------------------------------*/ |
1001 | /*----------------------------------------------------------------------*/ |
1010 | |
1002 | |
1011 | int |
1003 | bool |
1012 | rxvt_term::rXParseAllocColor (rxvt_color *screen_in_out, const char *colour) |
1004 | rxvt_term::set_color (rxvt_color &color, const char *name) |
1013 | { |
1005 | { |
1014 | if (!screen_in_out->set (this, colour)) |
1006 | if (color.set (this, name)) |
1015 | { |
|
|
1016 | rxvt_warn ("can't get colour '%s', continuing without.\n", colour); |
|
|
1017 | return false; |
|
|
1018 | } |
|
|
1019 | |
|
|
1020 | return true; |
1007 | return true; |
|
|
1008 | |
|
|
1009 | rxvt_warn ("can't get colour '%s', continuing without.\n", name); |
|
|
1010 | return false; |
1021 | } |
1011 | } |
1022 | |
1012 | |
1023 | /* -------------------------------------------------------------------- * |
1013 | /* -------------------------------------------------------------------- * |
1024 | * - WINDOW RESIZING - * |
1014 | * - WINDOW RESIZING - * |
1025 | * -------------------------------------------------------------------- */ |
1015 | * -------------------------------------------------------------------- */ |
… | |
… | |
1125 | { |
1115 | { |
1126 | XWindowAttributes wattr; |
1116 | XWindowAttributes wattr; |
1127 | |
1117 | |
1128 | if (newwidth == 0 || newheight == 0) |
1118 | if (newwidth == 0 || newheight == 0) |
1129 | { |
1119 | { |
1130 | XGetWindowAttributes (display->display, display->root, &wattr); |
1120 | XGetWindowAttributes (xdisp, display->root, &wattr); |
1131 | |
1121 | |
1132 | if (newwidth == 0) |
1122 | if (newwidth == 0) |
1133 | newwidth = wattr.width - szHint.base_width; |
1123 | newwidth = wattr.width - szHint.base_width; |
1134 | if (newheight == 0) |
1124 | if (newheight == 0) |
1135 | newheight = wattr.height - szHint.base_height; |
1125 | newheight = wattr.height - szHint.base_height; |
… | |
… | |
1197 | strncat (server, & (p[4]), IMBUFSIZ - 9); /* skip "@im=" */ |
1187 | strncat (server, & (p[4]), IMBUFSIZ - 9); /* skip "@im=" */ |
1198 | |
1188 | |
1199 | if ((p = strchr (server + 1, '@')) != NULL) /* first one only */ |
1189 | if ((p = strchr (server + 1, '@')) != NULL) /* first one only */ |
1200 | *p = '\0'; |
1190 | *p = '\0'; |
1201 | |
1191 | |
1202 | atom = XInternAtom (display->display, server, False); |
1192 | atom = XInternAtom (xdisp, server, False); |
1203 | win = XGetSelectionOwner (display->display, atom); |
1193 | win = XGetSelectionOwner (xdisp, atom); |
1204 | |
1194 | |
1205 | if (win != None) |
1195 | if (win != None) |
1206 | return True; |
1196 | return True; |
1207 | } |
1197 | } |
1208 | |
1198 | |
… | |
… | |
1432 | "*", |
1422 | "*", |
1433 | fheight, |
1423 | fheight, |
1434 | fheight + 1, fheight - 1, |
1424 | fheight + 1, fheight - 1, |
1435 | fheight - 2, fheight + 2); |
1425 | fheight - 2, fheight + 2); |
1436 | |
1426 | |
1437 | fs = XCreateFontSet (display->display, rs[Rs_imFont] ? rs[Rs_imFont] : pat, |
1427 | fs = XCreateFontSet (xdisp, rs[Rs_imFont] ? rs[Rs_imFont] : pat, |
1438 | &missing_charset_list, &missing_charset_count, &def_string); |
1428 | &missing_charset_list, &missing_charset_count, &def_string); |
1439 | |
1429 | |
1440 | if (missing_charset_list) |
1430 | if (missing_charset_list) |
1441 | XFreeStringList (missing_charset_list); |
1431 | XFreeStringList (missing_charset_list); |
1442 | |
1432 | |
… | |
… | |
1518 | status_attr ? XNStatusAttributes : NULL, |
1508 | status_attr ? XNStatusAttributes : NULL, |
1519 | status_attr, NULL); |
1509 | status_attr, NULL); |
1520 | |
1510 | |
1521 | if (preedit_attr) XFree (preedit_attr); |
1511 | if (preedit_attr) XFree (preedit_attr); |
1522 | if (status_attr) XFree (status_attr); |
1512 | if (status_attr) XFree (status_attr); |
1523 | if (fs) XFreeFontSet (display->display, fs); |
1513 | if (fs) XFreeFontSet (xdisp, fs); |
1524 | |
1514 | |
1525 | if (Input_Context == NULL) |
1515 | if (Input_Context == NULL) |
1526 | { |
1516 | { |
1527 | rxvt_warn ("failed to create input context, continuing without XIM.\n"); |
1517 | rxvt_warn ("failed to create input context, continuing without XIM.\n"); |
1528 | im_destroy (); |
1518 | im_destroy (); |