Skip to content

Commit 0336b84

Browse files
author
Yuuki Harano
committed
cleanup.
1 parent f1384bb commit 0336b84

File tree

3 files changed

+37
-74
lines changed

3 files changed

+37
-74
lines changed

lisp/term/pgtk-win.el

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
442442
&context (window-system pgtk))
443443
(pgtk-get-selection-internal selection-symbol target-type))
444444

445+
445446
(defvar pgtk-preedit-overlay nil)
446447

447448
(defun pgtk-preedit-text (e)
@@ -450,19 +451,21 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.")
450451
(delete-overlay pgtk-preedit-overlay))
451452
(setq pgtk-preedit-overlay nil)
452453

453-
(let (ov (ovstr "") str color (idx 0) face-name (atts nil))
454+
(let ((ovstr "")
455+
(idx 0)
456+
atts ov str color face-name)
454457
(dolist (part (nth 1 e))
455458
(setq str (car part))
456459
(setq face-name (intern (format "pgtk-im-%d" idx)))
457460
(eval
458-
`(defface ,face-name (list (cons t nil)) "face of input method preedit"))
461+
`(defface ,face-name nil "face of input method preedit"))
459462
(setq atts nil)
460463
(when (setq color (cdr-safe (assq 'fg (cdr part))))
461-
(setq atts (cons :foreground (cons color atts))))
464+
(setq atts (append atts `(:foreground ,color))))
462465
(when (setq color (cdr-safe (assq 'bg (cdr part))))
463-
(setq atts (cons :background (cons color atts))))
466+
(setq atts (append atts `(:background ,color))))
464467
(when (setq color (cdr-safe (assq 'ul (cdr part))))
465-
(setq atts (cons :underline (cons color atts))))
468+
(setq atts (append atts `(:underline ,color))))
466469
(face-spec-set face-name `((t . ,atts)))
467470
(add-text-properties 0 (length str) `(face ,face-name) str)
468471
(setq ovstr (concat ovstr str))

src/pgtkim.c

Lines changed: 29 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ static gboolean im_context_delete_surrounding_cb(GtkIMContext *imc, int offset,
4848
return TRUE;
4949
}
5050

51+
static Lisp_Object make_color_string(PangoAttrColor *pac)
52+
{
53+
char buf[256];
54+
sprintf(buf, "#%02x%02x%02x",
55+
pac->color.red >> 8,
56+
pac->color.green >> 8,
57+
pac->color.blue >> 8);
58+
return build_string(buf);
59+
}
60+
5161
static void im_context_preedit_changed_cb(GtkIMContext *imc, gpointer user_data)
5262
{
5363
struct pgtk_display_info *dpyinfo = user_data;
@@ -95,54 +105,32 @@ static void im_context_preedit_changed_cb(GtkIMContext *imc, gpointer user_data)
95105
has_underline = 1;
96106
}
97107

108+
PangoAttrColor *pac;
98109
if (has_underline) {
99-
PangoAttrColor *ulc = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_UNDERLINE_COLOR);
100-
if (ulc != NULL) {
101-
char *str = g_strdup_printf("#%02x%02x%02x",
102-
ulc->color.red >> 8,
103-
ulc->color.green >> 8,
104-
ulc->color.blue >> 8);
105-
part = Fcons(Fcons(intern("ul"), make_string(str, strlen(str))), part);
106-
g_free(str);
107-
} else {
108-
part = Fcons(Fcons(intern("ul"), Qt), part);
109-
}
110+
pac = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_UNDERLINE_COLOR);
111+
if (pac != NULL)
112+
part = Fcons(Fcons(Qul, make_color_string(pac)), part);
113+
else
114+
part = Fcons(Fcons(Qul, Qt), part);
110115
}
111116

112-
PangoAttrColor *fore = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_FOREGROUND);
113-
if (fore != NULL) {
114-
char *str = g_strdup_printf("#%02x%02x%02x",
115-
fore->color.red >> 8,
116-
fore->color.green >> 8,
117-
fore->color.blue >> 8);
118-
part = Fcons(Fcons(intern("fg"), make_string(str, strlen(str))), part);
119-
g_free(str);
120-
}
117+
pac = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_FOREGROUND);
118+
if (pac != NULL)
119+
part = Fcons(Fcons(Qfg, make_color_string(pac)), part);
121120

122-
PangoAttrColor *back = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_BACKGROUND);
123-
if (back != NULL) {
124-
char *str = g_strdup_printf("#%02x%02x%02x",
125-
back->color.red >> 8,
126-
back->color.green >> 8,
127-
back->color.blue >> 8);
128-
part = Fcons(Fcons(intern("bg"), make_string(str, strlen(str))), part);
129-
g_free(str);
130-
}
121+
pac = (PangoAttrColor *) pango_attr_iterator_get(iter, PANGO_ATTR_BACKGROUND);
122+
if (pac != NULL)
123+
part = Fcons(Fcons(Qbg, make_color_string(pac)), part);
131124

132-
part = Freverse(part);
125+
part = Fnreverse(part);
133126
list = Fcons(part, list);
134127
} while (pango_attr_iterator_next(iter));
135128

136-
list = Freverse(list);
129+
list = Fnreverse(list);
137130
pgtk_enqueue_preedit(f, list);
138131

139-
if (dpyinfo->im.preedit_str != NULL)
140-
g_free(dpyinfo->im.preedit_str);
141-
dpyinfo->im.preedit_str = str;
142-
143-
if (dpyinfo->im.preedit_attrs != NULL)
144-
pango_attr_list_unref(dpyinfo->im.preedit_attrs);
145-
dpyinfo->im.preedit_attrs = attrs;
132+
g_free(str);
133+
pango_attr_list_unref(attrs);
146134
}
147135

148136
static void im_context_preedit_end_cb(GtkIMContext *imc, gpointer user_data)
@@ -156,14 +144,6 @@ static void im_context_preedit_end_cb(GtkIMContext *imc, gpointer user_data)
156144
return;
157145

158146
pgtk_enqueue_preedit(f, Qnil);
159-
160-
if (dpyinfo->im.preedit_str != NULL)
161-
g_free(dpyinfo->im.preedit_str);
162-
dpyinfo->im.preedit_str = NULL;
163-
164-
if (dpyinfo->im.preedit_attrs != NULL)
165-
pango_attr_list_unref(dpyinfo->im.preedit_attrs);
166-
dpyinfo->im.preedit_attrs = NULL;
167147
}
168148

169149
static void im_context_preedit_start_cb(GtkIMContext *imc, gpointer user_data)
@@ -196,8 +176,6 @@ void pgtk_im_focus_out(struct frame *f)
196176

197177
void pgtk_im_init(struct pgtk_display_info *dpyinfo)
198178
{
199-
dpyinfo->im.preedit_str = NULL;
200-
dpyinfo->im.preedit_attrs = NULL;
201179
dpyinfo->im.context = NULL;
202180
}
203181

@@ -206,14 +184,6 @@ void pgtk_im_finish(struct pgtk_display_info *dpyinfo)
206184
if (dpyinfo->im.context != NULL)
207185
g_object_unref(dpyinfo->im.context);
208186
dpyinfo->im.context = NULL;
209-
210-
if (dpyinfo->im.preedit_str != NULL)
211-
g_free(dpyinfo->im.preedit_str);
212-
dpyinfo->im.preedit_str = NULL;
213-
214-
if (dpyinfo->im.preedit_attrs != NULL)
215-
pango_attr_list_unref(dpyinfo->im.preedit_attrs);
216-
dpyinfo->im.preedit_attrs = NULL;
217187
}
218188

219189
DEFUN ("pgtk-use-im-context", Fpgtk_use_im_context, Spgtk_use_im_context,
@@ -231,20 +201,9 @@ DEFUN ("pgtk-use-im-context", Fpgtk_use_im_context, Spgtk_use_im_context,
231201

232202
g_object_unref(dpyinfo->im.context);
233203
dpyinfo->im.context = NULL;
234-
235-
if (dpyinfo->im.preedit_str != NULL)
236-
g_free(dpyinfo->im.preedit_str);
237-
dpyinfo->im.preedit_str = NULL;
238-
239-
if (dpyinfo->im.preedit_attrs != NULL)
240-
pango_attr_list_unref(dpyinfo->im.preedit_attrs);
241-
dpyinfo->im.preedit_attrs = NULL;
242204
}
243205
} else {
244206
if (dpyinfo->im.context == NULL) {
245-
dpyinfo->im.preedit_str = NULL;
246-
dpyinfo->im.preedit_attrs = NULL;
247-
248207
dpyinfo->im.context = gtk_im_multicontext_new();
249208
g_signal_connect(dpyinfo->im.context, "commit", G_CALLBACK(im_context_commit_cb), dpyinfo);
250209
g_signal_connect(dpyinfo->im.context, "retrieve-surrounding", G_CALLBACK(im_context_retrieve_surrounding_cb), dpyinfo);
@@ -268,4 +227,7 @@ syms_of_pgtkim (void)
268227
defsubr (&Spgtk_use_im_context);
269228

270229
DEFSYM (Qpgtk_refresh_preedit, "pgtk-refresh-preedit");
230+
DEFSYM (Qul, "ul");
231+
DEFSYM (Qfg, "fg");
232+
DEFSYM (Qbg, "bg");
271233
}

src/pgtkterm.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,6 @@ struct pgtk_display_info
235235
/* input method */
236236
struct {
237237
GtkIMContext *context;
238-
char *preedit_str;
239-
PangoAttrList *preedit_attrs;
240238
struct frame *focused_frame;
241239
} im;
242240
};

0 commit comments

Comments
 (0)