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

Comparing rxvt-unicode/src/xdefaults.C (file contents):
Revision 1.176 by sf-exg, Fri May 2 20:35:00 2014 UTC vs.
Revision 1.177 by root, Sun May 18 18:09:52 2014 UTC

627 627
628#ifndef NO_RESOURCES 628#ifndef NO_RESOURCES
629/*----------------------------------------------------------------------*/ 629/*----------------------------------------------------------------------*/
630 630
631# ifdef KEYSYM_RESOURCE 631# ifdef KEYSYM_RESOURCE
632static void
633rxvt_define_key (rxvt_term *term, const char *k, const char *v)
634{
635 term->bind_action (k, v);
636}
637
632/* 638/*
633 * Define key from XrmEnumerateDatabase. 639 * Define key from XrmEnumerateDatabase.
634 * quarks will be something like 640 * quarks will be something like
635 * "rxvt" "keysym" "0xFF01" 641 * "rxvt" "keysym" "0xFF01"
636 * value will be a string 642 * value will be a string
637 */ 643 */
638static int 644static int
645rxvt_keysym_enumerate_helper (
639rxvt_define_key (XrmDatabase *database ecb_unused, 646 XrmDatabase *database ecb_unused,
640 XrmBindingList bindings ecb_unused, 647 XrmBindingList bindings ecb_unused,
641 XrmQuarkList quarks, 648 XrmQuarkList quarks,
642 XrmRepresentation *type ecb_unused, 649 XrmRepresentation *type ecb_unused,
643 XrmValue *value, 650 XrmValue *value,
644 XPointer closure) 651 XPointer closure
652)
645{ 653{
646 rxvt_term *term = (rxvt_term *)closure;
647 int last; 654 int last;
648 655
649 for (last = 0; quarks[last] != NULLQUARK; last++) /* look for last quark in list */ 656 for (last = 0; quarks[last] != NULLQUARK; last++) /* look for last quark in list */
650 ; 657 ;
651 658
652 last--; 659 rxvt_term *term = (rxvt_term *)(((void **)closure)[0]);
660 void (*cb)(rxvt_term *, const char *, const char *)
661 = (void (*)(rxvt_term *, const char *, const char *))
662 (((void **)closure)[1]);
663
653 term->bind_action (XrmQuarkToString (quarks[last]), (char *)value->addr); 664 cb (term, XrmQuarkToString (quarks[last - 1]), (char *)value->addr);
665
654 return False; 666 return False;
655} 667}
656 668
657/* 669/*
658 * look for something like this (XK_Delete) 670 * look for something like this (XK_Delete)
831 } 843 }
832#endif /* NO_RESOURCES */ 844#endif /* NO_RESOURCES */
833} 845}
834 846
835void 847void
836rxvt_term::extract_keysym_resources () 848rxvt_term::enumerate_keysym_resources (void (*cb)(rxvt_term *, const char *, const char *))
837{ 849{
838#ifndef NO_RESOURCES 850#ifndef NO_RESOURCES
839 /* 851 /*
840 * [R5 or later]: enumerate the resource database 852 * [R5 or later]: enumerate the resource database
841 */ 853 */
842# ifdef KEYSYM_RESOURCE 854# ifdef KEYSYM_RESOURCE
855 void *closure[2] = {
856 (void *)this,
857 (void *)cb,
858 };
859
843 XrmDatabase database = XrmGetDatabase (dpy); 860 XrmDatabase database = XrmGetDatabase (dpy);
844 XrmName name_prefix[3]; 861 XrmName name_prefix[3];
845 XrmClass class_prefix[3]; 862 XrmClass class_prefix[3];
846 863
847 name_prefix[0] = XrmStringToName (rs[Rs_name]); 864 name_prefix[0] = XrmStringToName (rs[Rs_name]);
850 class_prefix[0] = XrmStringToName (RESCLASS); 867 class_prefix[0] = XrmStringToName (RESCLASS);
851 class_prefix[1] = XrmStringToName ("Keysym"); 868 class_prefix[1] = XrmStringToName ("Keysym");
852 class_prefix[2] = NULLQUARK; 869 class_prefix[2] = NULLQUARK;
853 /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ 870 /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */
854 XrmEnumerateDatabase (database, name_prefix, class_prefix, 871 XrmEnumerateDatabase (database, name_prefix, class_prefix,
855 XrmEnumOneLevel, rxvt_define_key, (XPointer)this); 872 XrmEnumOneLevel, rxvt_keysym_enumerate_helper, (XPointer)closure);
856# ifdef RESFALLBACK 873# ifdef RESFALLBACK
857 name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK); 874 name_prefix[0] = class_prefix[0] = XrmStringToName (RESFALLBACK);
858 /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */ 875 /* XXX: Need to check sizeof (rxvt_t) == sizeof (XPointer) */
859 XrmEnumerateDatabase (database, name_prefix, class_prefix, 876 XrmEnumerateDatabase (database, name_prefix, class_prefix,
860 XrmEnumOneLevel, rxvt_define_key, (XPointer)this); 877 XrmEnumOneLevel, rxvt_keysym_enumerate_helper, (XPointer)closure);
861# endif 878# endif
862# endif 879# endif
863 880
864#endif /* NO_RESOURCES */ 881#endif /* NO_RESOURCES */
865} 882}
866 883
884void
885rxvt_term::extract_keysym_resources ()
886{
887 enumerate_keysym_resources (rxvt_define_key);
888}
889
867/*----------------------- end-of-file (C source) -----------------------*/ 890/*----------------------- end-of-file (C source) -----------------------*/
891

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines