view src/input-method-motif.c @ 4857:34ff4dd7397d

Add ChangeLog entries for previous changes to tests dir -------------------- ChangeLog entries follow: -------------------- tests/ChangeLog addition: 2010-01-14 Ben Wing <ben@xemacs.org> * automated/base64-tests.el (bt-base64-encode-string): * automated/base64-tests.el (bt-base64-decode-string): * automated/base64-tests.el (for): * automated/byte-compiler-tests.el: * automated/byte-compiler-tests.el (before-and-after-compile-equal): * automated/case-tests.el: * automated/case-tests.el (downcase-string): * automated/case-tests.el (insert): * automated/case-tests.el (featurep): * automated/case-tests.el (let): * automated/case-tests.el (boundp): * automated/ccl-tests.el (ccl-test-normal-expr): * automated/ccl-tests.el (ccl-test-map-instructions): * automated/ccl-tests.el (ccl-test-suites): * automated/database-tests.el (delete-database-files): * automated/extent-tests.el (let): * automated/extent-tests.el (insert): * automated/extent-tests.el (props): * automated/hash-table-tests.el (test): * automated/hash-table-tests.el (for): * automated/hash-table-tests.el (ht): * automated/hash-table-tests.el (iterations): * automated/hash-table-tests.el (h1): * automated/hash-table-tests.el (make-hash-table): * automated/hash-table-tests.el (sxhash): * automated/lisp-tests.el: * automated/lisp-tests.el (setq): * automated/lisp-tests.el (test-setq): * automated/lisp-tests.el (my-vector): * automated/lisp-tests.el (nconc): * automated/lisp-tests.el (x): * automated/lisp-tests.el (y): * automated/lisp-tests.el (butlast): * automated/lisp-tests.el (+): * automated/lisp-tests.el (featurep): * automated/lisp-tests.el (-): * automated/lisp-tests.el (six): * automated/lisp-tests.el (three): * automated/lisp-tests.el (1): * automated/lisp-tests.el (one): * automated/lisp-tests.el (two): * automated/lisp-tests.el (0): * automated/lisp-tests.el (five): * automated/lisp-tests.el (logxor): * automated/lisp-tests.el (test1): * automated/lisp-tests.el (division-test): * automated/lisp-tests.el (for): * automated/lisp-tests.el (check-function-argcounts): * automated/lisp-tests.el (type-of): * automated/lisp-tests.el (mapcar): * automated/lisp-tests.el (z): * automated/lisp-tests.el (mapvector): * automated/lisp-tests.el (mapconcat): * automated/lisp-tests.el ([1 2 3]): * automated/lisp-tests.el (#*010): * automated/lisp-tests.el (test-harness-risk-infloops): * automated/lisp-tests.el (erase-buffer): * automated/lisp-tests.el (sym): * automated/lisp-tests.el (subseq): * automated/lisp-tests.el (length): * automated/lisp-tests.el (102): * automated/lisp-tests.el (read): * automated/lisp-tests.el (new-char): * automated/lisp-tests.el (new-load-file-name): * automated/lisp-tests.el (cl-floor): * automated/lisp-tests.el (foo): * automated/lisp-tests.el (string-variable): * automated/md5-tests.el (lambda): * automated/md5-tests.el (large-string): * automated/md5-tests.el (mapcar): * automated/md5-tests.el (insert): * automated/mule-tests.el (test-chars): * automated/mule-tests.el (existing-file-name): * automated/mule-tests.el (featurep): * automated/query-coding-tests.el (featurep): * automated/regexp-tests.el: * automated/regexp-tests.el (insert): * automated/regexp-tests.el (Assert): * automated/regexp-tests.el (string-match): * automated/regexp-tests.el (featurep): * automated/regexp-tests.el (text): * automated/regexp-tests.el (text1): * automated/regexp-tests.el ("aáa"): * automated/symbol-tests.el: * automated/symbol-tests.el (name): * automated/symbol-tests.el (check-weak-list-unique): * automated/symbol-tests.el (string): * automated/symbol-tests.el (list): * automated/symbol-tests.el (foo): * automated/symbol-tests.el (read): * automated/symbol-tests.el (eval): * automated/symbol-tests.el (fresh-keyword-name): * automated/symbol-tests.el (set): * automated/symbol-tests.el (print-gensym): * automated/symbol-tests.el (mysym): * automated/syntax-tests.el (test-forward-word): * automated/syntax-tests.el (test-backward-word): * automated/syntax-tests.el (test-syntax-table): * automated/syntax-tests.el (with-syntax-table): * automated/syntax-tests.el (Skip-Test-Unless): * automated/syntax-tests.el (with): * automated/tag-tests.el (testfile): * automated/test-harness.el: * automated/test-harness.el (test-harness-from-buffer): * automated/weak-tests.el (w): * automated/weak-tests.el (p): * automated/weak-tests.el (a): Create Assert-eq, Assert-equal, etc. These are equivalent to (Assert (eq ...)) etc. but display both the actual value and the expected value of the comparison. Use them throughout the test suite. * automated/test-harness.el (Assert): Clean up code and doc string of macro Assert.
author Ben Wing <ben@xemacs.org>
date Thu, 14 Jan 2010 02:34:47 -0600
parents 04bc9d2f42c7
children 308d34e9f07d
line wrap: on
line source

/* Various functions for X11R5+ input methods, using the Motif XmIm* functions.
   input-method-xlib.c provides a lower-level implementation.
   Copyright (C) 1996 Sun Microsystems.

This file is part of XEmacs.

XEmacs is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

XEmacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with XEmacs; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/* Synched up with: Not in FSF. */

/* Written by Martin Buchholz. */

#include <config.h>
#include <X11/Xlocale.h>        /* More portable than <locale.h> ? */
#include "lisp.h"
#include "frame-impl.h"
#include "console-x-impl.h"
#include "device.h"
#include "frame.h"
#include "EmacsFrame.h"
#include "xmotif.h"

#ifndef XIM_MOTIF
#error  XIM_MOTIF is not defined??
#endif


/* Create X input method for device */
void
XIM_init_device (struct device *UNUSED (d))
{
  /* Nothing to do */
}

/* Callback for the deleting frame. */
static void
XIM_delete_frame (Widget UNUSED (w), XtPointer client_data,
		  XtPointer UNUSED (call_data))
{
  XmImUnregister ((Widget) client_data);
}

void
XIM_init_frame (struct frame *f)
{
  Widget w = FRAME_X_TEXT_WIDGET (f);
  XPoint spot = {0,0};
  XmFontList fontlist;
  XmFontListEntry fontlistEntry;

  typedef struct
    {
      XFontSet  fontset;
      Pixel     fg;
      Pixel     bg;
    } xim_resources_t;

  xim_resources_t xim_resources;

  /* mrb: #### Fix so that background and foreground is set from
     default face, rather than foreground and background resources, or
     that the user can use set-frame-parameters to set xic attributes */

#define res(name, class_, representation, field, default_value)	\
  { name, class_, representation, sizeof(xim_resources.field),	\
    XtOffsetOf(xim_resources_t, field),				\
    XtRString, (XtPointer) (default_value) }

  static XtResource resources[] =
  {
    /*  name              class          represent'n field    default value */
    res(XtNfontSet,       XtCFontSet,    XtRFontSet, fontset, XtDefaultFontSet),
    res(XtNximForeground, XtCForeground, XtRPixel,   fg,      XtDefaultForeground),
    res(XtNximBackground, XtCBackground, XtRPixel,   bg,      XtDefaultBackground)
  };

  XtGetApplicationResources (w, &xim_resources,
			     resources, XtNumber (resources),
			     NULL, 0);

  if (! xim_resources.fontset)
    {
      stderr_out ("Can't get fontset resource for Input Method\n");
      return;
    }

  fontlistEntry = XmFontListEntryCreate(XmFONTLIST_DEFAULT_TAG,
					XmFONT_IS_FONTSET,
					(XtPointer) xim_resources.fontset);
  fontlist = XmFontListAppendEntry (NULL, fontlistEntry);
  XmImRegister (w, 0);
  XmImVaSetValues (w,
		   XmNfontList,     fontlist,
		   XmNforeground,   xim_resources.fg,
		   XmNbackground,   xim_resources.bg,
		   XmNspotLocation, &spot,
		   /*   XmNlineSpace, 0, */
		   NULL);

  XmFontListEntryFree (&fontlistEntry);

  XtAddCallback (w, XmNdestroyCallback, XIM_delete_frame, (XtPointer) w);
}

void
XIM_SetGeometry (struct frame *UNUSED (f))
{
}

void
XIM_SetSpotLocation (struct frame *f, int x, int y)
{
  /* #### FIX: Must make sure spot fits within Preedit Area */
  XPoint *spot = &(FRAME_X_XIC_SPOT (f));
  if (spot->x == (short) x &&
      spot->y == (short) y)
    return;

  spot->x = (short) x;
  spot->y = (short) y;

  XmImVaSetValues (FRAME_X_TEXT_WIDGET (f), XmNspotLocation, spot, NULL);
}

void
XIM_focus_event (struct frame *f, int in_p)
{
  if (in_p)
    XmImVaSetFocusValues (FRAME_X_TEXT_WIDGET (f), NULL);
  else
    XmImUnsetFocus (FRAME_X_TEXT_WIDGET (f));
}

void
vars_of_input_method_motif (void)
{
  Fprovide (intern ("xim"));
}